commit 43352ff262eadb98c0998fc44c6bd56b8dc28454 Author: Frater Date: Sun Sep 24 01:45:36 2017 +0200 Upload diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d8fe4fa --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.project diff --git a/3DS/ALKU2.PRJ b/3DS/ALKU2.PRJ new file mode 100644 index 0000000..28d99a6 Binary files /dev/null and b/3DS/ALKU2.PRJ differ diff --git a/3DS/CITY.ASC b/3DS/CITY.ASC new file mode 100644 index 0000000..b8119af --- /dev/null +++ b/3DS/CITY.ASC @@ -0,0 +1,2574 @@ +Ambient light color: Red=0.3 Green=0.3 Blue=0.3 + +Named object: "platform01" +Tri-mesh, Vertices: 16 Faces: 8 +Vertex list: +Vertex 0: X: -2500 Y: -2598.325684 Z: 16.175011 +Vertex 1: X: -1999.999878 Y: -2598.325684 Z: 16.175011 +Vertex 2: X: -1999.999878 Y: -2098.325684 Z: 16.175005 +Vertex 3: X: -2500 Y: -2098.325684 Z: 16.175005 +Vertex 4: X: -2500 Y: -1998.325806 Z: 16.175005 +Vertex 5: X: -1999.999878 Y: -1998.325806 Z: 16.175005 +Vertex 6: X: -1999.999878 Y: -1498.325806 Z: 16.175001 +Vertex 7: X: -2500 Y: -1498.325806 Z: 16.175001 +Vertex 8: X: -2500 Y: -1398.325806 Z: 16.175001 +Vertex 9: X: -1999.999878 Y: -1398.325806 Z: 16.175001 +Vertex 10: X: -1999.999878 Y: -898.325806 Z: 16.174995 +Vertex 11: X: -2500 Y: -898.325806 Z: 16.174995 +Vertex 12: X: -1899.999878 Y: -1398.325806 Z: 16.175001 +Vertex 13: X: -1400 Y: -1398.325806 Z: 16.175001 +Vertex 14: X: -1400 Y: -898.325806 Z: 16.174995 +Vertex 15: X: -1899.999878 Y: -898.325806 Z: 16.174995 +Face list: +Face 0: A:0 B:1 C:2 AB:1 BC:1 CA:0 +Material:"GRAYCEMENT" +Face 1: A:0 B:2 C:3 AB:0 BC:1 CA:1 +Material:"GRAYCEMENT" +Face 2: A:4 B:5 C:6 AB:1 BC:1 CA:0 +Material:"GRAYCEMENT" +Face 3: A:4 B:6 C:7 AB:0 BC:1 CA:1 +Material:"GRAYCEMENT" +Face 4: A:8 B:9 C:10 AB:1 BC:1 CA:0 +Material:"GRAYCEMENT" +Face 5: A:8 B:10 C:11 AB:0 BC:1 CA:1 +Material:"GRAYCEMENT" +Face 6: A:12 B:13 C:14 AB:1 BC:1 CA:0 +Material:"GRAYCEMENT" +Face 7: A:12 B:14 C:15 AB:0 BC:1 CA:1 +Material:"GRAYCEMENT" + +Named object: "Building03" +Tri-mesh, Vertices: 16 Faces: 24 +Vertex list: +Vertex 0: X: -500.000122 Y: -3000 Z: 920.186035 +Vertex 1: X: -300.000122 Y: -3100 Z: 920.186035 +Vertex 2: X: -400.000092 Y: -2900 Z: 920.186035 +Vertex 3: X: -600.000122 Y: -2800 Z: 920.186035 +Vertex 4: X: -500.000153 Y: -3000 Z: 20.186033 +Vertex 5: X: -299.995331 Y: -3100 Z: 20.18602 +Vertex 6: X: -399.9953 Y: -2900 Z: 20.186037 +Vertex 7: X: -600.000122 Y: -2800 Z: 20.18605 +Vertex 8: X: -600.000122 Y: -3100 Z: 1099.936035 +Vertex 9: X: -500.000122 Y: -3100 Z: 1099.936035 +Vertex 10: X: -500.000122 Y: -3000 Z: 1099.936035 +Vertex 11: X: -600.000122 Y: -3000 Z: 1099.936035 +Vertex 12: X: -600.000183 Y: -3100 Z: 20.186031 +Vertex 13: X: -499.995361 Y: -3100 Z: 20.186028 +Vertex 14: X: -500.000153 Y: -3000 Z: 20.186033 +Vertex 15: X: -600.000183 Y: -3000 Z: 20.186039 +Face list: +Face 0: A:0 B:1 C:2 AB:1 BC:1 CA:0 +Material:"CYANMETAL" + + Page 1 + + + +Face 1: A:0 B:2 C:3 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 2: A:0 B:4 C:5 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 3: A:0 B:5 C:1 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 4: A:1 B:5 C:6 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 5: A:1 B:6 C:2 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 6: A:2 B:6 C:7 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 7: A:2 B:7 C:3 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 8: A:3 B:7 C:4 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 9: A:3 B:4 C:0 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 10: A:4 B:7 C:6 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 11: A:4 B:6 C:5 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 12: A:8 B:9 C:10 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 13: A:8 B:10 C:11 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 14: A:8 B:12 C:13 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 15: A:8 B:13 C:9 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 16: A:9 B:13 C:14 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 17: A:9 B:14 C:10 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 18: A:10 B:14 C:15 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 19: A:10 B:15 C:11 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 20: A:11 B:15 C:12 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 21: A:11 B:12 C:8 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 22: A:12 B:15 C:14 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 23: A:12 B:14 C:13 AB:0 BC:1 CA:1 +Material:"CYANMETAL" + +Named object: "BuildingH" +Tri-mesh, Vertices: 32 Faces: 48 +Vertex list: +Vertex 0: X: 813.990723 Y: -1703.455444 Z: 520.186035 +Vertex 1: X: 913.990723 Y: -1703.455444 Z: 520.186035 +Vertex 2: X: 913.990723 Y: -1603.455444 Z: 520.186035 +Vertex 3: X: 813.990723 Y: -1603.455444 Z: 520.186035 +Vertex 4: X: 813.990723 Y: -1703.455444 Z: 20.186035 +Vertex 5: X: 913.990723 Y: -1703.455444 Z: 20.186035 +Vertex 6: X: 913.990723 Y: -1603.455444 Z: 20.186035 +Vertex 7: X: 813.990723 Y: -1603.455444 Z: 20.186035 +Vertex 8: X: 813.990723 Y: -1903.455444 Z: 520.186035 +Vertex 9: X: 913.990723 Y: -1903.455444 Z: 520.186035 +Vertex 10: X: 913.990723 Y: -1803.455444 Z: 520.186035 + + Page 2 + + + +Vertex 11: X: 813.990723 Y: -1803.455444 Z: 520.186035 +Vertex 12: X: 813.990723 Y: -1903.455444 Z: 20.186035 +Vertex 13: X: 913.990723 Y: -1903.455444 Z: 20.186035 +Vertex 14: X: 913.990723 Y: -1803.455444 Z: 20.186035 +Vertex 15: X: 813.990723 Y: -1803.455444 Z: 20.186035 +Vertex 16: X: 613.990723 Y: -1703.455444 Z: 520.186035 +Vertex 17: X: 713.990723 Y: -1703.455444 Z: 520.186035 +Vertex 18: X: 713.990723 Y: -1603.455444 Z: 520.186035 +Vertex 19: X: 613.990723 Y: -1603.455444 Z: 520.186035 +Vertex 20: X: 613.990723 Y: -1703.455444 Z: 20.186035 +Vertex 21: X: 713.990723 Y: -1703.455444 Z: 20.186035 +Vertex 22: X: 713.990723 Y: -1603.455444 Z: 20.186035 +Vertex 23: X: 613.990723 Y: -1603.455444 Z: 20.186035 +Vertex 24: X: 613.990723 Y: -1903.455444 Z: 520.186035 +Vertex 25: X: 713.990723 Y: -1903.455444 Z: 520.186035 +Vertex 26: X: 713.990723 Y: -1803.455444 Z: 520.186035 +Vertex 27: X: 613.990723 Y: -1803.455444 Z: 520.186035 +Vertex 28: X: 613.990723 Y: -1903.455444 Z: 20.186035 +Vertex 29: X: 713.990723 Y: -1903.455444 Z: 20.186035 +Vertex 30: X: 713.990723 Y: -1803.455444 Z: 20.186035 +Vertex 31: X: 613.990723 Y: -1803.455444 Z: 20.186035 +Face list: +Face 0: A:0 B:1 C:2 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 1: A:0 B:2 C:3 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 2: A:0 B:4 C:5 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 3: A:0 B:5 C:1 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 4: A:1 B:5 C:6 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 5: A:1 B:6 C:2 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 6: A:2 B:6 C:7 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 7: A:2 B:7 C:3 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 8: A:3 B:7 C:4 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 9: A:3 B:4 C:0 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 10: A:4 B:7 C:6 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 11: A:4 B:6 C:5 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 12: A:8 B:9 C:10 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 13: A:8 B:10 C:11 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 14: A:8 B:12 C:13 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 15: A:8 B:13 C:9 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 16: A:9 B:13 C:14 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 17: A:9 B:14 C:10 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 18: A:10 B:14 C:15 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 19: A:10 B:15 C:11 AB:0 BC:1 CA:1 + + Page 3 + + + +Material:"CYANMETAL" +Face 20: A:11 B:15 C:12 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 21: A:11 B:12 C:8 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 22: A:12 B:15 C:14 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 23: A:12 B:14 C:13 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 24: A:16 B:17 C:18 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 25: A:16 B:18 C:19 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 26: A:16 B:20 C:21 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 27: A:16 B:21 C:17 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 28: A:17 B:21 C:22 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 29: A:17 B:22 C:18 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 30: A:18 B:22 C:23 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 31: A:18 B:23 C:19 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 32: A:19 B:23 C:20 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 33: A:19 B:20 C:16 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 34: A:20 B:23 C:22 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 35: A:20 B:22 C:21 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 36: A:24 B:25 C:26 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 37: A:24 B:26 C:27 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 38: A:24 B:28 C:29 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 39: A:24 B:29 C:25 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 40: A:25 B:29 C:30 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 41: A:25 B:30 C:26 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 42: A:26 B:30 C:31 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 43: A:26 B:31 C:27 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 44: A:27 B:31 C:28 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 45: A:27 B:28 C:24 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 46: A:28 B:31 C:30 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 47: A:28 B:30 C:29 AB:0 BC:1 CA:1 +Material:"CYANMETAL" + +Named object: "platform02" +Tri-mesh, Vertices: 20 Faces: 10 + + + Page 4 + + + +Vertex list: +Vertex 0: X: -1300 Y: -2600 Z: 16.707165 +Vertex 1: X: -795.695374 Y: -2600 Z: 16.190002 +Vertex 2: X: -800 Y: -1500 Z: 16.707157 +Vertex 3: X: -1300 Y: -1500 Z: 16.707157 +Vertex 4: X: -700 Y: -3200 Z: 16.707169 +Vertex 5: X: -200 Y: -3200 Z: 16.707169 +Vertex 6: X: -200 Y: -2700 Z: 16.707165 +Vertex 7: X: -700 Y: -2700 Z: 16.707165 +Vertex 8: X: 500 Y: -2000 Z: 16.707159 +Vertex 9: X: 1000 Y: -2000 Z: 16.707159 +Vertex 10: X: 1000 Y: -1500 Z: 16.707157 +Vertex 11: X: 500 Y: -1500 Z: 16.707157 +Vertex 12: X: 500 Y: -2600 Z: 16.707165 +Vertex 13: X: 1000 Y: -2600 Z: 16.707165 +Vertex 14: X: 1000 Y: -2100 Z: 16.707159 +Vertex 15: X: 500 Y: -2100 Z: 16.707159 +Vertex 16: X: -100 Y: -2000 Z: 16.707159 +Vertex 17: X: 400 Y: -2000 Z: 16.707159 +Vertex 18: X: 400 Y: -1500 Z: 16.707157 +Vertex 19: X: -100 Y: -1500 Z: 16.707157 +Face list: +Face 0: A:4 B:5 C:6 AB:1 BC:1 CA:0 +Material:"GREENGRASS" +Face 1: A:4 B:6 C:7 AB:0 BC:1 CA:1 +Material:"GREENGRASS" +Face 2: A:8 B:9 C:10 AB:1 BC:1 CA:0 +Material:"GREENGRASS" +Face 3: A:8 B:10 C:11 AB:0 BC:1 CA:1 +Material:"GREENGRASS" +Face 4: A:12 B:13 C:14 AB:1 BC:1 CA:0 +Material:"GREENGRASS" +Face 5: A:12 B:14 C:15 AB:0 BC:1 CA:1 +Material:"GREENGRASS" +Face 6: A:16 B:17 C:18 AB:1 BC:1 CA:0 +Material:"GREENGRASS" +Face 7: A:16 B:18 C:19 AB:0 BC:1 CA:1 +Material:"GREENGRASS" +Face 8: A:1 B:2 C:3 AB:1 BC:1 CA:0 +Material:"GREENGRASS" +Face 9: A:3 B:0 C:1 AB:1 BC:1 CA:0 +Material:"GREENGRASS" + +Named object: "Building08" +Tri-mesh, Vertices: 8 Faces: 12 +Vertex list: +Vertex 0: X: 0 Y: -1900 Z: 920.186035 +Vertex 1: X: 300 Y: -1900 Z: 920.186035 +Vertex 2: X: 300 Y: -1600 Z: 920.186035 +Vertex 3: X: 0 Y: -1600 Z: 920.186035 +Vertex 4: X: 0 Y: -1900 Z: 20.186035 +Vertex 5: X: 300 Y: -1900 Z: 20.186035 +Vertex 6: X: 300 Y: -1600 Z: 20.186035 +Vertex 7: X: 0 Y: -1600 Z: 20.186035 +Face list: +Face 0: A:0 B:1 C:2 AB:1 BC:1 CA:0 +Material:"BLUEMETAL" +Face 1: A:0 B:2 C:3 AB:0 BC:1 CA:1 +Material:"BLUEMETAL" +Face 2: A:0 B:4 C:5 AB:1 BC:1 CA:0 +Material:"BLUEMETAL" + + Page 5 + + + +Face 3: A:0 B:5 C:1 AB:0 BC:1 CA:1 +Material:"BLUEMETAL" +Face 4: A:1 B:5 C:6 AB:1 BC:1 CA:0 +Material:"BLUEMETAL" +Face 5: A:1 B:6 C:2 AB:0 BC:1 CA:1 +Material:"BLUEMETAL" +Face 6: A:2 B:6 C:7 AB:1 BC:1 CA:0 +Material:"BLUEMETAL" +Face 7: A:2 B:7 C:3 AB:0 BC:1 CA:1 +Material:"BLUEMETAL" +Face 8: A:3 B:7 C:4 AB:1 BC:1 CA:0 +Material:"BLUEMETAL" +Face 9: A:3 B:4 C:0 AB:0 BC:1 CA:1 +Material:"BLUEMETAL" +Face 10: A:4 B:7 C:6 AB:1 BC:1 CA:0 +Material:"BLUEMETAL" +Face 11: A:4 B:6 C:5 AB:0 BC:1 CA:1 +Material:"BLUEMETAL" + +Named object: "Building14" +Tri-mesh, Vertices: 9 Faces: 14 +Vertex list: +Vertex 0: X: -1870.125 Y: -1300 Z: 920.186035 +Vertex 1: X: -1429.875 Y: -1300 Z: 920.186035 +Vertex 2: X: -1429.875 Y: -1000 Z: 920.186035 +Vertex 3: X: -1870.125 Y: -1000 Z: 920.186035 +Vertex 4: X: -1870.125 Y: -1300 Z: 20.186035 +Vertex 5: X: -1429.875 Y: -1300 Z: 20.186035 +Vertex 6: X: -1429.875 Y: -1000 Z: 20.186005 +Vertex 7: X: -1870.125 Y: -1000 Z: 20.186005 +Vertex 8: X: -1636.790283 Y: -1142.266602 Z: 1078.111694 +Face list: +Face 0: A:0 B:4 C:5 AB:1 BC:1 CA:0 +Material:"BLUEMETAL" +Face 1: A:0 B:5 C:1 AB:0 BC:1 CA:1 +Material:"BLUEMETAL" +Face 2: A:1 B:5 C:6 AB:1 BC:1 CA:0 +Material:"BLUEMETAL" +Face 3: A:1 B:6 C:2 AB:0 BC:1 CA:1 +Material:"BLUEMETAL" +Face 4: A:2 B:6 C:7 AB:1 BC:1 CA:0 +Material:"BLUEMETAL" +Face 5: A:2 B:7 C:3 AB:0 BC:1 CA:1 +Material:"BLUEMETAL" +Face 6: A:3 B:7 C:4 AB:1 BC:1 CA:0 +Material:"BLUEMETAL" +Face 7: A:3 B:4 C:0 AB:0 BC:1 CA:1 +Material:"BLUEMETAL" +Face 8: A:4 B:7 C:6 AB:1 BC:1 CA:0 +Material:"BLUEMETAL" +Face 9: A:4 B:6 C:5 AB:0 BC:1 CA:1 +Material:"BLUEMETAL" +Face 10: A:3 B:8 C:2 AB:1 BC:1 CA:1 +Material:"BLUEMETAL" +Face 11: A:8 B:3 C:0 AB:1 BC:1 CA:1 +Material:"BLUEMETAL" +Face 12: A:1 B:8 C:0 AB:1 BC:1 CA:1 +Material:"BLUEMETAL" +Face 13: A:1 B:2 C:8 AB:1 BC:1 CA:1 +Material:"BLUEMETAL" + + + Page 6 + + + +Named object: "BuildingC" +Tri-mesh, Vertices: 18 Faces: 32 +Vertex list: +Vertex 0: X: -2460.964355 Y: -594.551514 Z: 17.071316 +Vertex 1: X: -2460.957031 Y: -781.051514 Z: 17.071268 +Vertex 2: X: -2110.111084 Y: -687.801514 Z: 17.071306 +Vertex 3: X: -1829.429443 Y: -687.801514 Z: 17.071276 +Vertex 4: X: -1478.573853 Y: -781.051514 Z: 17.071268 +Vertex 5: X: -1478.576172 Y: -594.551514 Z: 17.071316 +Vertex 6: X: -1689.077881 Y: -408.057861 Z: 17.071333 +Vertex 7: X: -1969.76062 Y: -314.803406 Z: 17.071341 +Vertex 8: X: -2250.445068 Y: -408.057617 Z: 17.071333 +Vertex 9: X: -2460.964355 Y: -594.551514 Z: 735.993896 +Vertex 10: X: -2460.957031 Y: -781.051514 Z: 735.993896 +Vertex 11: X: -2110.111084 Y: -687.80542 Z: 735.993896 +Vertex 12: X: -1829.429443 Y: -687.801514 Z: 735.993896 +Vertex 13: X: -1478.573853 Y: -781.05542 Z: 735.993896 +Vertex 14: X: -1478.576172 Y: -594.551514 Z: 735.993896 +Vertex 15: X: -1689.077881 Y: -408.051514 Z: 735.993896 +Vertex 16: X: -1969.76062 Y: -314.807861 Z: 735.994019 +Vertex 17: X: -2250.445068 Y: -408.053162 Z: 735.993896 +Face list: +Face 0: A:5 B:4 C:3 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Smoothing: 17 +Face 1: A:6 B:5 C:3 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Smoothing: 17 +Face 2: A:7 B:6 C:3 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Smoothing: 17 +Face 3: A:7 B:3 C:2 AB:0 BC:1 CA:0 +Material:"CYANMETAL" +Smoothing: 17 +Face 4: A:8 B:7 C:2 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Smoothing: 17 +Face 5: A:8 B:2 C:1 AB:0 BC:1 CA:0 +Material:"CYANMETAL" +Smoothing: 17 +Face 6: A:0 B:8 C:1 AB:1 BC:0 CA:1 +Material:"CYANMETAL" +Smoothing: 17 +Face 7: A:0 B:1 C:10 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Smoothing: 1, 10 +Face 8: A:0 B:10 C:9 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Smoothing: 1, 10 +Face 9: A:1 B:2 C:11 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Smoothing: 2, 11 +Face 10: A:1 B:11 C:10 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Smoothing: 2, 11 +Face 11: A:2 B:3 C:12 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Smoothing: 1, 10 +Face 12: A:2 B:12 C:11 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Smoothing: 1, 10 + + Page 7 + + + +Face 13: A:3 B:4 C:13 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Smoothing: 2, 11 +Face 14: A:3 B:13 C:12 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Smoothing: 2, 11 +Face 15: A:4 B:5 C:14 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Smoothing: 1, 10 +Face 16: A:4 B:14 C:13 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Smoothing: 1, 10 +Face 17: A:5 B:6 C:15 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Smoothing: 2, 11 +Face 18: A:5 B:15 C:14 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Smoothing: 2, 11 +Face 19: A:6 B:7 C:16 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Smoothing: 1, 10 +Face 20: A:6 B:16 C:15 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Smoothing: 1, 10 +Face 21: A:7 B:8 C:17 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Smoothing: 2, 11 +Face 22: A:7 B:17 C:16 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Smoothing: 2, 11 +Face 23: A:8 B:0 C:9 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Smoothing: 3, 12 +Face 24: A:8 B:9 C:17 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Smoothing: 3, 12 +Face 25: A:12 B:13 C:14 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Smoothing: 17 +Face 26: A:12 B:14 C:15 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Smoothing: 17 +Face 27: A:12 B:15 C:16 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Smoothing: 17 +Face 28: A:11 B:12 C:16 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Smoothing: 17 +Face 29: A:11 B:16 C:17 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Smoothing: 17 +Face 30: A:10 B:11 C:17 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Smoothing: 17 +Face 31: A:10 B:17 C:9 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Smoothing: 17 + +Named object: "Building20" +Tri-mesh, Vertices: 14 Faces: 24 + + + Page 8 + + + +Vertex list: +Vertex 0: X: -1036.357178 Y: -1366.641968 Z: 16.296814 +Vertex 1: X: -843.850281 Y: -1255.498047 Z: 16.296814 +Vertex 2: X: -843.85022 Y: -1033.210327 Z: 16.296814 +Vertex 3: X: -1036.357056 Y: -922.066284 Z: 16.296814 +Vertex 4: X: -1228.864014 Y: -1033.210083 Z: 16.296814 +Vertex 5: X: -1228.864258 Y: -1255.497803 Z: 16.296814 +Vertex 6: X: -1036.357178 Y: -1366.641968 Z: 1433.382324 +Vertex 7: X: -843.850281 Y: -1255.498047 Z: 1433.382324 +Vertex 8: X: -843.85022 Y: -1033.210327 Z: 1433.382324 +Vertex 9: X: -1036.357056 Y: -922.066284 Z: 1433.382324 +Vertex 10: X: -1228.864014 Y: -1033.210083 Z: 1433.382324 +Vertex 11: X: -1228.864258 Y: -1255.497803 Z: 1433.382324 +Vertex 12: X: -1036.357178 Y: -1144.354126 Z: 1433.382324 +Vertex 13: X: -1036.357178 Y: -1144.354126 Z: 16.296814 +Face list: +Face 0: A:0 B:1 C:7 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 1: A:0 B:7 C:6 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 2: A:1 B:2 C:8 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 3: A:1 B:8 C:7 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 4: A:2 B:3 C:9 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 5: A:2 B:9 C:8 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 6: A:3 B:4 C:10 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 7: A:3 B:10 C:9 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 8: A:4 B:5 C:11 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 9: A:4 B:11 C:10 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 10: A:5 B:0 C:6 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 11: A:5 B:6 C:11 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 12: A:1 B:0 C:13 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 13: A:2 B:1 C:13 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 14: A:3 B:2 C:13 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 15: A:4 B:3 C:13 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 16: A:5 B:4 C:13 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 17: A:0 B:5 C:13 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 18: A:6 B:7 C:12 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 19: A:7 B:8 C:12 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 20: A:8 B:9 C:12 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 21: A:9 B:10 C:12 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 22: A:10 B:11 C:12 AB:1 BC:0 CA:0 + + Page 9 + + + +Material:"CYANMETAL" +Face 23: A:11 B:6 C:12 AB:1 BC:0 CA:0 +Material:"CYANMETAL" + +Named object: "Building21" +Tri-mesh, Vertices: 19 Faces: 34 +Vertex list: +Vertex 0: X: 714.1604 Y: -2533.653809 Z: 16.837646 +Vertex 1: X: 839.183838 Y: -2488.148926 Z: 16.837646 +Vertex 2: X: 905.707397 Y: -2372.926758 Z: 16.837646 +Vertex 3: X: 882.604065 Y: -2241.900879 Z: 16.837646 +Vertex 4: X: 780.684082 Y: -2156.379883 Z: 16.837646 +Vertex 5: X: 647.636963 Y: -2156.379883 Z: 16.837646 +Vertex 6: X: 545.716858 Y: -2241.900635 Z: 16.837646 +Vertex 7: X: 522.613342 Y: -2372.926514 Z: 16.837646 +Vertex 8: X: 589.13678 Y: -2488.148926 Z: 16.837646 +Vertex 9: X: 714.1604 Y: -2533.653809 Z: 683.701416 +Vertex 10: X: 839.183838 Y: -2488.148926 Z: 683.701416 +Vertex 11: X: 905.707397 Y: -2372.926758 Z: 683.701416 +Vertex 12: X: 882.604065 Y: -2241.900879 Z: 683.701416 +Vertex 13: X: 780.684082 Y: -2156.379883 Z: 683.701416 +Vertex 14: X: 647.636963 Y: -2156.379883 Z: 683.701416 +Vertex 15: X: 545.716858 Y: -2241.900635 Z: 683.701416 +Vertex 16: X: 522.613342 Y: -2372.926514 Z: 683.701416 +Vertex 17: X: 589.13678 Y: -2488.148926 Z: 683.701416 +Vertex 18: X: 714.1604 Y: -2339.151855 Z: 16.837646 +Face list: +Face 0: A:0 B:1 C:10 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 1: A:0 B:10 C:9 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 2: A:1 B:2 C:11 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 3: A:1 B:11 C:10 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 4: A:2 B:3 C:12 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 5: A:2 B:12 C:11 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 6: A:3 B:4 C:13 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 7: A:3 B:13 C:12 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 8: A:4 B:5 C:14 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 9: A:4 B:14 C:13 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 10: A:5 B:6 C:15 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 11: A:5 B:15 C:14 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 12: A:6 B:7 C:16 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 13: A:6 B:16 C:15 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 14: A:7 B:8 C:17 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 15: A:7 B:17 C:16 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 16: A:8 B:0 C:9 AB:1 BC:1 CA:0 +Material:"CYANMETAL" + + Page 10 + + + +Face 17: A:8 B:9 C:17 AB:0 BC:1 CA:1 +Material:"CYANMETAL" +Face 18: A:1 B:0 C:18 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 19: A:2 B:1 C:18 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 20: A:3 B:2 C:18 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 21: A:4 B:3 C:18 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 22: A:5 B:4 C:18 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 23: A:6 B:5 C:18 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 24: A:7 B:6 C:18 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 25: A:8 B:7 C:18 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 26: A:0 B:8 C:18 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 27: A:11 B:12 C:13 AB:1 BC:1 CA:0 +Material:"CYANMETAL" +Face 28: A:13 B:14 C:11 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 29: A:11 B:14 C:10 AB:0 BC:0 CA:1 +Material:"CYANMETAL" +Face 30: A:10 B:14 C:9 AB:0 BC:0 CA:1 +Material:"CYANMETAL" +Face 31: A:14 B:15 C:9 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 32: A:15 B:16 C:9 AB:1 BC:0 CA:0 +Material:"CYANMETAL" +Face 33: A:16 B:17 C:9 AB:1 BC:1 CA:0 +Material:"CYANMETAL" + +Named object: "Tree01g" +Tri-mesh, Vertices: 42 Faces: 76 +Vertex list: +Vertex 0: X: -906.563782 Y: -1675.167603 Z: 142.676926 +Vertex 1: X: -944.730408 Y: -1594.649902 Z: 100.429207 +Vertex 2: X: -887.500977 Y: -1609.177612 Z: 138.151611 +Vertex 3: X: -914.92981 Y: -1605.905884 Z: 168.711197 +Vertex 4: X: -919.267029 Y: -1652.252808 Z: 128.273224 +Vertex 5: X: -917.537842 Y: -1627.79541 Z: 129.803772 +Vertex 6: X: -946.661682 Y: -1623.075928 Z: 98.291351 +Vertex 7: X: -887.61377 Y: -1652.582153 Z: 138.41272 +Vertex 8: X: -890.026001 Y: -1627.79541 Z: 138.692657 +Vertex 9: X: -848.075684 Y: -1623.075928 Z: 130.143768 +Vertex 10: X: -915.098511 Y: -1668.408691 Z: 169.092972 +Vertex 11: X: -921.722839 Y: -1649.644653 Z: 189.595764 +Vertex 12: X: -915.361694 Y: -1619.763794 Z: 170.047714 +Vertex 13: X: -912.711426 Y: -1600.624878 Z: 117.826241 +Vertex 14: X: -895.93689 Y: -1591.127686 Z: 109.869553 +Vertex 15: X: -866.685242 Y: -1583.816406 Z: 109.544357 +Vertex 16: X: -856.610474 Y: -1583.816406 Z: 156.55983 +Vertex 17: X: -873.510376 Y: -1579.914185 Z: 179.264526 +Vertex 18: X: -900.384521 Y: -1593.837646 Z: 177.939621 +Vertex 19: X: -918.87384 Y: -1605.51001 Z: 154.485794 +Vertex 20: X: -954.776184 Y: -1579.914185 Z: 153.008163 +Vertex 21: X: -922.812195 Y: -1605.51001 Z: 136.106781 +Vertex 22: X: -902.718994 Y: -1632.684692 Z: 130.958542 + + Page 11 + + + +Vertex 23: X: -908.212341 Y: -1625.894043 Z: 101.903198 +Vertex 24: X: -870.357544 Y: -1629.977539 Z: 96.797897 +Vertex 25: X: -895.002502 Y: -1639.756226 Z: 154.912094 +Vertex 26: X: -854.737366 Y: -1629.977539 Z: 169.691849 +Vertex 27: X: -884.934448 Y: -1629.977539 Z: 196.971909 +Vertex 28: X: -940.340027 Y: -1663.651733 Z: 149.908569 +Vertex 29: X: -955.872498 Y: -1629.977539 Z: 174.052383 +Vertex 30: X: -964.39917 Y: -1629.977539 Z: 134.260925 +Vertex 31: X: -922.694702 Y: -1581.098755 Z: 124.485893 +Vertex 32: X: -919.025269 Y: -1558.058228 Z: 159.23587 +Vertex 33: X: -897.750488 Y: -1588.067627 Z: 137.073273 +Vertex 34: X: -913.787537 Y: -1625.988403 Z: 104.173645 +Vertex 35: X: -906.894897 Y: -1625.988403 Z: 104.173645 +Vertex 36: X: -906.894897 Y: -1618.406738 Z: 104.173645 +Vertex 37: X: -913.787537 Y: -1618.406738 Z: 104.173645 +Vertex 38: X: -913.787537 Y: -1625.988403 Z: 20.796707 +Vertex 39: X: -906.894897 Y: -1625.988403 Z: 20.796707 +Vertex 40: X: -906.894897 Y: -1618.406738 Z: 20.796707 +Vertex 41: X: -913.787537 Y: -1618.406738 Z: 20.796707 +Face list: +Face 0: A:0 B:4 C:7 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 1: A:4 B:5 C:22 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 2: A:4 B:22 C:7 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 3: A:7 B:22 C:8 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 4: A:5 B:6 C:23 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 5: A:5 B:23 C:22 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 6: A:22 B:23 C:24 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 7: A:22 B:24 C:8 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 8: A:8 B:24 C:9 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 9: A:6 B:1 C:13 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 10: A:6 B:13 C:23 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 11: A:23 B:13 C:14 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 12: A:23 B:14 C:24 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 13: A:24 B:14 C:15 AB:1 BC:1 CA:1 +Material:"GREENGRASS" + + Page 12 + + + +Smoothing: 1 +Face 14: A:24 B:15 C:9 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 15: A:9 B:15 C:2 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 16: A:0 B:7 C:10 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 17: A:7 B:8 C:25 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 18: A:7 B:25 C:10 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 19: A:10 B:25 C:11 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 20: A:8 B:9 C:26 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 21: A:8 B:26 C:25 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 22: A:25 B:26 C:27 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 23: A:25 B:27 C:11 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 24: A:11 B:27 C:12 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 25: A:9 B:2 C:16 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 26: A:9 B:16 C:26 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 27: A:26 B:16 C:17 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 28: A:26 B:17 C:27 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 29: A:27 B:17 C:18 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 30: A:27 B:18 C:12 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 31: A:12 B:18 C:3 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 32: A:0 B:10 C:4 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 33: A:10 B:11 C:28 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 + + Page 13 + + + +Face 34: A:10 B:28 C:4 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 35: A:4 B:28 C:5 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 36: A:11 B:12 C:29 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 37: A:11 B:29 C:28 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 38: A:28 B:29 C:30 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 39: A:28 B:30 C:5 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 40: A:5 B:30 C:6 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 41: A:12 B:3 C:19 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 42: A:12 B:19 C:29 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 43: A:29 B:19 C:20 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 44: A:29 B:20 C:30 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 45: A:30 B:20 C:21 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 46: A:30 B:21 C:6 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 47: A:6 B:21 C:1 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 48: A:1 B:21 C:13 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 49: A:21 B:20 C:31 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 50: A:21 B:31 C:13 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 51: A:13 B:31 C:14 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 52: A:20 B:19 C:32 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 53: A:20 B:32 C:31 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 54: A:31 B:32 C:33 AB:1 BC:1 CA:1 + + Page 14 + + + +Material:"GREENGRASS" +Smoothing: 1 +Face 55: A:31 B:33 C:14 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 56: A:14 B:33 C:15 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 57: A:19 B:3 C:18 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 58: A:19 B:18 C:32 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 59: A:32 B:18 C:17 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 60: A:32 B:17 C:33 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 61: A:33 B:17 C:16 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 62: A:33 B:16 C:15 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 63: A:15 B:16 C:2 AB:1 BC:1 CA:1 +Material:"GREENGRASS" +Smoothing: 1 +Face 64: A:34 B:35 C:36 AB:1 BC:1 CA:0 +Smoothing: 2 +Face 65: A:34 B:36 C:37 AB:0 BC:1 CA:1 +Smoothing: 2 +Face 66: A:34 B:38 C:39 AB:1 BC:1 CA:0 +Smoothing: 2 +Face 67: A:34 B:39 C:35 AB:0 BC:1 CA:1 +Smoothing: 2 +Face 68: A:35 B:39 C:40 AB:1 BC:1 CA:0 +Smoothing: 2 +Face 69: A:35 B:40 C:36 AB:0 BC:1 CA:1 +Smoothing: 2 +Face 70: A:36 B:40 C:41 AB:1 BC:1 CA:0 +Smoothing: 2 +Face 71: A:36 B:41 C:37 AB:0 BC:1 CA:1 +Smoothing: 2 +Face 72: A:37 B:41 C:38 AB:1 BC:1 CA:0 +Smoothing: 2 +Face 73: A:37 B:38 C:34 AB:0 BC:1 CA:1 +Smoothing: 2 +Face 74: A:38 B:41 C:40 AB:1 BC:1 CA:0 +Smoothing: 2 +Face 75: A:38 B:40 C:39 AB:0 BC:1 CA:1 +Smoothing: 2 + +Named object: "Light02" +Direct light +Position: X:-2563.976074 Y:-3012.187012 Z:2450.47998 +Light color: Red=1 Green=1 Blue=1 + +Named object: "puistotie" +Tri-mesh, Vertices: 4 Faces: 2 + + Page 15 + + + +Vertex list: +Vertex 0: X: -1090.216064 Y: -1499.435181 Z: 18.149426 +Vertex 1: X: -1032.318726 Y: -1499.435181 Z: 18.149426 +Vertex 2: X: -1032.318726 Y: -2599.483398 Z: 18.149441 +Vertex 3: X: -1090.216064 Y: -2599.483398 Z: 18.149441 +Face list: +Face 0: A:0 B:3 C:2 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 1: A:0 B:2 C:1 AB:0 BC:1 CA:1 +Smoothing: 17 + +Named object: "b4" +Tri-mesh, Vertices: 48 Faces: 92 +Vertex list: +Vertex 0: X: -548.899292 Y: -2543.73877 Z: 19.143677 +Vertex 1: X: -355.674347 Y: -2543.73877 Z: 19.143677 +Vertex 2: X: -355.674347 Y: -2298.525391 Z: 19.143677 +Vertex 3: X: -259.061859 Y: -2298.525391 Z: 19.143677 +Vertex 4: X: -259.061859 Y: -1808.098633 Z: 19.143707 +Vertex 5: X: -355.674347 Y: -1808.098633 Z: 19.143707 +Vertex 6: X: -355.674347 Y: -1562.88501 Z: 19.143692 +Vertex 7: X: -548.899292 Y: -1562.88501 Z: 19.143692 +Vertex 8: X: -548.899292 Y: -1808.098633 Z: 19.143707 +Vertex 9: X: -645.511841 Y: -1808.098633 Z: 19.143707 +Vertex 10: X: -645.511841 Y: -2298.525391 Z: 19.143677 +Vertex 11: X: -548.899292 Y: -2298.525391 Z: 19.143677 +Vertex 12: X: -548.899292 Y: -2543.73877 Z: 618.73645 +Vertex 13: X: -355.674347 Y: -2543.73877 Z: 618.73645 +Vertex 14: X: -355.674347 Y: -2298.525391 Z: 618.73645 +Vertex 15: X: -259.061859 Y: -2298.525391 Z: 618.73645 +Vertex 16: X: -259.061859 Y: -1808.098633 Z: 618.73645 +Vertex 17: X: -355.674347 Y: -1808.098633 Z: 618.73645 +Vertex 18: X: -355.674347 Y: -1562.88501 Z: 618.73645 +Vertex 19: X: -548.899292 Y: -1562.88501 Z: 618.73645 +Vertex 20: X: -548.899292 Y: -1808.098633 Z: 618.73645 +Vertex 21: X: -645.511841 Y: -1808.098633 Z: 618.73645 +Vertex 22: X: -645.511841 Y: -2298.525391 Z: 618.73645 +Vertex 23: X: -548.899292 Y: -2298.525391 Z: 618.73645 +Vertex 24: X: -524.021606 Y: -2417.453613 Z: 618.73645 +Vertex 25: X: -380.552063 Y: -2417.453613 Z: 618.73645 +Vertex 26: X: -380.552063 Y: -2235.382568 Z: 618.73645 +Vertex 27: X: -308.817291 Y: -2235.382568 Z: 618.73645 +Vertex 28: X: -308.817291 Y: -1871.240967 Z: 618.73645 +Vertex 29: X: -380.552063 Y: -1871.240967 Z: 618.73645 +Vertex 30: X: -380.552063 Y: -1689.169922 Z: 618.73645 +Vertex 31: X: -524.021606 Y: -1689.169922 Z: 618.73645 +Vertex 32: X: -524.021606 Y: -1871.240967 Z: 618.73645 +Vertex 33: X: -595.75647 Y: -1871.240967 Z: 618.73645 +Vertex 34: X: -595.75647 Y: -2235.382568 Z: 618.73645 +Vertex 35: X: -524.021606 Y: -2235.382568 Z: 618.73645 +Vertex 36: X: -511.665314 Y: -2354.730225 Z: 642.100952 +Vertex 37: X: -392.908386 Y: -2354.730225 Z: 642.100952 +Vertex 38: X: -392.908386 Y: -2204.02124 Z: 642.100952 +Vertex 39: X: -333.529938 Y: -2204.02124 Z: 642.100952 +Vertex 40: X: -333.529938 Y: -1902.602661 Z: 642.100952 +Vertex 41: X: -392.908386 Y: -1902.602661 Z: 642.100952 +Vertex 42: X: -392.908386 Y: -1751.893677 Z: 642.100952 +Vertex 43: X: -511.665314 Y: -1751.893677 Z: 642.100952 +Vertex 44: X: -511.665314 Y: -1902.602661 Z: 642.100952 +Vertex 45: X: -571.043701 Y: -1902.602661 Z: 642.100952 +Vertex 46: X: -571.043701 Y: -2204.02124 Z: 642.100952 + + Page 16 + + + +Vertex 47: X: -511.665314 Y: -2204.02124 Z: 642.100952 +Face list: +Face 0: A:4 B:3 C:2 AB:1 BC:1 CA:0 +Face 1: A:5 B:4 C:2 AB:1 BC:0 CA:0 +Face 2: A:10 B:9 C:8 AB:1 BC:1 CA:0 +Face 3: A:11 B:10 C:8 AB:1 BC:0 CA:0 +Face 4: A:8 B:7 C:6 AB:1 BC:1 CA:0 +Face 5: A:8 B:6 C:5 AB:0 BC:1 CA:0 +Face 6: A:8 B:5 C:2 AB:0 BC:0 CA:0 +Face 7: A:11 B:8 C:2 AB:0 BC:0 CA:0 +Face 8: A:11 B:2 C:1 AB:0 BC:1 CA:0 +Face 9: A:11 B:1 C:0 AB:0 BC:1 CA:1 +Face 10: A:0 B:1 C:13 AB:1 BC:1 CA:0 +Face 11: A:0 B:13 C:12 AB:0 BC:1 CA:1 +Face 12: A:1 B:2 C:14 AB:1 BC:1 CA:0 +Face 13: A:1 B:14 C:13 AB:0 BC:1 CA:1 +Face 14: A:2 B:3 C:15 AB:1 BC:1 CA:0 +Face 15: A:2 B:15 C:14 AB:0 BC:1 CA:1 +Face 16: A:3 B:4 C:16 AB:1 BC:1 CA:0 +Face 17: A:3 B:16 C:15 AB:0 BC:1 CA:1 +Face 18: A:4 B:5 C:17 AB:1 BC:1 CA:0 +Face 19: A:4 B:17 C:16 AB:0 BC:1 CA:1 +Face 20: A:5 B:6 C:18 AB:1 BC:1 CA:0 +Face 21: A:5 B:18 C:17 AB:0 BC:1 CA:1 +Face 22: A:6 B:7 C:19 AB:1 BC:1 CA:0 +Face 23: A:6 B:19 C:18 AB:0 BC:1 CA:1 +Face 24: A:7 B:8 C:20 AB:1 BC:1 CA:0 +Face 25: A:7 B:20 C:19 AB:0 BC:1 CA:1 +Face 26: A:8 B:9 C:21 AB:1 BC:1 CA:0 +Face 27: A:8 B:21 C:20 AB:0 BC:1 CA:1 +Face 28: A:9 B:10 C:22 AB:1 BC:1 CA:0 +Face 29: A:9 B:22 C:21 AB:0 BC:1 CA:1 +Face 30: A:10 B:11 C:23 AB:1 BC:1 CA:0 +Face 31: A:10 B:23 C:22 AB:0 BC:1 CA:1 +Face 32: A:11 B:0 C:12 AB:1 BC:1 CA:0 +Face 33: A:11 B:12 C:23 AB:0 BC:1 CA:1 +Face 34: A:12 B:13 C:25 AB:1 BC:1 CA:0 +Face 35: A:12 B:25 C:24 AB:0 BC:1 CA:1 +Face 36: A:13 B:14 C:26 AB:1 BC:1 CA:0 +Face 37: A:13 B:26 C:25 AB:0 BC:1 CA:1 +Face 38: A:14 B:15 C:27 AB:1 BC:1 CA:0 +Face 39: A:14 B:27 C:26 AB:0 BC:1 CA:1 +Face 40: A:15 B:16 C:28 AB:1 BC:1 CA:0 +Face 41: A:15 B:28 C:27 AB:0 BC:1 CA:1 +Face 42: A:16 B:17 C:29 AB:1 BC:1 CA:0 +Face 43: A:16 B:29 C:28 AB:0 BC:1 CA:1 +Face 44: A:17 B:18 C:30 AB:1 BC:1 CA:0 +Face 45: A:17 B:30 C:29 AB:0 BC:1 CA:1 +Face 46: A:18 B:19 C:31 AB:1 BC:1 CA:0 +Face 47: A:18 B:31 C:30 AB:0 BC:1 CA:1 +Face 48: A:19 B:20 C:32 AB:1 BC:1 CA:0 +Face 49: A:19 B:32 C:31 AB:0 BC:1 CA:1 +Face 50: A:20 B:21 C:33 AB:1 BC:1 CA:0 +Face 51: A:20 B:33 C:32 AB:0 BC:1 CA:1 +Face 52: A:21 B:22 C:34 AB:1 BC:1 CA:0 +Face 53: A:21 B:34 C:33 AB:0 BC:1 CA:1 +Face 54: A:22 B:23 C:35 AB:1 BC:1 CA:0 +Face 55: A:22 B:35 C:34 AB:0 BC:1 CA:1 +Face 56: A:23 B:12 C:24 AB:1 BC:1 CA:0 +Face 57: A:23 B:24 C:35 AB:0 BC:1 CA:1 +Face 58: A:24 B:25 C:37 AB:1 BC:1 CA:0 + + Page 17 + + + +Face 59: A:24 B:37 C:36 AB:0 BC:1 CA:1 +Face 60: A:25 B:26 C:38 AB:1 BC:1 CA:0 +Face 61: A:25 B:38 C:37 AB:0 BC:1 CA:1 +Face 62: A:26 B:27 C:39 AB:1 BC:1 CA:0 +Face 63: A:26 B:39 C:38 AB:0 BC:1 CA:1 +Face 64: A:27 B:28 C:40 AB:1 BC:1 CA:0 +Face 65: A:27 B:40 C:39 AB:0 BC:1 CA:1 +Face 66: A:28 B:29 C:41 AB:1 BC:1 CA:0 +Face 67: A:28 B:41 C:40 AB:0 BC:1 CA:1 +Face 68: A:29 B:30 C:42 AB:1 BC:1 CA:0 +Face 69: A:29 B:42 C:41 AB:0 BC:1 CA:1 +Face 70: A:30 B:31 C:43 AB:1 BC:1 CA:0 +Face 71: A:30 B:43 C:42 AB:0 BC:1 CA:1 +Face 72: A:31 B:32 C:44 AB:1 BC:1 CA:0 +Face 73: A:31 B:44 C:43 AB:0 BC:1 CA:1 +Face 74: A:32 B:33 C:45 AB:1 BC:1 CA:0 +Face 75: A:32 B:45 C:44 AB:0 BC:1 CA:1 +Face 76: A:33 B:34 C:46 AB:1 BC:1 CA:0 +Face 77: A:33 B:46 C:45 AB:0 BC:1 CA:1 +Face 78: A:34 B:35 C:47 AB:1 BC:1 CA:0 +Face 79: A:34 B:47 C:46 AB:0 BC:1 CA:1 +Face 80: A:35 B:24 C:36 AB:1 BC:1 CA:0 +Face 81: A:35 B:36 C:47 AB:0 BC:1 CA:1 +Face 82: A:38 B:39 C:40 AB:1 BC:1 CA:0 +Face 83: A:38 B:40 C:41 AB:0 BC:1 CA:0 +Face 84: A:44 B:45 C:46 AB:1 BC:1 CA:0 +Face 85: A:44 B:46 C:47 AB:0 BC:1 CA:0 +Face 86: A:42 B:43 C:44 AB:1 BC:1 CA:0 +Face 87: A:41 B:42 C:44 AB:1 BC:0 CA:0 +Face 88: A:38 B:41 C:44 AB:0 BC:0 CA:0 +Face 89: A:38 B:44 C:47 AB:0 BC:0 CA:0 +Face 90: A:37 B:38 C:47 AB:1 BC:0 CA:0 +Face 91: A:36 B:37 C:47 AB:1 BC:0 CA:1 + +Named object: "L_pohja" +Tri-mesh, Vertices: 6 Faces: 4 +Vertex list: +Vertex 0: X: -1900 Y: -1500 Z: -0.000011 +Vertex 1: X: -1400 Y: -1500 Z: -0.000011 +Vertex 2: X: -1400 Y: -2700 Z: 0.000005 +Vertex 3: X: -800 Y: -2700 Z: 0.000005 +Vertex 4: X: -800 Y: -3200 Z: 0.000011 +Vertex 5: X: -1900 Y: -3200 Z: 0.000011 +Face list: +Face 0: A:5 B:4 C:3 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 1: A:5 B:3 C:2 AB:0 BC:1 CA:0 +Smoothing: 17 +Face 2: A:0 B:5 C:2 AB:1 BC:0 CA:0 +Smoothing: 17 +Face 3: A:0 B:2 C:1 AB:0 BC:1 CA:1 +Smoothing: 17 + +Named object: "tunneli" +Tri-mesh, Vertices: 20 Faces: 36 +Vertex list: +Vertex 0: X: -1479.946777 Y: -3094.972656 Z: 14.794373 +Vertex 1: X: -1479.946655 Y: -3094.972656 Z: 914.794373 +Vertex 2: X: -1479.946655 Y: -1594.972656 Z: 914.794373 +Vertex 3: X: -1479.946777 Y: -1594.972656 Z: 14.794373 +Vertex 4: X: -1479.946777 Y: -2494.972656 Z: 14.794373 + + Page 18 + + + +Vertex 5: X: -1479.946777 Y: -2494.972656 Z: 114.794373 +Vertex 6: X: -1479.946777 Y: -2544.972656 Z: 164.794373 +Vertex 7: X: -1479.946777 Y: -2644.972656 Z: 164.794373 +Vertex 8: X: -1479.946777 Y: -2694.972656 Z: 114.794373 +Vertex 9: X: -1479.946777 Y: -2694.972656 Z: 14.794373 +Vertex 10: X: -1800.564331 Y: -3094.972656 Z: 14.794373 +Vertex 11: X: -1800.564209 Y: -3094.972656 Z: 914.794373 +Vertex 12: X: -1800.564209 Y: -1594.972656 Z: 914.794373 +Vertex 13: X: -1800.564331 Y: -1594.972656 Z: 14.794373 +Vertex 14: X: -1800.564331 Y: -2494.972656 Z: 14.794373 +Vertex 15: X: -1800.564331 Y: -2494.972656 Z: 114.794373 +Vertex 16: X: -1800.564331 Y: -2544.972656 Z: 164.794373 +Vertex 17: X: -1800.564331 Y: -2644.972656 Z: 164.794373 +Vertex 18: X: -1800.564331 Y: -2694.972656 Z: 114.794373 +Vertex 19: X: -1800.564331 Y: -2694.972656 Z: 14.794373 +Face list: +Face 0: A:0 B:9 C:8 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 1: A:1 B:0 C:8 AB:1 BC:0 CA:0 +Smoothing: 17 +Face 2: A:1 B:8 C:7 AB:0 BC:1 CA:0 +Smoothing: 17 +Face 3: A:2 B:1 C:7 AB:1 BC:0 CA:0 +Smoothing: 17 +Face 4: A:2 B:7 C:6 AB:0 BC:1 CA:0 +Smoothing: 17 +Face 5: A:3 B:2 C:6 AB:1 BC:0 CA:0 +Smoothing: 17 +Face 6: A:3 B:6 C:5 AB:0 BC:1 CA:0 +Smoothing: 17 +Face 7: A:4 B:3 C:5 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 8: A:0 B:1 C:11 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 9: A:0 B:11 C:10 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 10: A:1 B:2 C:12 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 11: A:1 B:12 C:11 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 12: A:2 B:3 C:13 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 13: A:2 B:13 C:12 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 14: A:3 B:4 C:14 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 15: A:3 B:14 C:13 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 16: A:4 B:5 C:15 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 17: A:4 B:15 C:14 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 18: A:5 B:6 C:16 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 19: A:5 B:16 C:15 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 20: A:6 B:7 C:17 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 21: A:6 B:17 C:16 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 22: A:7 B:8 C:18 AB:1 BC:1 CA:0 + + Page 19 + + + +Smoothing: 2, 11 +Face 23: A:7 B:18 C:17 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 24: A:8 B:9 C:19 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 25: A:8 B:19 C:18 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 26: A:9 B:0 C:10 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 27: A:9 B:10 C:19 AB:0 BC:1 CA:1 +Smoothing: 3, 12 +Face 28: A:18 B:19 C:10 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 29: A:18 B:10 C:11 AB:0 BC:1 CA:0 +Smoothing: 17 +Face 30: A:17 B:18 C:11 AB:1 BC:0 CA:0 +Smoothing: 17 +Face 31: A:17 B:11 C:12 AB:0 BC:1 CA:0 +Smoothing: 17 +Face 32: A:16 B:17 C:12 AB:1 BC:0 CA:0 +Smoothing: 17 +Face 33: A:16 B:12 C:13 AB:0 BC:1 CA:0 +Smoothing: 17 +Face 34: A:15 B:16 C:13 AB:1 BC:0 CA:0 +Smoothing: 17 +Face 35: A:15 B:13 C:14 AB:0 BC:1 CA:1 +Smoothing: 17 + +Named object: "sivutalo" +Tri-mesh, Vertices: 8 Faces: 12 +Vertex list: +Vertex 0: X: -1408.584229 Y: -2792.887207 Z: 447.075134 +Vertex 1: X: -858.57843 Y: -2792.887207 Z: 447.075165 +Vertex 2: X: -858.57843 Y: -3092.887207 Z: 447.075104 +Vertex 3: X: -1408.584229 Y: -3092.887207 Z: 447.075104 +Vertex 4: X: -1408.584229 Y: -2792.887207 Z: 14.68758 +Vertex 5: X: -858.584229 Y: -2792.887207 Z: 14.687603 +Vertex 6: X: -858.584229 Y: -3092.887207 Z: 14.687557 +Vertex 7: X: -1408.584229 Y: -3092.887207 Z: 14.687534 +Face list: +Face 0: A:0 B:3 C:2 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 1: A:1 B:0 C:2 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 2: A:0 B:1 C:5 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 3: A:0 B:5 C:4 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 4: A:1 B:2 C:6 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 5: A:1 B:6 C:5 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 6: A:2 B:3 C:7 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 7: A:2 B:7 C:6 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 8: A:3 B:0 C:4 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 9: A:3 B:4 C:7 AB:0 BC:1 CA:1 +Smoothing: 3, 12 +Face 10: A:6 B:7 C:4 AB:1 BC:1 CA:0 + + Page 20 + + + +Smoothing: 17 +Face 11: A:6 B:4 C:5 AB:0 BC:1 CA:1 +Smoothing: 17 + +Named object: "laatta2" +Tri-mesh, Vertices: 8 Faces: 4 +Vertex list: +Vertex 0: X: -2500 Y: -800 Z: -0.000001 +Vertex 1: X: -2500 Y: -300 Z: -0.000007 +Vertex 2: X: -800 Y: -300 Z: -0.000007 +Vertex 3: X: -800 Y: -800 Z: -0.000001 +Vertex 4: X: -700 Y: -1400 Z: 0.000007 +Vertex 5: X: -700 Y: -300 Z: -0.000007 +Vertex 6: X: 1000 Y: -300 Z: -0.000007 +Vertex 7: X: 1000 Y: -1400 Z: 0.000007 +Face list: +Face 0: A:0 B:3 C:2 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 1: A:0 B:2 C:1 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 2: A:4 B:7 C:6 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 3: A:4 B:6 C:5 AB:0 BC:1 CA:1 +Smoothing: 17 + +Named object: "laatta01" +Tri-mesh, Vertices: 26 Faces: 14 +Vertex list: +Vertex 0: X: -2500 Y: -200 Z: -0.000017 +Vertex 1: X: -2500 Y: 300 Z: -0.000023 +Vertex 2: X: -1400 Y: 300 Z: -0.000023 +Vertex 3: X: -1400 Y: -200 Z: -0.000017 +Vertex 4: X: -1300 Y: 300 Z: -0.000023 +Vertex 5: X: 1000 Y: 300 Z: -0.000023 +Vertex 6: X: 1000 Y: -200 Z: -0.000017 +Vertex 7: X: -1300 Y: -200 Z: -0.000017 +Vertex 8: X: -2600 Y: 300 Z: -0.000023 +Vertex 9: X: -2600 Y: -800 Z: -0.000009 +Vertex 10: X: -3000 Y: -800 Z: -0.000009 +Vertex 11: X: -3000 Y: 300 Z: -0.000023 +Vertex 12: X: -3000 Y: -900 Z: -0.000007 +Vertex 13: X: -2600 Y: -900 Z: -0.000007 +Vertex 14: X: -2600 Y: -1400 Z: -0.000001 +Vertex 15: X: -3000 Y: -1400 Z: -0.000001 +Vertex 16: X: -3000 Y: -1500 Z: 0.000001 +Vertex 17: X: -2600 Y: -1500 Z: 0.000001 +Vertex 18: X: -2600 Y: -2000 Z: 0.000007 +Vertex 19: X: -3000 Y: -2000 Z: 0.000007 +Vertex 20: X: -3000 Y: -2100 Z: 0.000009 +Vertex 21: X: -2600 Y: -2100 Z: 0.000009 +Vertex 22: X: -2600 Y: -2700 Z: 0.000017 +Vertex 23: X: -2000 Y: -2700 Z: 0.000017 +Vertex 24: X: -2000 Y: -3200 Z: 0.000023 +Vertex 25: X: -3000 Y: -3200 Z: 0.000023 +Face list: +Face 0: A:0 B:3 C:2 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 1: A:0 B:2 C:1 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 2: A:4 B:7 C:6 AB:1 BC:1 CA:0 +Smoothing: 17 + + Page 21 + + + +Face 3: A:5 B:4 C:6 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 4: A:8 B:11 C:10 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 5: A:9 B:8 C:10 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 6: A:12 B:15 C:14 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 7: A:12 B:14 C:13 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 8: A:16 B:19 C:18 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 9: A:16 B:18 C:17 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 10: A:25 B:24 C:23 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 11: A:25 B:23 C:22 AB:0 BC:1 CA:0 +Smoothing: 17 +Face 12: A:20 B:25 C:22 AB:1 BC:0 CA:0 +Smoothing: 17 +Face 13: A:20 B:22 C:21 AB:0 BC:1 CA:1 +Smoothing: 17 + +Named object: "laatta02" +Tri-mesh, Vertices: 4 Faces: 2 +Vertex list: +Vertex 0: X: -700 Y: -1500 Z: -0.000007 +Vertex 1: X: -200 Y: -1500 Z: -0.000007 +Vertex 2: X: -200 Y: -2600 Z: 0.000007 +Vertex 3: X: -700 Y: -2600 Z: 0.000007 +Face list: +Face 0: A:0 B:3 C:2 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 1: A:0 B:2 C:1 AB:0 BC:1 CA:1 +Smoothing: 17 + +Named object: "laatta03" +Tri-mesh, Vertices: 6 Faces: 4 +Vertex list: +Vertex 0: X: -100 Y: -2100 Z: -0.000007 +Vertex 1: X: 400 Y: -2100 Z: -0.000007 +Vertex 2: X: 400 Y: -2700 Z: 0.000001 +Vertex 3: X: 1000 Y: -2700 Z: 0.000001 +Vertex 4: X: 1000 Y: -3200 Z: 0.000007 +Vertex 5: X: -100 Y: -3200 Z: 0.000007 +Face list: +Face 0: A:5 B:4 C:3 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 1: A:5 B:3 C:2 AB:0 BC:1 CA:0 +Smoothing: 17 +Face 2: A:0 B:5 C:2 AB:1 BC:0 CA:0 +Smoothing: 17 +Face 3: A:0 B:2 C:1 AB:0 BC:1 CA:1 +Smoothing: 17 + +Named object: "l_talo" +Tri-mesh, Vertices: 14 Faces: 24 +Vertex list: +Vertex 0: X: 356.410522 Y: -2748.218994 Z: 657.764282 +Vertex 1: X: 956.410522 Y: -2748.218994 Z: 657.764282 +Vertex 2: X: 956.410522 Y: -3148.218994 Z: 657.764282 + + Page 22 + + + +Vertex 3: X: -43.589481 Y: -3148.218994 Z: 657.76416 +Vertex 4: X: -43.589466 Y: -2248.218994 Z: 657.764404 +Vertex 5: X: 56.410534 Y: -2148.218994 Z: 657.764404 +Vertex 6: X: 356.410522 Y: -2148.218994 Z: 657.764465 +Vertex 7: X: 356.410522 Y: -2748.218994 Z: 13.506806 +Vertex 8: X: 956.410522 Y: -2748.218994 Z: 13.50686 +Vertex 9: X: 956.410522 Y: -3148.218994 Z: 13.506768 +Vertex 10: X: -43.589489 Y: -3148.218994 Z: 13.506721 +Vertex 11: X: -43.589478 Y: -2248.218994 Z: 13.506904 +Vertex 12: X: 56.410526 Y: -2148.218994 Z: 13.506933 +Vertex 13: X: 356.410522 Y: -2148.218994 Z: 13.506959 +Face list: +Face 0: A:0 B:6 C:5 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 1: A:0 B:5 C:4 AB:0 BC:1 CA:0 +Smoothing: 17 +Face 2: A:0 B:4 C:3 AB:0 BC:1 CA:0 +Smoothing: 17 +Face 3: A:0 B:3 C:2 AB:0 BC:1 CA:0 +Smoothing: 17 +Face 4: A:1 B:0 C:2 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 5: A:0 B:1 C:8 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 6: A:0 B:8 C:7 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 7: A:1 B:2 C:9 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 8: A:1 B:9 C:8 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 9: A:2 B:3 C:10 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 10: A:2 B:10 C:9 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 11: A:3 B:4 C:11 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 12: A:3 B:11 C:10 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 13: A:4 B:5 C:12 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 14: A:4 B:12 C:11 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 15: A:5 B:6 C:13 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 16: A:5 B:13 C:12 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 17: A:6 B:0 C:7 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 18: A:6 B:7 C:13 AB:0 BC:1 CA:1 +Smoothing: 3, 12 +Face 19: A:12 B:13 C:7 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 20: A:11 B:12 C:7 AB:1 BC:0 CA:0 +Smoothing: 17 +Face 21: A:10 B:11 C:7 AB:1 BC:0 CA:0 +Smoothing: 17 +Face 22: A:9 B:10 C:7 AB:1 BC:0 CA:0 +Smoothing: 17 +Face 23: A:9 B:7 C:8 AB:0 BC:1 CA:1 +Smoothing: 17 + + + Page 23 + + + +Named object: "levyt" +Tri-mesh, Vertices: 60 Faces: 30 +Vertex list: +Vertex 0: X: 1100 Y: -2700 Z: 0.000001 +Vertex 1: X: 1550 Y: -2700 Z: 0.000001 +Vertex 2: X: 1550 Y: -3200 Z: 0.000008 +Vertex 3: X: 1100 Y: -3200 Z: 0.000008 +Vertex 4: X: 1100 Y: -2600 Z: -0 +Vertex 5: X: 1100 Y: -1800 Z: -0.000011 +Vertex 6: X: 1550 Y: -1800 Z: -0.000011 +Vertex 7: X: 1550 Y: -2600 Z: -0 +Vertex 8: X: 1100 Y: -1700 Z: -0.000012 +Vertex 9: X: 1100 Y: -1100 Z: -0.00002 +Vertex 10: X: 1550 Y: -1100 Z: -0.00002 +Vertex 11: X: 1550 Y: -1700 Z: -0.000012 +Vertex 12: X: 1650 Y: -3200 Z: 0.000008 +Vertex 13: X: 1650 Y: -2050 Z: -0.000008 +Vertex 14: X: 2100 Y: -2050 Z: -0.000008 +Vertex 15: X: 2100 Y: -3200 Z: 0.000008 +Vertex 16: X: 1650 Y: -1950 Z: -0.000009 +Vertex 17: X: 1650 Y: -1100 Z: -0.00002 +Vertex 18: X: 2100 Y: -1100 Z: -0.00002 +Vertex 19: X: 2100 Y: -1950 Z: -0.000009 +Vertex 20: X: 2200 Y: -850 Z: -0.000024 +Vertex 21: X: 2650 Y: -850 Z: -0.000024 +Vertex 22: X: 2650 Y: -1600 Z: -0.000014 +Vertex 23: X: 2200 Y: -1600 Z: -0.000014 +Vertex 24: X: 2200 Y: -1700 Z: -0.000012 +Vertex 25: X: 2650 Y: -1700 Z: -0.000012 +Vertex 26: X: 2650 Y: -2150 Z: -0.000006 +Vertex 27: X: 2200 Y: -2150 Z: -0.000006 +Vertex 28: X: 2200 Y: -2250 Z: -0.000005 +Vertex 29: X: 2650 Y: -2250 Z: -0.000005 +Vertex 30: X: 2650 Y: -3200 Z: 0.000008 +Vertex 31: X: 2200 Y: -3200 Z: 0.000008 +Vertex 32: X: 1650 Y: -1000 Z: -0.000022 +Vertex 33: X: 1650 Y: -500 Z: -0.000028 +Vertex 34: X: 2100 Y: -500 Z: -0.000028 +Vertex 35: X: 2100 Y: -1000 Z: -0.000022 +Vertex 36: X: 2200 Y: -750 Z: -0.000025 +Vertex 37: X: 2200 Y: -200 Z: -0.000032 +Vertex 38: X: 2650 Y: -200 Z: -0.000032 +Vertex 39: X: 2650 Y: -750 Z: -0.000025 +Vertex 40: X: 2750 Y: -1000 Z: -0.000022 +Vertex 41: X: 2750 Y: -350 Z: -0.00003 +Vertex 42: X: 3550 Y: -350 Z: -0.00003 +Vertex 43: X: 3550 Y: -1000 Z: -0.000022 +Vertex 44: X: 2750 Y: -2000 Z: -0.000008 +Vertex 45: X: 3550 Y: -2000 Z: -0.000008 +Vertex 46: X: 3550 Y: -2650 Z: 0 +Vertex 47: X: 2750 Y: -2650 Z: 0 +Vertex 48: X: 3650 Y: -500 Z: -0.000028 +Vertex 49: X: 4200 Y: -500 Z: -0.000028 +Vertex 50: X: 4200 Y: -1750 Z: -0.000012 +Vertex 51: X: 3650 Y: -1750 Z: -0.000012 +Vertex 52: X: 3650 Y: -1850 Z: -0.00001 +Vertex 53: X: 4200 Y: -1850 Z: -0.00001 +Vertex 54: X: 4200 Y: -2650 Z: 0 +Vertex 55: X: 3650 Y: -2650 Z: 0 +Vertex 56: X: 2750 Y: -2750 Z: 0.000002 +Vertex 57: X: 4200 Y: -2750 Z: 0.000002 + + Page 24 + + + +Vertex 58: X: 4200 Y: -3200 Z: 0.000008 +Vertex 59: X: 2750 Y: -3200 Z: 0.000008 +Face list: +Face 0: A:0 B:3 C:2 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 1: A:0 B:2 C:1 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 2: A:4 B:7 C:6 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 3: A:5 B:4 C:6 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 4: A:8 B:11 C:10 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 5: A:9 B:8 C:10 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 6: A:12 B:15 C:14 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 7: A:13 B:12 C:14 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 8: A:16 B:19 C:18 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 9: A:17 B:16 C:18 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 10: A:20 B:23 C:22 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 11: A:20 B:22 C:21 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 12: A:24 B:27 C:26 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 13: A:24 B:26 C:25 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 14: A:28 B:31 C:30 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 15: A:28 B:30 C:29 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 16: A:32 B:35 C:34 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 17: A:33 B:32 C:34 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 18: A:36 B:39 C:38 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 19: A:37 B:36 C:38 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 20: A:40 B:43 C:42 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 21: A:40 B:42 C:41 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 22: A:44 B:47 C:46 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 23: A:45 B:44 C:46 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 24: A:48 B:51 C:50 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 25: A:48 B:50 C:49 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 26: A:52 B:55 C:54 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 27: A:52 B:54 C:53 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 28: A:56 B:59 C:58 AB:1 BC:1 CA:0 +Smoothing: 17 + + Page 25 + + + +Face 29: A:57 B:56 C:58 AB:1 BC:0 CA:1 +Smoothing: 17 + +Named object: "Camera01" +Camera (50.000004mm) +Position: X:-2560.44873 Y:-4699.812012 Z:604.55249 +Target: X:-2557.298828 Y:-3967.84082 Z:120.180984 +Bank angle: 0 degrees + +Named object: "talot" +Tri-mesh, Vertices: 120 Faces: 180 +Vertex list: +Vertex 0: X: 1150 Y: -2750 Z: 0.000084 +Vertex 1: X: 1500 Y: -2750 Z: 0.00008 +Vertex 2: X: 1500 Y: -3150 Z: 0.00008 +Vertex 3: X: 1150 Y: -3150 Z: 0.000084 +Vertex 4: X: 1150 Y: -1850 Z: 0.000084 +Vertex 5: X: 1500 Y: -1850 Z: 0.00008 +Vertex 6: X: 1500 Y: -2550 Z: 0.00008 +Vertex 7: X: 1150 Y: -2550 Z: 0.000084 +Vertex 8: X: 1150 Y: -1150 Z: 0.000084 +Vertex 9: X: 1500 Y: -1150 Z: 0.00008 +Vertex 10: X: 1500 Y: -1650 Z: 0.00008 +Vertex 11: X: 1150 Y: -1650 Z: 0.000084 +Vertex 12: X: 1700 Y: -1150 Z: 0.000077 +Vertex 13: X: 2050 Y: -1150 Z: 0.000072 +Vertex 14: X: 2050 Y: -1900 Z: 0.000072 +Vertex 15: X: 1700 Y: -1900 Z: 0.000077 +Vertex 16: X: 1700 Y: -2100 Z: 0.000077 +Vertex 17: X: 2050 Y: -2100 Z: 0.000072 +Vertex 18: X: 2050 Y: -3150 Z: 0.000072 +Vertex 19: X: 1700 Y: -3150 Z: 0.000077 +Vertex 20: X: 1700 Y: -550 Z: 0.000077 +Vertex 21: X: 2050 Y: -550 Z: 0.000072 +Vertex 22: X: 2050 Y: -950 Z: 0.000072 +Vertex 23: X: 1700 Y: -950 Z: 0.000077 +Vertex 24: X: 2250 Y: -250.000015 Z: 0.00007 +Vertex 25: X: 2600 Y: -250.000031 Z: 0.000065 +Vertex 26: X: 2600 Y: -700 Z: 0.000065 +Vertex 27: X: 2250 Y: -700 Z: 0.00007 +Vertex 28: X: 2250 Y: -900 Z: 0.00007 +Vertex 29: X: 2600 Y: -900 Z: 0.000065 +Vertex 30: X: 2600 Y: -1550 Z: 0.000065 +Vertex 31: X: 2250 Y: -1550 Z: 0.00007 +Vertex 32: X: 2250 Y: -1750 Z: 0.00007 +Vertex 33: X: 2600 Y: -1750 Z: 0.000065 +Vertex 34: X: 2600 Y: -2100 Z: 0.000065 +Vertex 35: X: 2250 Y: -2100 Z: 0.00007 +Vertex 36: X: 2250 Y: -2300 Z: 0.00007 +Vertex 37: X: 2600 Y: -2300 Z: 0.000065 +Vertex 38: X: 2600 Y: -3150 Z: 0.000065 +Vertex 39: X: 2250 Y: -3150 Z: 0.00007 +Vertex 40: X: 2800 Y: -2800 Z: 0.000062 +Vertex 41: X: 4150 Y: -2800 Z: 0.000044 +Vertex 42: X: 4150 Y: -3150 Z: 0.000044 +Vertex 43: X: 2800 Y: -3150 Z: 0.000062 +Vertex 44: X: 2800 Y: -2050 Z: 0.000062 +Vertex 45: X: 3500 Y: -2050 Z: 0.000053 +Vertex 46: X: 3500 Y: -2600 Z: 0.000053 +Vertex 47: X: 2800 Y: -2600 Z: 0.000062 +Vertex 48: X: 3700 Y: -1900 Z: 0.00005 + + Page 26 + + + +Vertex 49: X: 4150 Y: -1900 Z: 0.000044 +Vertex 50: X: 4150 Y: -2600 Z: 0.000044 +Vertex 51: X: 3700 Y: -2600 Z: 0.00005 +Vertex 52: X: 3700 Y: -550.000061 Z: 0.00005 +Vertex 53: X: 4150 Y: -550.000061 Z: 0.000044 +Vertex 54: X: 4150 Y: -1700 Z: 0.000044 +Vertex 55: X: 3700 Y: -1700 Z: 0.00005 +Vertex 56: X: 2800 Y: -400.000031 Z: 0.000062 +Vertex 57: X: 3500 Y: -400.000031 Z: 0.000053 +Vertex 58: X: 3500 Y: -950.000061 Z: 0.000053 +Vertex 59: X: 2800 Y: -950 Z: 0.000062 +Vertex 60: X: 1150 Y: -2750 Z: 715.302979 +Vertex 61: X: 1500 Y: -2750 Z: 715.302979 +Vertex 62: X: 1500 Y: -3150 Z: 715.302917 +Vertex 63: X: 1150 Y: -3150 Z: 715.302917 +Vertex 64: X: 1150 Y: -1850 Z: 715.302917 +Vertex 65: X: 1500 Y: -1850 Z: 715.302917 +Vertex 66: X: 1500 Y: -2550 Z: 715.302917 +Vertex 67: X: 1150 Y: -2550 Z: 715.302979 +Vertex 68: X: 1150 Y: -1150 Z: 715.302979 +Vertex 69: X: 1500 Y: -1150 Z: 715.302917 +Vertex 70: X: 1500 Y: -1650 Z: 715.302917 +Vertex 71: X: 1150 Y: -1650 Z: 715.302917 +Vertex 72: X: 1700 Y: -1150 Z: 715.302917 +Vertex 73: X: 2050 Y: -1150 Z: 715.302917 +Vertex 74: X: 2050 Y: -1900 Z: 715.302917 +Vertex 75: X: 1700 Y: -1900 Z: 715.302917 +Vertex 76: X: 1700 Y: -2100 Z: 715.302917 +Vertex 77: X: 2050 Y: -2100 Z: 715.302917 +Vertex 78: X: 2050 Y: -3150 Z: 715.302917 +Vertex 79: X: 1700 Y: -3150 Z: 715.302917 +Vertex 80: X: 1700 Y: -550 Z: 715.302917 +Vertex 81: X: 2050 Y: -550 Z: 715.302917 +Vertex 82: X: 2050 Y: -950 Z: 715.302917 +Vertex 83: X: 1700 Y: -950 Z: 715.302917 +Vertex 84: X: 2250 Y: -250.000015 Z: 715.302979 +Vertex 85: X: 2600 Y: -250.000031 Z: 715.302979 +Vertex 86: X: 2600 Y: -700 Z: 715.302917 +Vertex 87: X: 2250 Y: -700 Z: 715.302917 +Vertex 88: X: 2250 Y: -900 Z: 715.302917 +Vertex 89: X: 2600 Y: -900 Z: 715.302917 +Vertex 90: X: 2600 Y: -1550 Z: 715.302979 +Vertex 91: X: 2250 Y: -1550 Z: 715.302979 +Vertex 92: X: 2250 Y: -1750 Z: 715.302917 +Vertex 93: X: 2600 Y: -1750 Z: 715.302979 +Vertex 94: X: 2600 Y: -2100 Z: 715.302917 +Vertex 95: X: 2250 Y: -2100 Z: 715.302917 +Vertex 96: X: 2250 Y: -2300 Z: 715.302917 +Vertex 97: X: 2600 Y: -2300 Z: 715.302917 +Vertex 98: X: 2600 Y: -3150 Z: 715.302979 +Vertex 99: X: 2250 Y: -3150 Z: 715.302917 +Vertex 100: X: 2800 Y: -2800 Z: 715.302917 +Vertex 101: X: 4150 Y: -2800 Z: 715.302917 +Vertex 102: X: 4150 Y: -3150 Z: 715.302856 +Vertex 103: X: 2800 Y: -3150 Z: 715.302979 +Vertex 104: X: 2800 Y: -2050 Z: 715.302917 +Vertex 105: X: 3500 Y: -2050 Z: 715.302917 +Vertex 106: X: 3500 Y: -2600 Z: 715.302917 +Vertex 107: X: 2800 Y: -2600 Z: 715.302917 +Vertex 108: X: 3700 Y: -1900 Z: 715.302917 +Vertex 109: X: 4150 Y: -1900 Z: 715.302856 + + Page 27 + + + +Vertex 110: X: 4150 Y: -2600 Z: 715.302917 +Vertex 111: X: 3700 Y: -2600 Z: 715.302917 +Vertex 112: X: 3700 Y: -550.000061 Z: 715.302917 +Vertex 113: X: 4150 Y: -550.000061 Z: 715.302856 +Vertex 114: X: 4150 Y: -1700 Z: 715.302856 +Vertex 115: X: 3700 Y: -1700 Z: 715.302856 +Vertex 116: X: 2800 Y: -400.000031 Z: 715.302979 +Vertex 117: X: 3500 Y: -400.000031 Z: 715.302917 +Vertex 118: X: 3500 Y: -950.000061 Z: 715.302917 +Vertex 119: X: 2800 Y: -950 Z: 715.302917 +Face list: +Face 0: A:2 B:3 C:0 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 1: A:1 B:2 C:0 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 2: A:6 B:7 C:4 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 3: A:5 B:6 C:4 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 4: A:10 B:11 C:8 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 5: A:9 B:10 C:8 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 6: A:14 B:15 C:12 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 7: A:13 B:14 C:12 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 8: A:18 B:19 C:16 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 9: A:17 B:18 C:16 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 10: A:22 B:23 C:20 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 11: A:21 B:22 C:20 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 12: A:26 B:27 C:24 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 13: A:25 B:26 C:24 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 14: A:30 B:31 C:28 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 15: A:29 B:30 C:28 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 16: A:34 B:35 C:32 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 17: A:33 B:34 C:32 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 18: A:38 B:39 C:36 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 19: A:37 B:38 C:36 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 20: A:42 B:43 C:40 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 21: A:42 B:40 C:41 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 22: A:46 B:47 C:44 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 23: A:46 B:44 C:45 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 24: A:50 B:51 C:48 AB:1 BC:1 CA:0 +Smoothing: 17 + + Page 28 + + + +Face 25: A:49 B:50 C:48 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 26: A:54 B:55 C:52 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 27: A:53 B:54 C:52 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 28: A:58 B:59 C:56 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 29: A:58 B:56 C:57 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 30: A:61 B:1 C:0 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 31: A:60 B:61 C:0 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 32: A:62 B:2 C:1 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 33: A:61 B:62 C:1 AB:1 BC:0 CA:1 +Smoothing: 2, 11 +Face 34: A:63 B:3 C:2 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 35: A:62 B:63 C:2 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 36: A:60 B:0 C:3 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 37: A:63 B:60 C:3 AB:1 BC:0 CA:1 +Smoothing: 3, 12 +Face 38: A:65 B:5 C:4 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 39: A:64 B:65 C:4 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 40: A:66 B:6 C:5 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 41: A:65 B:66 C:5 AB:1 BC:0 CA:1 +Smoothing: 2, 11 +Face 42: A:67 B:7 C:6 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 43: A:66 B:67 C:6 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 44: A:64 B:4 C:7 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 45: A:67 B:64 C:7 AB:1 BC:0 CA:1 +Smoothing: 3, 12 +Face 46: A:69 B:9 C:8 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 47: A:68 B:69 C:8 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 48: A:70 B:10 C:9 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 49: A:69 B:70 C:9 AB:1 BC:0 CA:1 +Smoothing: 2, 11 +Face 50: A:71 B:11 C:10 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 51: A:70 B:71 C:10 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 52: A:68 B:8 C:11 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 53: A:71 B:68 C:11 AB:1 BC:0 CA:1 +Smoothing: 3, 12 +Face 54: A:73 B:13 C:12 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 55: A:72 B:73 C:12 AB:1 BC:0 CA:1 + + Page 29 + + + +Smoothing: 1, 10 +Face 56: A:74 B:14 C:13 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 57: A:73 B:74 C:13 AB:1 BC:0 CA:1 +Smoothing: 2, 11 +Face 58: A:75 B:15 C:14 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 59: A:74 B:75 C:14 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 60: A:72 B:12 C:15 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 61: A:75 B:72 C:15 AB:1 BC:0 CA:1 +Smoothing: 3, 12 +Face 62: A:77 B:17 C:16 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 63: A:76 B:77 C:16 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 64: A:78 B:18 C:17 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 65: A:77 B:78 C:17 AB:1 BC:0 CA:1 +Smoothing: 2, 11 +Face 66: A:79 B:19 C:18 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 67: A:78 B:79 C:18 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 68: A:76 B:16 C:19 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 69: A:79 B:76 C:19 AB:1 BC:0 CA:1 +Smoothing: 3, 12 +Face 70: A:81 B:21 C:20 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 71: A:80 B:81 C:20 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 72: A:82 B:22 C:21 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 73: A:81 B:82 C:21 AB:1 BC:0 CA:1 +Smoothing: 2, 11 +Face 74: A:83 B:23 C:22 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 75: A:82 B:83 C:22 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 76: A:80 B:20 C:23 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 77: A:83 B:80 C:23 AB:1 BC:0 CA:1 +Smoothing: 3, 12 +Face 78: A:85 B:25 C:24 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 79: A:84 B:85 C:24 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 80: A:86 B:26 C:25 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 81: A:85 B:86 C:25 AB:1 BC:0 CA:1 +Smoothing: 2, 11 +Face 82: A:87 B:27 C:26 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 83: A:86 B:87 C:26 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 84: A:84 B:24 C:27 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 85: A:87 B:84 C:27 AB:1 BC:0 CA:1 +Smoothing: 3, 12 + + Page 30 + + + +Face 86: A:89 B:29 C:28 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 87: A:88 B:89 C:28 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 88: A:90 B:30 C:29 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 89: A:89 B:90 C:29 AB:1 BC:0 CA:1 +Smoothing: 2, 11 +Face 90: A:91 B:31 C:30 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 91: A:90 B:91 C:30 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 92: A:88 B:28 C:31 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 93: A:91 B:88 C:31 AB:1 BC:0 CA:1 +Smoothing: 3, 12 +Face 94: A:93 B:33 C:32 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 95: A:92 B:93 C:32 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 96: A:94 B:34 C:33 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 97: A:93 B:94 C:33 AB:1 BC:0 CA:1 +Smoothing: 2, 11 +Face 98: A:95 B:35 C:34 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 99: A:94 B:95 C:34 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 100: A:92 B:32 C:35 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 101: A:95 B:92 C:35 AB:1 BC:0 CA:1 +Smoothing: 3, 12 +Face 102: A:97 B:37 C:36 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 103: A:96 B:97 C:36 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 104: A:98 B:38 C:37 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 105: A:97 B:98 C:37 AB:1 BC:0 CA:1 +Smoothing: 2, 11 +Face 106: A:99 B:39 C:38 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 107: A:98 B:99 C:38 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 108: A:96 B:36 C:39 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 109: A:99 B:96 C:39 AB:1 BC:0 CA:1 +Smoothing: 3, 12 +Face 110: A:101 B:41 C:40 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 111: A:100 B:101 C:40 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 112: A:102 B:42 C:41 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 113: A:101 B:102 C:41 AB:1 BC:0 CA:1 +Smoothing: 2, 11 +Face 114: A:103 B:43 C:42 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 115: A:102 B:103 C:42 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 116: A:100 B:40 C:43 AB:1 BC:1 CA:0 + + Page 31 + + + +Smoothing: 3, 12 +Face 117: A:103 B:100 C:43 AB:1 BC:0 CA:1 +Smoothing: 3, 12 +Face 118: A:105 B:45 C:44 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 119: A:104 B:105 C:44 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 120: A:106 B:46 C:45 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 121: A:105 B:106 C:45 AB:1 BC:0 CA:1 +Smoothing: 2, 11 +Face 122: A:107 B:47 C:46 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 123: A:106 B:107 C:46 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 124: A:104 B:44 C:47 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 125: A:107 B:104 C:47 AB:1 BC:0 CA:1 +Smoothing: 3, 12 +Face 126: A:109 B:49 C:48 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 127: A:108 B:109 C:48 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 128: A:110 B:50 C:49 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 129: A:109 B:110 C:49 AB:1 BC:0 CA:1 +Smoothing: 2, 11 +Face 130: A:111 B:51 C:50 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 131: A:110 B:111 C:50 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 132: A:108 B:48 C:51 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 133: A:111 B:108 C:51 AB:1 BC:0 CA:1 +Smoothing: 3, 12 +Face 134: A:113 B:53 C:52 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 135: A:112 B:113 C:52 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 136: A:114 B:54 C:53 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 137: A:113 B:114 C:53 AB:1 BC:0 CA:1 +Smoothing: 2, 11 +Face 138: A:115 B:55 C:54 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 139: A:114 B:115 C:54 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 140: A:112 B:52 C:55 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 141: A:115 B:112 C:55 AB:1 BC:0 CA:1 +Smoothing: 3, 12 +Face 142: A:117 B:57 C:56 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 143: A:116 B:117 C:56 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 144: A:118 B:58 C:57 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 145: A:117 B:118 C:57 AB:1 BC:0 CA:1 +Smoothing: 2, 11 +Face 146: A:119 B:59 C:58 AB:1 BC:1 CA:0 +Smoothing: 1, 10 + + Page 32 + + + +Face 147: A:118 B:119 C:58 AB:1 BC:0 CA:1 +Smoothing: 1, 10 +Face 148: A:116 B:56 C:59 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 149: A:119 B:116 C:59 AB:1 BC:0 CA:1 +Smoothing: 3, 12 +Face 150: A:60 B:63 C:62 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 151: A:60 B:62 C:61 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 152: A:64 B:67 C:66 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 153: A:64 B:66 C:65 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 154: A:68 B:71 C:70 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 155: A:68 B:70 C:69 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 156: A:72 B:75 C:74 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 157: A:72 B:74 C:73 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 158: A:76 B:79 C:78 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 159: A:76 B:78 C:77 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 160: A:80 B:83 C:82 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 161: A:80 B:82 C:81 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 162: A:84 B:87 C:86 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 163: A:84 B:86 C:85 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 164: A:88 B:91 C:90 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 165: A:88 B:90 C:89 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 166: A:92 B:95 C:94 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 167: A:92 B:94 C:93 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 168: A:96 B:99 C:98 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 169: A:96 B:98 C:97 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 170: A:100 B:103 C:102 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 171: A:101 B:100 C:102 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 172: A:104 B:107 C:106 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 173: A:105 B:104 C:106 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 174: A:108 B:111 C:110 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 175: A:108 B:110 C:109 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 176: A:112 B:115 C:114 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 177: A:112 B:114 C:113 AB:0 BC:1 CA:1 + + Page 33 + + + +Smoothing: 17 +Face 178: A:116 B:119 C:118 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 179: A:117 B:116 C:118 AB:1 BC:0 CA:1 +Smoothing: 17 + +Named object: "talot2" +Tri-mesh, Vertices: 8 Faces: 12 +Vertex list: +Vertex 0: X: -1250 Y: -161.986755 Z: -0.000015 +Vertex 1: X: 950 Y: -161.986786 Z: 0.000015 +Vertex 2: X: 950 Y: 238.013214 Z: 0.000015 +Vertex 3: X: -1250 Y: 238.013245 Z: -0.000015 +Vertex 4: X: -1250 Y: -161.986725 Z: 852.595276 +Vertex 5: X: 950 Y: -161.986755 Z: 852.595276 +Vertex 6: X: 950 Y: 238.013245 Z: 852.595276 +Vertex 7: X: -1250 Y: 238.013275 Z: 852.595276 +Face list: +Face 0: A:0 B:3 C:2 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 1: A:1 B:0 C:2 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 2: A:0 B:1 C:5 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 3: A:0 B:5 C:4 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 4: A:1 B:2 C:6 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 5: A:1 B:6 C:5 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 6: A:2 B:3 C:7 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 7: A:2 B:7 C:6 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 8: A:3 B:0 C:4 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 9: A:3 B:4 C:7 AB:0 BC:1 CA:1 +Smoothing: 3, 12 +Face 10: A:6 B:7 C:4 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 11: A:6 B:4 C:5 AB:0 BC:1 CA:1 +Smoothing: 17 + +Named object: "levyt3" +Tri-mesh, Vertices: 28 Faces: 14 +Vertex list: +Vertex 0: X: -3000 Y: -3300 Z: -0.000012 +Vertex 1: X: -2600 Y: -3300 Z: -0.000012 +Vertex 2: X: -2600 Y: -4200 Z: 0 +Vertex 3: X: -3000 Y: -4200 Z: 0 +Vertex 4: X: -3000 Y: -4300 Z: 0.000002 +Vertex 5: X: -2600 Y: -4300 Z: 0.000002 +Vertex 6: X: -2600 Y: -5050 Z: 0.000012 +Vertex 7: X: -3000 Y: -5050 Z: 0.000012 +Vertex 8: X: -2500 Y: -3900 Z: -0.000004 +Vertex 9: X: -2000 Y: -3900 Z: -0.000004 +Vertex 10: X: -2000 Y: -5050 Z: 0.000012 +Vertex 11: X: -2500 Y: -5050 Z: 0.000012 +Vertex 12: X: -2500 Y: -3300 Z: -0.000012 +Vertex 13: X: -2000 Y: -3300 Z: -0.000012 +Vertex 14: X: -2000 Y: -3800 Z: -0.000005 + + Page 34 + + + +Vertex 15: X: -2500 Y: -3800 Z: -0.000005 +Vertex 16: X: -1900 Y: -3300 Z: -0.000012 +Vertex 17: X: -800 Y: -3300 Z: -0.000012 +Vertex 18: X: -800 Y: -3800 Z: -0.000005 +Vertex 19: X: -1900 Y: -3800 Z: -0.000005 +Vertex 20: X: -1900 Y: -3900 Z: -0.000004 +Vertex 21: X: -1400 Y: -3900 Z: -0.000004 +Vertex 22: X: -1400 Y: -4350 Z: 0.000002 +Vertex 23: X: -1900 Y: -4350 Z: 0.000002 +Vertex 24: X: -1900 Y: -4450 Z: 0.000004 +Vertex 25: X: -1400 Y: -4450 Z: 0.000004 +Vertex 26: X: -1400 Y: -5050 Z: 0.000012 +Vertex 27: X: -1900 Y: -5050 Z: 0.000012 +Face list: +Face 0: A:0 B:3 C:2 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 1: A:0 B:2 C:1 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 2: A:4 B:7 C:6 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 3: A:4 B:6 C:5 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 4: A:8 B:11 C:10 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 5: A:8 B:10 C:9 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 6: A:12 B:15 C:14 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 7: A:12 B:14 C:13 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 8: A:16 B:19 C:18 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 9: A:17 B:16 C:18 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 10: A:20 B:23 C:22 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 11: A:21 B:20 C:22 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 12: A:24 B:27 C:26 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 13: A:24 B:26 C:25 AB:0 BC:1 CA:1 +Smoothing: 17 + +Named object: "kulmatalot" +Tri-mesh, Vertices: 56 Faces: 84 +Vertex list: +Vertex 0: X: -2950 Y: -3350 Z: 677.499207 +Vertex 1: X: -2650 Y: -3350 Z: 677.499207 +Vertex 2: X: -2650 Y: -4150 Z: 677.499207 +Vertex 3: X: -2950 Y: -4150 Z: 677.499207 +Vertex 4: X: -2450 Y: -3350 Z: 677.499207 +Vertex 5: X: -2050 Y: -3350 Z: 677.499207 +Vertex 6: X: -2050 Y: -3750 Z: 677.499146 +Vertex 7: X: -2450 Y: -3750 Z: 677.499207 +Vertex 8: X: -2450 Y: -3950 Z: 677.499207 +Vertex 9: X: -2050 Y: -3950 Z: 677.499207 +Vertex 10: X: -2050 Y: -5000 Z: 677.499146 +Vertex 11: X: -2450 Y: -5000 Z: 677.499146 +Vertex 12: X: -2950 Y: -4350 Z: 677.499146 +Vertex 13: X: -2650 Y: -4350 Z: 677.499146 +Vertex 14: X: -2650 Y: -5000 Z: 677.499146 + + Page 35 + + + +Vertex 15: X: -2950 Y: -5000 Z: 677.499146 +Vertex 16: X: -1850 Y: -3950 Z: 677.499207 +Vertex 17: X: -1450 Y: -3950 Z: 677.499207 +Vertex 18: X: -1449.999146 Y: -4300 Z: 677.499146 +Vertex 19: X: -1850 Y: -4300 Z: 677.499146 +Vertex 20: X: -1850 Y: -4500 Z: 677.499207 +Vertex 21: X: -1449.999146 Y: -4500 Z: 677.499207 +Vertex 22: X: -1450.000122 Y: -5000 Z: 677.499146 +Vertex 23: X: -1850.000122 Y: -5000 Z: 677.499146 +Vertex 24: X: -1850 Y: -3350 Z: 677.499207 +Vertex 25: X: -850 Y: -3350 Z: 677.499207 +Vertex 26: X: -850 Y: -3750 Z: 677.499207 +Vertex 27: X: -1850 Y: -3750 Z: 677.499146 +Vertex 28: X: -2950 Y: -3350 Z: 5.119845 +Vertex 29: X: -2650 Y: -3350 Z: 5.119841 +Vertex 30: X: -2650 Y: -4150 Z: 5.119793 +Vertex 31: X: -2950 Y: -4150 Z: 5.119797 +Vertex 32: X: -2450 Y: -3350 Z: 5.119838 +Vertex 33: X: -2050 Y: -3350 Z: 5.119833 +Vertex 34: X: -2050 Y: -3750 Z: 5.119809 +Vertex 35: X: -2450 Y: -3750 Z: 5.119814 +Vertex 36: X: -2450 Y: -3950 Z: 5.119802 +Vertex 37: X: -2050 Y: -3950 Z: 5.119797 +Vertex 38: X: -2050 Y: -5000 Z: 5.119734 +Vertex 39: X: -2450 Y: -5000 Z: 5.11974 +Vertex 40: X: -2950 Y: -4350 Z: 5.119785 +Vertex 41: X: -2650 Y: -4350 Z: 5.119781 +Vertex 42: X: -2650 Y: -5000 Z: 5.119742 +Vertex 43: X: -2950 Y: -5000 Z: 5.119746 +Vertex 44: X: -1850 Y: -3950 Z: 5.119794 +Vertex 45: X: -1450 Y: -3950 Z: 5.119789 +Vertex 46: X: -1450 Y: -4300 Z: 5.119768 +Vertex 47: X: -1850 Y: -4300 Z: 5.119773 +Vertex 48: X: -1850 Y: -4500 Z: 5.119761 +Vertex 49: X: -1450 Y: -4500 Z: 5.119756 +Vertex 50: X: -1450.000122 Y: -5000 Z: 5.119726 +Vertex 51: X: -1850.000122 Y: -5000 Z: 5.119731 +Vertex 52: X: -1850 Y: -3350 Z: 5.11983 +Vertex 53: X: -850 Y: -3350 Z: 5.119817 +Vertex 54: X: -850 Y: -3750 Z: 5.119793 +Vertex 55: X: -1850 Y: -3750 Z: 5.119806 +Face list: +Face 0: A:0 B:3 C:2 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 1: A:0 B:2 C:1 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 2: A:4 B:7 C:6 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 3: A:4 B:6 C:5 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 4: A:8 B:11 C:10 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 5: A:8 B:10 C:9 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 6: A:12 B:15 C:14 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 7: A:12 B:14 C:13 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 8: A:16 B:19 C:18 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 9: A:17 B:16 C:18 AB:1 BC:0 CA:1 + + Page 36 + + + +Smoothing: 17 +Face 10: A:20 B:23 C:22 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 11: A:20 B:22 C:21 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 12: A:24 B:27 C:26 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 13: A:25 B:24 C:26 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 14: A:0 B:1 C:29 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 15: A:0 B:29 C:28 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 16: A:1 B:2 C:30 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 17: A:1 B:30 C:29 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 18: A:2 B:3 C:31 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 19: A:2 B:31 C:30 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 20: A:3 B:0 C:28 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 21: A:3 B:28 C:31 AB:0 BC:1 CA:1 +Smoothing: 3, 12 +Face 22: A:4 B:5 C:33 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 23: A:4 B:33 C:32 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 24: A:5 B:6 C:34 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 25: A:5 B:34 C:33 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 26: A:6 B:7 C:35 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 27: A:6 B:35 C:34 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 28: A:7 B:4 C:32 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 29: A:7 B:32 C:35 AB:0 BC:1 CA:1 +Smoothing: 3, 12 +Face 30: A:8 B:9 C:37 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 31: A:8 B:37 C:36 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 32: A:9 B:10 C:38 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 33: A:9 B:38 C:37 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 34: A:10 B:11 C:39 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 35: A:10 B:39 C:38 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 36: A:11 B:8 C:36 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 37: A:11 B:36 C:39 AB:0 BC:1 CA:1 +Smoothing: 3, 12 +Face 38: A:12 B:13 C:41 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 39: A:12 B:41 C:40 AB:0 BC:1 CA:1 +Smoothing: 1, 10 + + Page 37 + + + +Face 40: A:13 B:14 C:42 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 41: A:13 B:42 C:41 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 42: A:14 B:15 C:43 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 43: A:14 B:43 C:42 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 44: A:15 B:12 C:40 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 45: A:15 B:40 C:43 AB:0 BC:1 CA:1 +Smoothing: 3, 12 +Face 46: A:16 B:17 C:45 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 47: A:16 B:45 C:44 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 48: A:17 B:18 C:46 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 49: A:17 B:46 C:45 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 50: A:18 B:19 C:47 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 51: A:18 B:47 C:46 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 52: A:19 B:16 C:44 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 53: A:19 B:44 C:47 AB:0 BC:1 CA:1 +Smoothing: 3, 12 +Face 54: A:20 B:21 C:49 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 55: A:20 B:49 C:48 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 56: A:21 B:22 C:50 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 57: A:21 B:50 C:49 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 58: A:22 B:23 C:51 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 59: A:22 B:51 C:50 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 60: A:23 B:20 C:48 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 61: A:23 B:48 C:51 AB:0 BC:1 CA:1 +Smoothing: 3, 12 +Face 62: A:24 B:25 C:53 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 63: A:24 B:53 C:52 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 64: A:25 B:26 C:54 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 65: A:25 B:54 C:53 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 66: A:26 B:27 C:55 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 67: A:26 B:55 C:54 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 68: A:27 B:24 C:52 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 69: A:27 B:52 C:55 AB:0 BC:1 CA:1 +Smoothing: 3, 12 +Face 70: A:30 B:31 C:28 AB:1 BC:1 CA:0 + + Page 38 + + + +Smoothing: 17 +Face 71: A:29 B:30 C:28 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 72: A:34 B:35 C:32 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 73: A:33 B:34 C:32 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 74: A:38 B:39 C:36 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 75: A:37 B:38 C:36 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 76: A:42 B:43 C:40 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 77: A:41 B:42 C:40 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 78: A:46 B:47 C:44 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 79: A:46 B:44 C:45 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 80: A:50 B:51 C:48 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 81: A:49 B:50 C:48 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 82: A:54 B:55 C:52 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 83: A:54 B:52 C:53 AB:0 BC:1 CA:1 +Smoothing: 17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page 39 + + + diff --git a/3DS/CITYBBK.3DS b/3DS/CITYBBK.3DS new file mode 100644 index 0000000..cb71e48 Binary files /dev/null and b/3DS/CITYBBK.3DS differ diff --git a/3DS/CITYREL3.PRJ b/3DS/CITYREL3.PRJ new file mode 100644 index 0000000..f7b55d7 Binary files /dev/null and b/3DS/CITYREL3.PRJ differ diff --git a/3DS/I_SHP_3.3DS b/3DS/I_SHP_3.3DS new file mode 100644 index 0000000..fc51be1 Binary files /dev/null and b/3DS/I_SHP_3.3DS differ diff --git a/3DS/MIKKO.VUE b/3DS/MIKKO.VUE new file mode 100644 index 0000000..88e1695 --- /dev/null +++ b/3DS/MIKKO.VUE @@ -0,0 +1,279 @@ + +frame 0 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera 992.2941 -2008.3781 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 1 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera 1251.9691 -1843.2548 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 2 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera 1432.126 -1663.0979 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 3 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera 1648.3141 -1266.7529 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 4 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera 1810.4552 -906.4392 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 5 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera 1954.5806 -528.1099 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 6 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera 1972.5963 -167.7963 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 7 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera 1900.5336 300.6115 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 8 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera 1738.3925 606.8781 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 9 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera 1612.2827 787.0349 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 10 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera 1450.1416 1021.2388 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 11 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera 1125.8594 1165.3643 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 12 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera 531.3419 1327.5054 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 13 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera 153.0126 1111.3171 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 14 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera -207.3011 1003.2231 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 15 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera -495.5519 823.0662 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 16 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera -717.7454 799.0453 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 17 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera -963.9597 769.0192 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 18 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera -1396.3361 552.8311 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 19 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera -1882.7595 84.4233 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 20 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera -2026.885 -492.0785 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 21 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera -1918.791 -1122.6273 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 22 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera -1612.5244 -1609.0508 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 23 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera -1108.0853 -2005.3958 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 24 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera -837.8501 -2131.5056 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 25 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera -351.4268 -2185.5527 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 26 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera -207.1788 -2185.5527 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 27 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera 79.581 -2313.1538 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 28 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera 474.3122 -2254.6331 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 29 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera 676.9583 -2175.115 -449.8637 0 -2.6717 -2.6534 0.75 192 + +frame 30 +transform "Object" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object01" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object02" 1 0 0 0 1 0 0 0 1 0 0 0 +transform "Object03" 1 0 0 0 1 0 0 0 1 0 0 0 +spotlight "Light03" 351.3406 -1814.2559 0 123.9621 -237.3054 63.4363 0.5529 0.5529 0.5529 3 7.5 +spotlight "Light01" -909.4925 1005.9252 0 -335.7399 -182.0046 0 0.7333 0.7333 0.7333 1 9.25 +camera 855.6239 -2116.4724 -449.8637 0 -2.6717 -2.6534 0.75 192 diff --git a/3DS/PASKA2.3DS b/3DS/PASKA2.3DS new file mode 100644 index 0000000..a795f99 Binary files /dev/null and b/3DS/PASKA2.3DS differ diff --git a/3DS/PEILI.PRJ b/3DS/PEILI.PRJ new file mode 100644 index 0000000..755f9f2 Binary files /dev/null and b/3DS/PEILI.PRJ differ diff --git a/3DS/PEILI2.PRJ b/3DS/PEILI2.PRJ new file mode 100644 index 0000000..9a032eb Binary files /dev/null and b/3DS/PEILI2.PRJ differ diff --git a/3DS/PXLSHIP.3DS b/3DS/PXLSHIP.3DS new file mode 100644 index 0000000..23f953f Binary files /dev/null and b/3DS/PXLSHIP.3DS differ diff --git a/3DS/PXLSHIP2.3DS b/3DS/PXLSHIP2.3DS new file mode 100644 index 0000000..29940e5 Binary files /dev/null and b/3DS/PXLSHIP2.3DS differ diff --git a/3DS/PXLSHIP3.3DS b/3DS/PXLSHIP3.3DS new file mode 100644 index 0000000..351ff9e Binary files /dev/null and b/3DS/PXLSHIP3.3DS differ diff --git a/3DS/U2CITY10.PRJ b/3DS/U2CITY10.PRJ new file mode 100644 index 0000000..06b6457 Binary files /dev/null and b/3DS/U2CITY10.PRJ differ diff --git a/3DS/U2CITY11.PRJ b/3DS/U2CITY11.PRJ new file mode 100644 index 0000000..067efa5 Binary files /dev/null and b/3DS/U2CITY11.PRJ differ diff --git a/3DS/U2CITY2.PRJ b/3DS/U2CITY2.PRJ new file mode 100644 index 0000000..99e114a Binary files /dev/null and b/3DS/U2CITY2.PRJ differ diff --git a/3DS/U2CITY3.PRJ b/3DS/U2CITY3.PRJ new file mode 100644 index 0000000..c21dd59 Binary files /dev/null and b/3DS/U2CITY3.PRJ differ diff --git a/3DS/U2CITY4.PRJ b/3DS/U2CITY4.PRJ new file mode 100644 index 0000000..3a134c0 Binary files /dev/null and b/3DS/U2CITY4.PRJ differ diff --git a/3DS/U2CITY5.PRJ b/3DS/U2CITY5.PRJ new file mode 100644 index 0000000..df4f732 Binary files /dev/null and b/3DS/U2CITY5.PRJ differ diff --git a/3DS/U2CITY6.PRJ b/3DS/U2CITY6.PRJ new file mode 100644 index 0000000..ed7fc77 Binary files /dev/null and b/3DS/U2CITY6.PRJ differ diff --git a/3DS/U2CITY7.PRJ b/3DS/U2CITY7.PRJ new file mode 100644 index 0000000..5e5808c Binary files /dev/null and b/3DS/U2CITY7.PRJ differ diff --git a/3DS/U2CITY8.PRJ b/3DS/U2CITY8.PRJ new file mode 100644 index 0000000..2cf5e10 Binary files /dev/null and b/3DS/U2CITY8.PRJ differ diff --git a/3DS/U2CITY9.PRJ b/3DS/U2CITY9.PRJ new file mode 100644 index 0000000..fee7154 Binary files /dev/null and b/3DS/U2CITY9.PRJ differ diff --git a/3DS/U2E.PRJ b/3DS/U2E.PRJ new file mode 100644 index 0000000..2ad8cf5 Binary files /dev/null and b/3DS/U2E.PRJ differ diff --git a/3DS/UUSALKU.3DS b/3DS/UUSALKU.3DS new file mode 100644 index 0000000..acd1835 Binary files /dev/null and b/3DS/UUSALKU.3DS differ diff --git a/3DS/UUSALKU.ASC b/3DS/UUSALKU.ASC new file mode 100644 index 0000000..6796fbb --- /dev/null +++ b/3DS/UUSALKU.ASC @@ -0,0 +1,1254 @@ +Ambient light color: Red=0.3 Green=0.3 Blue=0.3 + +Named object: "Light01" +Direct light +Position: X:426.159027 Y:1339.46167 Z:-934.576965 +Light color: Red=1 Green=1 Blue=1 + +Named object: "Camera01" +Camera (50.000004mm) +Position: X:-22.035801 Y:681.26532 Z:-50.255699 +Target: X:-22.03578 Y:-37.885574 Z:-51.699242 +Bank angle: 0 degrees + +Named object: "s01" +Tri-mesh, Vertices: 152 Faces: 272 +Vertex list: +Vertex 0: X: 7.463437 Y: 678.775696 Z: -67.417412 +Vertex 1: X: 8.565907 Y: 678.775696 Z: -65.688408 +Vertex 2: X: 9.28839 Y: 678.775696 Z: -63.103039 +Vertex 3: X: 9.265868 Y: 678.775696 Z: -60.524212 +Vertex 4: X: 8.49833 Y: 678.775696 Z: -57.951851 +Vertex 5: X: 7.365823 Y: 678.775696 Z: -56.242363 +Vertex 6: X: 8.148356 Y: 678.775696 Z: -60.53397 +Vertex 7: X: 8.17088 Y: 678.775696 Z: -63.112797 +Vertex 8: X: 9.570867 Y: 687.953552 Z: -68.795952 +Vertex 9: X: 11.647474 Y: 687.953552 Z: -66.628609 +Vertex 10: X: 13.016235 Y: 687.953552 Z: -63.392849 +Vertex 11: X: 12.988079 Y: 687.953552 Z: -60.169327 +Vertex 12: X: 11.563002 Y: 687.953552 Z: -56.957966 +Vertex 13: X: 9.448853 Y: 687.953552 Z: -54.827225 +Vertex 14: X: 10.892698 Y: 687.953552 Z: -60.18763 +Vertex 15: X: 10.920856 Y: 687.953552 Z: -63.411144 +Vertex 16: X: 13.083494 Y: 703.250061 Z: -71.093651 +Vertex 17: X: 15.293505 Y: 703.250061 Z: -68.20871 +Vertex 18: X: 16.745956 Y: 703.250061 Z: -63.897587 +Vertex 19: X: 16.708414 Y: 703.250061 Z: -59.599514 +Vertex 20: X: 15.180874 Y: 703.250061 Z: -55.314411 +Vertex 21: X: 12.920807 Y: 703.250061 Z: -52.468525 +Vertex 22: X: 14.473391 Y: 703.250061 Z: -59.619034 +Vertex 23: X: 14.510933 Y: 703.250061 Z: -63.91711 +Vertex 24: X: 13.083492 Y: 713.993713 Z: -71.093651 +Vertex 25: X: 15.293484 Y: 713.993713 Z: -68.20871 +Vertex 26: X: 16.745951 Y: 713.993713 Z: -63.897587 +Vertex 27: X: 16.70841 Y: 713.993713 Z: -59.599514 +Vertex 28: X: 15.180855 Y: 713.993713 Z: -55.314411 +Vertex 29: X: 12.920801 Y: 713.993713 Z: -52.468525 +Vertex 30: X: 14.473385 Y: 713.993774 Z: -59.619038 +Vertex 31: X: 14.510931 Y: 713.993774 Z: -63.917103 +Vertex 32: X: 9.581037 Y: 723.306702 Z: -69.960052 +Vertex 33: X: 11.654514 Y: 723.306702 Z: -67.434525 +Vertex 34: X: 13.018585 Y: 723.306702 Z: -63.661488 +Vertex 35: X: 12.985735 Y: 723.306702 Z: -59.900692 +Vertex 36: X: 11.555965 Y: 723.306702 Z: -56.152054 +Vertex 37: X: 9.438688 Y: 723.306702 Z: -53.663128 +Vertex 38: X: 10.890358 Y: 723.306702 Z: -59.918991 +Vertex 39: X: 10.923206 Y: 723.306702 Z: -63.67979 +Vertex 40: X: 7.479678 Y: 728.89447 Z: -69.279938 +Vertex 41: X: 8.577168 Y: 728.89447 Z: -66.977844 +Vertex 42: X: 9.29213 Y: 728.89447 Z: -63.532848 +Vertex 43: X: 9.262094 Y: 728.89447 Z: -60.094398 +Vertex 44: X: 8.487063 Y: 728.89447 Z: -56.662415 + + Page 1 + + + +Vertex 45: X: 7.349531 Y: 728.89447 Z: -54.379845 +Vertex 46: X: 8.144586 Y: 728.89447 Z: -60.104156 +Vertex 47: X: 8.174633 Y: 728.89447 Z: -63.542606 +Vertex 48: X: -0.713692 Y: 721.925232 Z: -63.378056 +Vertex 49: X: -2.98024 Y: 721.925232 Z: -64.374649 +Vertex 50: X: -7.530461 Y: 721.925232 Z: -64.414398 +Vertex 51: X: -9.814097 Y: 721.925232 Z: -63.457546 +Vertex 52: X: -9.831157 Y: 721.925232 Z: -61.504093 +Vertex 53: X: -7.564583 Y: 721.925232 Z: -60.507545 +Vertex 54: X: -3.014375 Y: 721.925232 Z: -60.4678 +Vertex 55: X: -0.730755 Y: 721.925232 Z: -61.424603 +Vertex 56: X: 5.361779 Y: 716.919373 Z: -64.301781 +Vertex 57: X: 0.070282 Y: 716.919373 Z: -66.301598 +Vertex 58: X: -10.546866 Y: 716.919373 Z: -66.394341 +Vertex 59: X: -15.8725 Y: 716.919373 Z: -64.487251 +Vertex 60: X: -15.906628 Y: 716.919373 Z: -60.580414 +Vertex 61: X: -10.615115 Y: 716.919373 Z: -58.580593 +Vertex 62: X: 0.00202 Y: 716.919373 Z: -58.487854 +Vertex 63: X: 5.32766 Y: 716.919373 Z: -60.394932 +Vertex 64: X: 5.361779 Y: 709.410583 Z: -64.301781 +Vertex 65: X: 0.070282 Y: 709.410583 Z: -66.301598 +Vertex 66: X: -10.546866 Y: 709.410583 Z: -66.394341 +Vertex 67: X: -15.8725 Y: 709.410583 Z: -64.487251 +Vertex 68: X: -15.906628 Y: 709.410583 Z: -60.580414 +Vertex 69: X: -10.615115 Y: 709.410583 Z: -58.580593 +Vertex 70: X: 0.00202 Y: 709.410583 Z: -58.487854 +Vertex 71: X: 5.32766 Y: 709.410583 Z: -60.394932 +Vertex 72: X: 0.803575 Y: 691.890015 Z: -63.425312 +Vertex 73: X: -2.221894 Y: 691.890015 Z: -64.368027 +Vertex 74: X: -8.288828 Y: 691.890015 Z: -64.421021 +Vertex 75: X: -11.330331 Y: 691.890015 Z: -63.527775 +Vertex 76: X: -11.330331 Y: 691.890015 Z: -63.527775 +Vertex 77: X: -8.305893 Y: 691.890015 Z: -62.467579 +Vertex 78: X: -2.238957 Y: 691.890015 Z: -62.414577 +Vertex 79: X: 0.803575 Y: 691.890015 Z: -63.425312 +Vertex 80: X: -17.988045 Y: 678.775696 Z: -67.643585 +Vertex 81: X: -19.120571 Y: 678.775696 Z: -65.934105 +Vertex 82: X: -19.888107 Y: 678.775696 Z: -63.361752 +Vertex 83: X: -19.910633 Y: 678.775696 Z: -60.782917 +Vertex 84: X: -19.188141 Y: 678.775696 Z: -58.19754 +Vertex 85: X: -18.085651 Y: 678.775696 Z: -56.468529 +Vertex 86: X: -18.793119 Y: 678.775696 Z: -60.773159 +Vertex 87: X: -18.770594 Y: 678.775696 Z: -63.351978 +Vertex 88: X: -20.0711 Y: 687.953552 Z: -69.058723 +Vertex 89: X: -22.185238 Y: 687.953552 Z: -66.927986 +Vertex 90: X: -23.610315 Y: 687.953552 Z: -63.716625 +Vertex 91: X: -23.638475 Y: 687.953552 Z: -60.493114 +Vertex 92: X: -22.269714 Y: 687.953552 Z: -57.257351 +Vertex 93: X: -20.193115 Y: 687.953552 Z: -55.09 +Vertex 94: X: -21.5431 Y: 687.953552 Z: -60.474812 +Vertex 95: X: -21.514944 Y: 687.953552 Z: -63.698322 +Vertex 96: X: -23.543058 Y: 703.250061 Z: -71.417427 +Vertex 97: X: -25.803112 Y: 703.250061 Z: -68.571548 +Vertex 98: X: -27.330666 Y: 703.250061 Z: -64.28643 +Vertex 99: X: -27.368208 Y: 703.250061 Z: -59.98838 +Vertex 100: X: -25.915743 Y: 703.250061 Z: -55.677242 +Vertex 101: X: -23.705746 Y: 703.250061 Z: -52.792313 +Vertex 102: X: -25.133194 Y: 703.250061 Z: -59.968842 +Vertex 103: X: -25.095648 Y: 703.250061 Z: -64.266914 +Vertex 104: X: -23.543051 Y: 713.993713 Z: -71.417427 +Vertex 105: X: -25.803101 Y: 713.993713 Z: -68.571541 + + Page 2 + + + +Vertex 106: X: -27.330666 Y: 713.993713 Z: -64.28643 +Vertex 107: X: -27.368208 Y: 713.993713 Z: -59.98838 +Vertex 108: X: -25.915728 Y: 713.993713 Z: -55.677246 +Vertex 109: X: -23.705738 Y: 713.993713 Z: -52.792309 +Vertex 110: X: -25.133194 Y: 713.993713 Z: -59.968842 +Vertex 111: X: -25.095648 Y: 713.993713 Z: -64.266914 +Vertex 112: X: -20.06094 Y: 723.306702 Z: -70.222824 +Vertex 113: X: -22.1782 Y: 723.306702 Z: -67.733902 +Vertex 114: X: -23.607969 Y: 723.306702 Z: -63.985256 +Vertex 115: X: -23.64082 Y: 723.306702 Z: -60.224476 +Vertex 116: X: -22.276751 Y: 723.306702 Z: -56.451439 +Vertex 117: X: -20.203295 Y: 723.306702 Z: -53.925907 +Vertex 118: X: -21.545441 Y: 723.306702 Z: -60.206177 +Vertex 119: X: -21.512594 Y: 723.306702 Z: -63.966953 +Vertex 120: X: -17.971785 Y: 728.89447 Z: -69.506111 +Vertex 121: X: -19.109299 Y: 728.89447 Z: -67.223541 +Vertex 122: X: -19.884327 Y: 728.89447 Z: -63.791553 +Vertex 123: X: -19.914387 Y: 728.89447 Z: -60.353104 +Vertex 124: X: -19.199423 Y: 728.89447 Z: -56.908104 +Vertex 125: X: -18.101927 Y: 728.89447 Z: -54.606018 +Vertex 126: X: -18.796879 Y: 728.89447 Z: -60.343346 +Vertex 127: X: -18.766836 Y: 728.89447 Z: -63.781788 +Vertex 128: X: 5.399096 Y: 710.348816 Z: -62.561451 +Vertex 129: X: 5.403685 Y: 711.402405 Z: -63.088223 +Vertex 130: X: 5.408298 Y: 716.143555 Z: -63.614994 +Vertex 131: X: 5.399096 Y: 716.670349 Z: -62.561451 +Vertex 132: X: 5.394481 Y: 716.143494 Z: -62.034672 +Vertex 133: X: 5.394481 Y: 711.402405 Z: -62.034672 +Vertex 134: X: 14.030273 Y: 708.768433 Z: -61.43243 +Vertex 135: X: 14.039494 Y: 710.085388 Z: -62.485973 +Vertex 136: X: 14.04866 Y: 716.011841 Z: -63.539516 +Vertex 137: X: 14.030256 Y: 716.670349 Z: -61.43243 +Vertex 138: X: 14.021069 Y: 716.01178 Z: -60.378937 +Vertex 139: X: 14.02107 Y: 710.085388 Z: -60.378929 +Vertex 140: X: -15.899374 Y: 710.348816 Z: -62.747478 +Vertex 141: X: -15.894765 Y: 711.402405 Z: -63.27425 +Vertex 142: X: -15.890169 Y: 716.143494 Z: -63.801029 +Vertex 143: X: -15.89937 Y: 716.670349 Z: -62.747478 +Vertex 144: X: -15.903975 Y: 716.143494 Z: -62.220707 +Vertex 145: X: -15.90397 Y: 711.402405 Z: -62.220707 +Vertex 146: X: -24.548979 Y: 708.768433 Z: -61.769398 +Vertex 147: X: -24.539776 Y: 710.085388 Z: -62.822948 +Vertex 148: X: -24.530554 Y: 716.01178 Z: -63.876499 +Vertex 149: X: -24.54896 Y: 716.670349 Z: -61.769413 +Vertex 150: X: -24.558163 Y: 716.01178 Z: -60.715919 +Vertex 151: X: -24.558178 Y: 710.085388 Z: -60.715923 +Face list: +Face 0: A:4 B:5 C:6 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 1: A:7 B:0 C:1 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 2: A:7 B:1 C:2 AB:0 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 3: A:3 B:4 C:6 AB:1 BC:0 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 4: A:2 B:3 C:6 AB:1 BC:0 CA:0 +Material:"LIGHT_BLUE" + + Page 3 + + + +Smoothing: 17 +Face 5: A:7 B:2 C:6 AB:0 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 6: A:9 B:1 C:0 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 7: A:8 B:9 C:0 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 8: A:10 B:2 C:1 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 9: A:9 B:10 C:1 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 10: A:11 B:3 C:2 AB:1 BC:1 CA:0 +Material:"BLACK" +Smoothing: 1, 10 +Face 11: A:10 B:11 C:2 AB:1 BC:0 CA:1 +Material:"BLACK" +Smoothing: 1, 10 +Face 12: A:12 B:4 C:3 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 13: A:11 B:12 C:3 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 14: A:13 B:5 C:4 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 15: A:12 B:13 C:4 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 16: A:14 B:6 C:5 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 17: A:13 B:14 C:5 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 18: A:15 B:7 C:6 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 19: A:14 B:15 C:6 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 20: A:8 B:0 C:7 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 3, 12 +Face 21: A:15 B:8 C:7 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 3, 12 +Face 22: A:17 B:9 C:8 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 23: A:16 B:17 C:8 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 24: A:18 B:10 C:9 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 + + Page 4 + + + +Face 25: A:17 B:18 C:9 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 26: A:19 B:11 C:10 AB:1 BC:1 CA:0 +Material:"BLACK" +Smoothing: 4, 10 +Face 27: A:18 B:19 C:10 AB:1 BC:0 CA:1 +Material:"BLACK" +Smoothing: 4, 10 +Face 28: A:20 B:12 C:11 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 29: A:19 B:20 C:11 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 30: A:21 B:13 C:12 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 31: A:20 B:21 C:12 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 32: A:22 B:14 C:13 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 33: A:21 B:22 C:13 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 34: A:23 B:15 C:14 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 35: A:22 B:23 C:14 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 36: A:16 B:8 C:15 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 6, 12 +Face 37: A:23 B:16 C:15 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 6, 12 +Face 38: A:25 B:17 C:16 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 39: A:24 B:25 C:16 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 40: A:26 B:18 C:17 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 41: A:25 B:26 C:17 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 42: A:27 B:19 C:18 AB:1 BC:1 CA:0 +Material:"BLACK" +Smoothing: 1, 10 +Face 43: A:26 B:27 C:18 AB:1 BC:0 CA:1 +Material:"BLACK" +Smoothing: 1, 10 +Face 44: A:28 B:20 C:19 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 45: A:27 B:28 C:19 AB:1 BC:0 CA:1 + + Page 5 + + + +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 46: A:29 B:21 C:20 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 47: A:28 B:29 C:20 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 48: A:30 B:22 C:21 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 49: A:29 B:30 C:21 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 50: A:31 B:23 C:22 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 51: A:30 B:31 C:22 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 52: A:24 B:16 C:23 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 3, 12 +Face 53: A:31 B:24 C:23 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 3, 12 +Face 54: A:33 B:25 C:24 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 55: A:32 B:33 C:24 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 56: A:34 B:26 C:25 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 57: A:33 B:34 C:25 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 58: A:35 B:27 C:26 AB:1 BC:1 CA:0 +Material:"BLACK" +Smoothing: 4, 10 +Face 59: A:34 B:35 C:26 AB:1 BC:0 CA:1 +Material:"BLACK" +Smoothing: 4, 10 +Face 60: A:36 B:28 C:27 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 61: A:35 B:36 C:27 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 62: A:37 B:29 C:28 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 63: A:36 B:37 C:28 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 64: A:38 B:30 C:29 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 65: A:37 B:38 C:29 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" + + Page 6 + + + +Smoothing: 5, 11 +Face 66: A:39 B:31 C:30 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 67: A:38 B:39 C:30 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 68: A:32 B:24 C:31 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 6, 12 +Face 69: A:39 B:32 C:31 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 6, 12 +Face 70: A:41 B:33 C:32 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 71: A:40 B:41 C:32 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 72: A:42 B:34 C:33 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 73: A:41 B:42 C:33 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 74: A:43 B:35 C:34 AB:1 BC:1 CA:0 +Material:"BLACK" +Smoothing: 1, 10 +Face 75: A:42 B:43 C:34 AB:1 BC:0 CA:1 +Material:"BLACK" +Smoothing: 1, 10 +Face 76: A:44 B:36 C:35 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 77: A:43 B:44 C:35 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 78: A:45 B:37 C:36 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 79: A:44 B:45 C:36 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 80: A:46 B:38 C:37 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 81: A:45 B:46 C:37 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 82: A:47 B:39 C:38 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 83: A:46 B:47 C:38 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 84: A:40 B:32 C:39 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 3, 12 +Face 85: A:47 B:40 C:39 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 3, 12 + + Page 7 + + + +Face 86: A:46 B:45 C:44 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 87: A:41 B:40 C:47 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 88: A:42 B:41 C:47 AB:1 BC:0 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 89: A:46 B:44 C:43 AB:0 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 90: A:46 B:43 C:42 AB:0 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 91: A:46 B:42 C:47 AB:0 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 92: A:54 B:55 C:48 AB:1 BC:1 CA:0 +Material:"ORANGE" +Smoothing: 17 +Face 93: A:54 B:48 C:49 AB:0 BC:1 CA:0 +Material:"ORANGE" +Smoothing: 17 +Face 94: A:53 B:54 C:49 AB:1 BC:0 CA:0 +Material:"ORANGE" +Smoothing: 17 +Face 95: A:53 B:49 C:50 AB:0 BC:1 CA:0 +Material:"ORANGE" +Smoothing: 17 +Face 96: A:52 B:53 C:50 AB:1 BC:0 CA:0 +Material:"ORANGE" +Smoothing: 17 +Face 97: A:52 B:50 C:51 AB:0 BC:1 CA:1 +Material:"ORANGE" +Smoothing: 17 +Face 98: A:57 B:49 C:48 AB:1 BC:1 CA:0 +Material:"GREY" +Smoothing: 1, 10 +Face 99: A:56 B:57 C:48 AB:1 BC:0 CA:1 +Material:"GREY" +Smoothing: 1, 10 +Face 100: A:58 B:50 C:49 AB:1 BC:1 CA:0 +Material:"GREY" +Smoothing: 2, 11 +Face 101: A:57 B:58 C:49 AB:1 BC:0 CA:1 +Material:"GREY" +Smoothing: 2, 11 +Face 102: A:59 B:51 C:50 AB:1 BC:1 CA:0 +Material:"GREY" +Smoothing: 1, 10 +Face 103: A:58 B:59 C:50 AB:1 BC:0 CA:1 +Material:"GREY" +Smoothing: 1, 10 +Face 104: A:60 B:52 C:51 AB:1 BC:1 CA:0 +Material:"GREY" +Smoothing: 2, 11 +Face 105: A:59 B:60 C:51 AB:1 BC:0 CA:1 +Material:"GREY" +Smoothing: 2, 11 +Face 106: A:61 B:53 C:52 AB:1 BC:1 CA:0 + + Page 8 + + + +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 107: A:60 B:61 C:52 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 108: A:62 B:54 C:53 AB:1 BC:1 CA:0 +Material:"GREY" +Smoothing: 2, 11 +Face 109: A:61 B:62 C:53 AB:1 BC:0 CA:1 +Material:"GREY" +Smoothing: 2, 11 +Face 110: A:63 B:55 C:54 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 111: A:62 B:63 C:54 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 112: A:56 B:48 C:55 AB:1 BC:1 CA:0 +Material:"GREY" +Smoothing: 3, 12 +Face 113: A:63 B:56 C:55 AB:1 BC:0 CA:1 +Material:"GREY" +Smoothing: 3, 12 +Face 114: A:65 B:57 C:56 AB:1 BC:1 CA:0 +Material:"GREY" +Smoothing: 4, 10 +Face 115: A:64 B:65 C:56 AB:1 BC:0 CA:1 +Material:"GREY" +Smoothing: 4, 10 +Face 116: A:66 B:58 C:57 AB:1 BC:1 CA:0 +Material:"GREY" +Smoothing: 5, 11 +Face 117: A:65 B:66 C:57 AB:1 BC:0 CA:1 +Material:"GREY" +Smoothing: 5, 11 +Face 118: A:67 B:59 C:58 AB:1 BC:1 CA:0 +Material:"GREY" +Smoothing: 4, 10 +Face 119: A:66 B:67 C:58 AB:1 BC:0 CA:1 +Material:"GREY" +Smoothing: 4, 10 +Face 120: A:68 B:60 C:59 AB:1 BC:1 CA:0 +Material:"GREY" +Smoothing: 5, 11 +Face 121: A:67 B:68 C:59 AB:1 BC:0 CA:1 +Material:"GREY" +Smoothing: 5, 11 +Face 122: A:69 B:61 C:60 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 123: A:68 B:69 C:60 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 124: A:70 B:62 C:61 AB:1 BC:1 CA:0 +Material:"GREY" +Smoothing: 5, 11 +Face 125: A:69 B:70 C:61 AB:1 BC:0 CA:1 +Material:"GREY" +Smoothing: 5, 11 +Face 126: A:71 B:63 C:62 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" + + Page 9 + + + +Smoothing: 4, 10 +Face 127: A:70 B:71 C:62 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 128: A:64 B:56 C:63 AB:1 BC:1 CA:0 +Material:"GREY" +Smoothing: 6, 12 +Face 129: A:71 B:64 C:63 AB:1 BC:0 CA:1 +Material:"GREY" +Smoothing: 6, 12 +Face 130: A:73 B:65 C:64 AB:1 BC:1 CA:0 +Material:"GREY" +Smoothing: 1, 10 +Face 131: A:72 B:73 C:64 AB:1 BC:0 CA:1 +Material:"GREY" +Smoothing: 1, 10 +Face 132: A:74 B:66 C:65 AB:1 BC:1 CA:0 +Material:"GREY" +Smoothing: 2, 11 +Face 133: A:73 B:74 C:65 AB:1 BC:0 CA:1 +Material:"GREY" +Smoothing: 2, 11 +Face 134: A:75 B:67 C:66 AB:1 BC:1 CA:0 +Material:"GREY" +Smoothing: 1, 10 +Face 135: A:74 B:75 C:66 AB:1 BC:0 CA:1 +Material:"GREY" +Smoothing: 1, 10 +Face 136: A:76 B:68 C:67 AB:1 BC:1 CA:0 +Material:"GREY" +Smoothing: 2, 11 +Face 137: A:77 B:69 C:68 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 138: A:76 B:77 C:68 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 139: A:78 B:70 C:69 AB:1 BC:1 CA:0 +Material:"GREY" +Smoothing: 2, 11 +Face 140: A:77 B:78 C:69 AB:1 BC:0 CA:1 +Material:"GREY" +Smoothing: 2, 11 +Face 141: A:79 B:71 C:70 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 142: A:78 B:79 C:70 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 143: A:72 B:64 C:71 AB:1 BC:1 CA:0 +Material:"GREY" +Smoothing: 3, 12 +Face 144: A:73 B:72 C:78 AB:1 BC:0 CA:0 +Material:"GREY" +Smoothing: 17 +Face 145: A:73 B:78 C:77 AB:0 BC:1 CA:0 +Material:"GREY" +Smoothing: 17 +Face 146: A:74 B:73 C:77 AB:1 BC:0 CA:0 +Material:"GREY" +Smoothing: 17 + + Page 10 + + + +Face 147: A:74 B:77 C:76 AB:0 BC:1 CA:0 +Material:"GREY" +Smoothing: 17 +Face 148: A:86 B:85 C:84 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 149: A:81 B:80 C:87 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 150: A:82 B:81 C:87 AB:1 BC:0 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 151: A:86 B:84 C:83 AB:0 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 152: A:86 B:83 C:82 AB:0 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 153: A:86 B:82 C:87 AB:0 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 154: A:80 B:81 C:89 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 155: A:80 B:89 C:88 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 156: A:81 B:82 C:90 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 157: A:81 B:90 C:89 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 158: A:82 B:83 C:91 AB:1 BC:1 CA:0 +Material:"BLACK" +Smoothing: 1, 10 +Face 159: A:82 B:91 C:90 AB:0 BC:1 CA:1 +Material:"BLACK" +Smoothing: 1, 10 +Face 160: A:83 B:84 C:92 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 161: A:83 B:92 C:91 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 162: A:84 B:85 C:93 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 163: A:84 B:93 C:92 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 164: A:85 B:86 C:94 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 165: A:85 B:94 C:93 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 166: A:86 B:87 C:95 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 167: A:86 B:95 C:94 AB:0 BC:1 CA:1 + + Page 11 + + + +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 168: A:87 B:80 C:88 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 3, 12 +Face 169: A:87 B:88 C:95 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 3, 12 +Face 170: A:88 B:89 C:97 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 171: A:88 B:97 C:96 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 172: A:89 B:90 C:98 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 173: A:89 B:98 C:97 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 174: A:90 B:91 C:99 AB:1 BC:1 CA:0 +Material:"BLACK" +Smoothing: 4, 10 +Face 175: A:90 B:99 C:98 AB:0 BC:1 CA:1 +Material:"BLACK" +Smoothing: 4, 10 +Face 176: A:91 B:92 C:100 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 177: A:91 B:100 C:99 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 178: A:92 B:93 C:101 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 179: A:92 B:101 C:100 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 180: A:93 B:94 C:102 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 181: A:93 B:102 C:101 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 182: A:94 B:95 C:103 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 183: A:94 B:103 C:102 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 184: A:95 B:88 C:96 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 6, 12 +Face 185: A:95 B:96 C:103 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 6, 12 +Face 186: A:96 B:97 C:105 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 187: A:96 B:105 C:104 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" + + Page 12 + + + +Smoothing: 1, 10 +Face 188: A:97 B:98 C:106 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 189: A:97 B:106 C:105 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 190: A:98 B:99 C:107 AB:1 BC:1 CA:0 +Material:"BLACK" +Smoothing: 1, 10 +Face 191: A:98 B:107 C:106 AB:0 BC:1 CA:1 +Material:"BLACK" +Smoothing: 1, 10 +Face 192: A:99 B:100 C:108 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 193: A:99 B:108 C:107 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 194: A:100 B:101 C:109 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 195: A:100 B:109 C:108 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 196: A:101 B:102 C:110 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 197: A:101 B:110 C:109 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 198: A:102 B:103 C:111 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 199: A:102 B:111 C:110 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 200: A:103 B:96 C:104 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 3, 12 +Face 201: A:103 B:104 C:111 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 3, 12 +Face 202: A:104 B:105 C:113 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 203: A:104 B:113 C:112 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 204: A:105 B:106 C:114 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 205: A:105 B:114 C:113 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 206: A:106 B:107 C:115 AB:1 BC:1 CA:0 +Material:"BLACK" +Smoothing: 4, 10 +Face 207: A:106 B:115 C:114 AB:0 BC:1 CA:1 +Material:"BLACK" +Smoothing: 4, 10 + + Page 13 + + + +Face 208: A:107 B:108 C:116 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 209: A:107 B:116 C:115 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 210: A:108 B:109 C:117 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 211: A:108 B:117 C:116 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 212: A:109 B:110 C:118 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 213: A:109 B:118 C:117 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 5, 11 +Face 214: A:110 B:111 C:119 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 215: A:110 B:119 C:118 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 4, 10 +Face 216: A:111 B:104 C:112 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 6, 12 +Face 217: A:111 B:112 C:119 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 6, 12 +Face 218: A:112 B:113 C:121 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 219: A:112 B:121 C:120 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 220: A:113 B:114 C:122 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 221: A:113 B:122 C:121 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 222: A:114 B:115 C:123 AB:1 BC:1 CA:0 +Material:"BLACK" +Smoothing: 1, 10 +Face 223: A:114 B:123 C:122 AB:0 BC:1 CA:1 +Material:"BLACK" +Smoothing: 1, 10 +Face 224: A:115 B:116 C:124 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 225: A:115 B:124 C:123 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 226: A:116 B:117 C:125 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 227: A:116 B:125 C:124 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 228: A:117 B:118 C:126 AB:1 BC:1 CA:0 + + Page 14 + + + +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 229: A:117 B:126 C:125 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 230: A:118 B:119 C:127 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 231: A:118 B:127 C:126 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 232: A:119 B:112 C:120 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 3, 12 +Face 233: A:119 B:120 C:127 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 3, 12 +Face 234: A:124 B:125 C:126 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 235: A:127 B:120 C:121 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 236: A:127 B:121 C:122 AB:0 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 237: A:123 B:124 C:126 AB:1 BC:0 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 238: A:122 B:123 C:126 AB:1 BC:0 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 239: A:127 B:122 C:126 AB:0 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 240: A:129 B:128 C:133 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 241: A:129 B:133 C:132 AB:0 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 242: A:130 B:129 C:132 AB:1 BC:0 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 243: A:131 B:130 C:132 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 244: A:128 B:129 C:135 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 245: A:128 B:135 C:134 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 246: A:129 B:130 C:136 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 247: A:129 B:136 C:135 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 248: A:130 B:131 C:137 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" + + Page 15 + + + +Smoothing: 1, 10 +Face 249: A:130 B:137 C:136 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 250: A:131 B:132 C:138 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 251: A:131 B:138 C:137 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 252: A:132 B:133 C:139 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 253: A:132 B:139 C:138 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 254: A:133 B:128 C:134 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 3, 12 +Face 255: A:133 B:134 C:139 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 3, 12 +Face 256: A:145 B:140 C:141 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 257: A:144 B:145 C:141 AB:1 BC:0 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 258: A:144 B:141 C:142 AB:0 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 259: A:144 B:142 C:143 AB:0 BC:1 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 17 +Face 260: A:147 B:141 C:140 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 261: A:146 B:147 C:140 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 262: A:148 B:142 C:141 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 263: A:147 B:148 C:141 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 264: A:149 B:143 C:142 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 265: A:148 B:149 C:142 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 266: A:150 B:144 C:143 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 267: A:149 B:150 C:143 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 2, 11 +Face 268: A:151 B:145 C:144 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 + + Page 16 + + + +Face 269: A:150 B:151 C:144 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 1, 10 +Face 270: A:146 B:140 C:145 AB:1 BC:1 CA:0 +Material:"LIGHT_BLUE" +Smoothing: 3, 12 +Face 271: A:151 B:146 C:145 AB:1 BC:0 CA:1 +Material:"LIGHT_BLUE" +Smoothing: 3, 12 + +Named object: "Object" +Tri-mesh, Vertices: 28 Faces: 52 +Vertex list: +Vertex 0: X: 338.48053 Y: 1553.834351 Z: 210.663498 +Vertex 1: X: 180.442154 Y: 1553.834473 Z: 158.03923 +Vertex 2: X: 149.720444 Y: 1553.834351 Z: 233.405289 +Vertex 3: X: 148.393341 Y: 1553.834473 Z: 147.482468 +Vertex 4: X: -6.89695 Y: 1553.834839 Z: 99.074738 +Vertex 5: X: -31.79199 Y: 1553.834839 Z: 40.794086 +Vertex 6: X: -75.699486 Y: 1553.834351 Z: 15.444096 +Vertex 7: X: -138.619492 Y: 1553.834473 Z: 23.024702 +Vertex 8: X: -252.116638 Y: 1553.834961 Z: -83.752068 +Vertex 9: X: -333.262024 Y: 1553.834351 Z: -45.444725 +Vertex 10: X: -277.971741 Y: 1553.834961 Z: -105.036781 +Vertex 11: X: -407.94696 Y: 1553.834473 Z: -220.286652 +Vertex 12: X: -37.674477 Y: 1553.834351 Z: -50.417187 +Vertex 13: X: 6.233005 Y: 1553.834351 Z: -25.067154 +Vertex 14: X: -65.856308 Y: 742.633911 Z: 50.398548 +Vertex 15: X: -67.739792 Y: 742.633911 Z: 49.311111 +Vertex 16: X: -67.611931 Y: 742.633911 Z: 49.38493 +Vertex 17: X: -68.121086 Y: 742.633911 Z: 49.090977 +Vertex 18: X: -69.952759 Y: 742.633911 Z: 48.033436 +Vertex 19: X: -70.537987 Y: 742.633911 Z: 47.695572 +Vertex 20: X: -71.123192 Y: 742.633911 Z: 47.357697 +Vertex 21: X: -71.708397 Y: 742.633911 Z: 47.019825 +Vertex 22: X: -73.459183 Y: 742.633911 Z: 46.009003 +Vertex 23: X: -74.04924 Y: 742.633911 Z: 45.668343 +Vertex 24: X: -73.840477 Y: 742.633911 Z: 45.788872 +Vertex 25: X: -75.804871 Y: 742.633911 Z: 44.654724 +Vertex 26: X: -71.123192 Y: 742.633911 Z: 47.357697 +Vertex 27: X: -70.537987 Y: 742.633911 Z: 47.695572 +Face list: +Face 0: A:10 B:9 C:8 AB:1 BC:1 CA:1 +Smoothing: 17 +Face 1: A:3 B:2 C:1 AB:1 BC:1 CA:1 +Smoothing: 17 +Face 2: A:12 B:11 C:10 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 3: A:1 B:0 C:13 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 4: A:12 B:10 C:8 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 5: A:3 B:1 C:13 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 6: A:4 B:3 C:13 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 7: A:5 B:4 C:13 AB:1 BC:0 CA:1 +Smoothing: 17 +Face 8: A:12 B:8 C:7 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 9: A:12 B:7 C:6 AB:0 BC:1 CA:1 + + Page 17 + + + +Smoothing: 17 +Face 10: A:12 B:6 C:5 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 11: A:12 B:5 C:13 AB:0 BC:1 CA:1 +Smoothing: 17 +Face 12: A:0 B:1 C:15 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 13: A:0 B:15 C:14 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 14: A:1 B:2 C:16 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 15: A:1 B:16 C:15 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 16: A:2 B:3 C:17 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 17: A:2 B:17 C:16 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 18: A:3 B:4 C:18 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 19: A:3 B:18 C:17 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 20: A:4 B:5 C:19 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 21: A:4 B:19 C:18 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 22: A:5 B:6 C:20 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 23: A:5 B:20 C:19 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 24: A:6 B:7 C:21 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 25: A:6 B:21 C:20 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 26: A:7 B:8 C:22 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 27: A:7 B:22 C:21 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 28: A:8 B:9 C:23 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 29: A:8 B:23 C:22 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 30: A:9 B:10 C:24 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 31: A:9 B:24 C:23 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 32: A:10 B:11 C:25 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 33: A:10 B:25 C:24 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 34: A:11 B:12 C:26 AB:1 BC:1 CA:0 +Smoothing: 2, 11 +Face 35: A:11 B:26 C:25 AB:0 BC:1 CA:1 +Smoothing: 2, 11 +Face 36: A:12 B:13 C:27 AB:1 BC:1 CA:0 +Smoothing: 1, 10 +Face 37: A:12 B:27 C:26 AB:0 BC:1 CA:1 +Smoothing: 1, 10 +Face 38: A:13 B:0 C:14 AB:1 BC:1 CA:0 +Smoothing: 3, 12 +Face 39: A:13 B:14 C:27 AB:0 BC:1 CA:1 +Smoothing: 3, 12 + + Page 18 + + + +Face 40: A:22 B:23 C:24 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 41: A:15 B:16 C:17 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 42: A:24 B:25 C:26 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 43: A:27 B:14 C:15 AB:1 BC:1 CA:0 +Smoothing: 17 +Face 44: A:22 B:24 C:26 AB:0 BC:0 CA:0 +Smoothing: 17 +Face 45: A:27 B:15 C:17 AB:0 BC:0 CA:0 +Smoothing: 17 +Face 46: A:27 B:17 C:18 AB:0 BC:1 CA:0 +Smoothing: 17 +Face 47: A:27 B:18 C:19 AB:0 BC:1 CA:0 +Smoothing: 17 +Face 48: A:21 B:22 C:26 AB:1 BC:0 CA:0 +Smoothing: 17 +Face 49: A:20 B:21 C:26 AB:1 BC:0 CA:0 +Smoothing: 17 +Face 50: A:19 B:20 C:26 AB:1 BC:0 CA:0 +Smoothing: 17 +Face 51: A:27 B:19 C:26 AB:0 BC:0 CA:1 +Smoothing: 17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page 19 + + + diff --git a/3DS/UUSALKU.PRJ b/3DS/UUSALKU.PRJ new file mode 100644 index 0000000..9be899f Binary files /dev/null and b/3DS/UUSALKU.PRJ differ diff --git a/ALKU/ALKU.DSK b/ALKU/ALKU.DSK new file mode 100644 index 0000000..d518026 Binary files /dev/null and b/ALKU/ALKU.DSK differ diff --git a/ALKU/ALKU.PRJ b/ALKU/ALKU.PRJ new file mode 100644 index 0000000..790949a Binary files /dev/null and b/ALKU/ALKU.PRJ differ diff --git a/ALKU/ASMYT.ASM b/ALKU/ASMYT.ASM new file mode 100644 index 0000000..70f579f --- /dev/null +++ b/ALKU/ASMYT.ASM @@ -0,0 +1,110 @@ + IDEAL + MODEL large + P386 + +CODESEG + +mmask dw 0102h,0202h,0402h,0802h,0102h,0202h,0402h,0802h +rmask dw 0004h,0104h,0204h,0304h,0004h,0104h,0204h,0304h + +PUBLIC C ascrolltext + +PROC C ascrolltext + + ARG scrl:word, text:dword + + push ds es si di + push 0a000h + pop es + lds si, [text] + mov cx, 0d +@@l1: + + mov bx, cx + add bx, [scrl] + and bx, 3d + shl bx, 1d + mov ax, [cs:mmask+bx] + mov dx, 3c4h + out dx, ax + mov ax, [cs:rmask+bx] + mov dx, 3ceh + out dx, ax + + mov di, cx + add di, [scrl] + shr di, 2d +@@l3: + REPT 20 + add si, 4d + mov bx, [si-4] + cmp bx, -1 + je @@l2 + mov ax, [si-2] + xor [es:bx+di], al + ENDM + jmp @@l3 +@@l2: + inc cx + cmp cx, 4d + jne @@l1 + + pop di si es ds + ret +ENDP + +PUBLIC C outline + +mrol dw 0 + +PROC C outline + + ARG src:dword, dest:dword + + push ds es si di + + mov [cs:mrol], 0802h + mov cx, 4d +@@l1: + mov dx, 3c4h + mov ax, [cs:mrol] + out dx, ax + + lds si, [src] + add si, cx + dec si + les di, [dest] + xor ax, ax + mov [es:di-352], al + mov [es:di-352+176], al + + ccc=0 + REPT 75 + mov al, [ds:si+ccc*640] + mov [es:di+ccc*352], al + mov [es:di+ccc*352+176], al + ccc=ccc+1 + ENDM + + mov ax, ds + add ax, 75*40 + mov ds, ax + + ccc=0 + REPT 75 + mov al, [ds:si+ccc*640] + mov [es:di+ccc*352+75*352], al + mov [es:di+ccc*352+75*352+176], al + ccc=ccc+1 + ENDM + + shr [cs:(Byte mrol+1)], 1d + dec cx + jnz @@l1 + + + pop di si es ds + ret +ENDP + +END \ No newline at end of file diff --git a/ALKU/ASMYT.OBJ b/ALKU/ASMYT.OBJ new file mode 100644 index 0000000..6be2d9b Binary files /dev/null and b/ALKU/ASMYT.OBJ differ diff --git a/ALKU/COPPER.ASM b/ALKU/COPPER.ASM new file mode 100644 index 0000000..4aa486c --- /dev/null +++ b/ALKU/COPPER.ASM @@ -0,0 +1,149 @@ + IDEAL + MODEL large + P386 + +CODESEG + +PUBLIC C frame_count, C init_copper, C close_copper, C cop_pal, C do_pal, C cop_start, C cop_scrl + +twait dw 0 +frame_count dw 0 +old_int8 dw 0 + dw 0 +cop_pal dd 0 +do_pal dw 0 +cop_start dw 0 +cop_scrl dw 0 + + +PROC close_copper + + mov bx, 7 + mov ax, 0 + mov cx, 0 + mov dx, 0 + int 0fch + + mov bx, 7 + mov ax, 1 + mov cx, 0 + mov dx, 0 + int 0fch + + mov bx, 7 + mov ax, 2 + mov cx, 0 + mov dx, 0 + int 0fch + + ret +ENDP + +PROC init_copper + + mov bx, 7 + mov ax, 1 + mov cx, OFFSET copper1 + mov dx, SEG copper1 + int 0fch + + mov bx, 7 + mov ax, 2 + mov cx, OFFSET copper2 + mov dx, SEG copper2 + int 0fch + + mov bx, 7 + mov ax, 0 + mov cx, OFFSET copper3 + mov dx, SEG copper3 + int 0fch + + ret + +PROC copper1 + + mov dx, 03d4h + mov al, 0dh + mov ah, [Byte cs:cop_start] + out dx, ax + mov al, 0ch + mov ah, [Byte cs:cop_start+1] + out dx, ax + + mov dx, 3c0h + mov al, 33h + out dx, al + mov ax, [cs:cop_scrl] + out dx, al + + retf +ENDP + +PROC copper2 + + inc [cs:frame_count] + + cmp [cs:do_pal], 0d + je @@no_pal + + pusha + push ds + lds si, [cs:cop_pal] + mov cx, 768d + mov dx, 3c8h + mov al, 0d + out dx, al + inc dx + rep outsb + mov [cs:do_pal], 0d + pop ds + popa +@@no_pal: + retf +ENDP + +PUBLIC C cop_dofade +cop_dofade dw 0 + +PUBLIC C fadepal +fadepal db 768*2 dup(?) + +PUBLIC C cop_fadepal +cop_fadepal dd 0 + +PROC copper3 + cmp [cs:cop_dofade], 0d + je @@l1 + dec [cs:cop_dofade] + + push ds si di cx + + mov [Word cs:cop_pal], OFFSET fadepal + mov [Word cs:cop_pal+2], SEG fadepal + mov [do_pal], 1d + + lds si, [cs:cop_fadepal] + mov di, OFFSET fadepal + mov cx, 768/16d +@@l4: + ccc=0 + REPT 16 + mov ax, [ds:si+ccc*2] + add [cs:di+ccc+768], al + adc [cs:di+ccc], ah + ccc=ccc+1 + ENDM + add di, 16d + add si, 32d + dec cx + jnz @@l4 + + pop cx di si ds +@@l1: + retf +ENDP + + +END + diff --git a/ALKU/COPPER.OBJ b/ALKU/COPPER.OBJ new file mode 100644 index 0000000..5371f35 Binary files /dev/null and b/ALKU/COPPER.OBJ differ diff --git a/ALKU/CUT64KB.EXE b/ALKU/CUT64KB.EXE new file mode 100644 index 0000000..b947f18 Binary files /dev/null and b/ALKU/CUT64KB.EXE differ diff --git a/ALKU/DISC.OBJ b/ALKU/DISC.OBJ new file mode 100644 index 0000000..8ab8287 Binary files /dev/null and b/ALKU/DISC.OBJ differ diff --git a/ALKU/DP_PREFS b/ALKU/DP_PREFS new file mode 100644 index 0000000..ea7b409 Binary files /dev/null and b/ALKU/DP_PREFS differ diff --git a/ALKU/FONA.INC b/ALKU/FONA.INC new file mode 100644 index 0000000..b7d39b1 --- /dev/null +++ b/ALKU/FONA.INC @@ -0,0 +1,2813 @@ + db 0,0,0,0,0,0,0,0,0,1,2,2,1,0,0,0 + db 0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3 + db 3,2,1,0,0,0,0,0,0,1,2,3,3,3,3,3 + db 3,2,1,3,0,3,3,3,3,3,3,3,3,3,3,3 + db 3,2,1,0,0,0,0,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,0,0,0,0,1,2,3,3,3,3,3,3 + db 3,2,1,3,0,0,0,3,3,3,3,3,3,3,0,0 + db 0,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3 + db 3,3,0,0,0,0,0,3,3,3,3,3,3,3,3,3 + db 0,3,3,3,3,3,3,3,0,0,0,0,3,3,3,3 + db 3,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0 + db 0,0,0,3,3,3,3,3,1,0,0,0,0,0,0,0 + db 0,3,3,3,3,3,0,3,3,3,3,2,1,0,0,0 + db 0,0,0,3,3,3,3,3,3,0,0,0,0,1,2,3 + db 3,3,3,3,3,2,1,0,0,0,0,3,3,3,3,3 + db 3,3,3,3,2,1,0,0,0,0,0,0,1,2,3,3 + db 3,3,3,3,2,1,0,0,0,0,3,3,3,3,3,3 + db 3,3,3,3,2,1,0,0,0,0,0,0,0,1,2,3 + db 3,3,3,3,3,2,1,3,0,0,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,0 + db 0,0,0,3,3,3,3,3,3,0,3,3,3,3,3,3 + db 3,3,0,0,0,0,3,3,3,3,3,3,0,3,3,3 + db 3,3,3,0,0,3,3,3,3,3,3,3,0,0,0,0 + db 3,3,3,3,3,3,0,3,3,3,3,3,3,0,0,0 + db 0,0,3,3,3,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,3,3,3,3,3,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 1,2,3,3,3,2,1,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,3,3,3,3,3,0,0,0 + db 0,0,0,0,0,0,0,0,3,3,3,3,3,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,1,2,3,3,3,3,3,3,2 + db 1,0,0,0,0,0,0,1,2,3,0,0,0,0,0,1 + db 2,3,3,3,3,3,3,2,1,0,0,0,1,2,3,3 + db 3,3,3,3,2,1,0,0,0,0,0,0,0,0,0,0 + db 1,2,3,3,0,0,0,0,0,3,3,3,3,3,3,3 + db 3,3,2,0,0,0,0,0,0,1,2,3,3,3,3,3 + db 2,1,0,0,3,3,3,3,3,3,3,3,3,3,3,2 + db 0,0,1,2,3,3,3,3,2,1,0,0,0,0,0,1 + db 2,3,3,3,3,3,2,1,0,0,0,3,3,3,0,0 + db 0,0,3,3,3,3,3,3,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,3,3,3,0,0,0 + db 3,3,3,0,0,0,0,3,3,3,0,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3 + db 3,3,0,0,0,0,0,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,1,0,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,1,0,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0 + db 3,3,0,0,0,0,0,0,0,0,0,0,0,1,3,3 + db 0,0,3,3,1,0,0,0,0,0,0,0,0,0,0,0 + db 3,3,0,0,3,3,0,0,0,3,3,0,0,0,0,0 + db 0,0,3,3,0,3,3,0,0,0,0,0,0,0,3,3 + db 0,3,3,0,0,0,0,0,0,0,0,0,0,3,3,3 + db 3,3,3,3,3,2,1,0,0,0,0,0,1,3,3,3 + db 3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,1,2,3,3,3,3,3,3,2,1,0,0,3 + db 3,0,0,0,0,0,0,0,3,3,0,3,3,3,3,3 + db 3,3,3,3,2,1,0,3,3,3,3,3,3,3,3,3 + db 2,1,0,3,3,0,0,0,0,0,0,0,3,3,0,3 + db 3,0,0,0,0,0,0,0,3,3,0,3,3,0,1,3 + db 3,2,0,0,3,3,0,3,3,0,0,0,0,0,0,0 + db 3,3,0,0,0,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,2,3,3,2,1,0,0,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,1,2,3,2,1 + db 0,0,0,0,2,3,3,3,2,0,0,1,2,3,3,3 + db 0,0,0,3,3,3,0,0,0,0,1,2,3,3,3,2 + db 0,0,0,0,0,3,3,3,0,0,0,0,0,1,2,3 + db 3,0,0,0,3,3,3,0,0,0,0,0,1,2,3,3 + db 0,0,0,2,3,3,3,2,1,0,0,1,2,3,3,3 + db 0,0,0,0,0,3,3,3,0,0,0,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,1,3,3,2,1,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,3,3,3,2,0,0,0,0,0,0,0,1,3,3,3 + db 0,0,0,0,0,3,3,3,2,1,0,0,0,0,0,0 + db 0,3,3,0,0,0,0,1,2,3,3,3,2,1,1,2 + db 3,3,3,2,1,0,0,0,0,3,3,3,0,0,1,2 + db 3,3,2,0,0,0,0,2,3,3,3,2,1,1,2,3 + db 3,3,2,0,0,0,0,0,3,3,3,0,0,0,1,2 + db 3,3,2,0,0,0,0,0,1,3,3,2,1,0,0,1 + db 2,3,3,3,0,0,3,3,2,1,0,3,3,3,0,1 + db 2,3,3,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 0,3,3,0,0,0,0,1,2,3,3,2,0,0,0,0 + db 0,0,0,1,3,2,0,0,0,0,1,3,3,3,1,0 + db 0,0,1,3,3,3,1,0,0,0,0,0,0,1,3,2 + db 1,0,0,1,2,3,3,2,1,0,0,0,0,0,1,2 + db 3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,1,3,3,2,1 + db 1,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,1,2,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,1,3,3,2,1,0,0,1,2,3,3,1,0,0 + db 0,1,2,3,3,3,0,0,0,0,1,2,3,2,1,0 + db 0,1,2,3,2,1,0,1,3,3,2,1,0,0,1,2 + db 3,2,1,0,0,0,0,0,0,0,0,1,2,3,3,3 + db 0,0,0,0,0,3,3,3,3,3,3,3,3,2,0,0 + db 0,0,0,1,2,3,3,2,1,0,0,2,3,3,2,0 + db 3,3,3,3,3,3,3,3,3,3,2,1,0,1,3,3 + db 2,1,1,2,3,3,1,0,0,0,1,3,3,2,1,0 + db 1,2,3,3,1,0,0,3,3,3,0,0,3,3,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,3,3,3,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,3,3,0,0,0,0,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,0 + db 0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,0,1,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,0,1,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,0,0,3,3,0,0 + db 0,0,0,0,0,0,0,0,0,1,3,3,0,0,3,3 + db 1,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0 + db 3,3,0,0,0,3,3,0,0,0,0,0,0,0,3,3 + db 0,3,3,0,0,0,0,0,0,0,3,3,0,3,3,0 + db 0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3 + db 3,3,2,1,0,0,0,0,1,2,3,3,2,1,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 1,2,3,3,3,3,3,3,2,1,0,3,3,0,0,0 + db 0,0,0,0,3,3,0,3,3,3,3,3,3,3,3,2 + db 1,0,0,3,3,3,3,3,3,3,3,2,1,0,0,3 + db 3,0,0,0,0,0,0,0,3,3,0,3,3,0,0,0 + db 0,0,0,0,3,3,0,3,3,0,0,2,3,3,1,0 + db 3,3,0,3,3,0,0,0,0,0,0,0,3,3,0,0 + db 0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 1,3,3,3,3,2,0,0,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,1,2,3,2,0,0,0,2 + db 3,3,3,2,0,0,0,0,0,1,2,3,0,0,0,3 + db 3,3,0,0,0,0,0,1,2,3,3,3,2,0,0,0 + db 0,3,3,3,0,0,0,0,0,0,1,2,3,0,0,0 + db 3,3,3,0,0,0,0,0,0,1,2,3,0,0,2,3 + db 3,3,2,0,0,0,0,0,0,1,2,3,0,0,0,0 + db 0,3,3,3,0,0,0,0,0,0,0,3,3,3,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,3,3,3,0,0 + db 0,0,0,1,2,3,2,1,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3 + db 3,1,0,0,0,0,0,0,2,3,3,3,0,0,0,0 + db 0,3,3,3,3,2,1,0,0,0,0,0,0,3,3,0 + db 0,0,0,2,3,3,3,2,0,0,0,0,2,3,3,3 + db 2,0,0,0,0,3,3,3,0,0,0,0,2,3,3,2 + db 0,0,2,3,3,3,2,1,0,0,1,2,3,3,3,2 + db 0,0,0,0,3,3,3,0,0,0,0,0,2,3,3,2 + db 0,0,0,0,2,3,2,1,0,0,0,0,0,1,2,3 + db 0,0,3,2,0,0,0,3,3,3,0,0,0,2,3,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,0,3,3,0 + db 0,0,0,0,1,3,3,3,1,0,0,0,0,0,0,2 + db 3,1,0,0,0,0,0,2,3,3,2,0,0,0,0,2 + db 3,3,2,0,0,0,0,0,0,2,3,1,0,0,0,0 + db 1,2,3,3,2,1,0,0,0,1,2,3,2,1,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,2,3,3,1,0,3,2,1,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,1,2,3,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,3 + db 2,1,0,0,0,0,1,2,3,3,1,0,3,3,3,3 + db 3,3,0,0,0,0,2,3,2,1,0,0,0,0,1,3 + db 3,2,0,2,3,2,1,0,0,0,0,1,3,3,2,0 + db 0,0,0,0,0,0,1,2,3,3,3,3,0,0,0,0 + db 0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,2 + db 3,2,1,0,0,0,0,1,2,3,3,0,3,2,1,0 + db 0,0,1,2,3,2,1,0,0,2,3,2,0,0,0,1 + db 2,3,2,0,0,1,3,3,2,1,0,0,0,1,2,3 + db 3,1,0,3,3,3,0,3,3,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,3,3,0,0,0,0,0,3,3,0,0,3,3,3 + db 0,0,0,0,0,0,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,3,3,0,0,3,3,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0 + db 0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,0,0,3,3,0,0,0,0,0,0 + db 0,0,0,0,0,1,3,3,0,0,3,3,1,0,0,0 + db 0,0,0,0,0,0,0,0,3,3,0,0,3,3,0,0 + db 0,3,3,0,0,0,0,0,0,0,3,3,0,3,3,0 + db 0,0,0,0,0,0,3,3,0,3,3,0,0,0,0,0 + db 0,0,0,0,0,3,3,0,0,0,1,2,3,3,3,1 + db 0,0,0,0,0,2,3,3,2,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2 + db 2,3,3,3,3,1,0,3,3,0,0,0,0,0,0,0 + db 3,3,0,3,3,3,3,3,3,3,2,1,0,0,0,3 + db 3,3,3,3,3,3,2,1,0,0,0,3,3,0,0,0 + db 0,0,0,0,3,3,0,3,3,0,0,0,0,0,0,0 + db 3,3,0,3,3,0,0,1,3,3,1,0,3,3,0,3 + db 3,0,0,0,0,0,0,0,3,3,0,0,0,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,2,3,2,2 + db 3,3,1,0,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,1,3,3,0,0,1,3,3,3,3,1 + db 0,0,0,0,0,0,0,3,0,0,0,3,3,3,0,0 + db 0,0,0,0,1,3,3,3,3,1,0,0,0,3,3,3 + db 0,0,0,0,0,0,0,1,3,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,1,3,0,1,3,3,3,3,1,0 + db 0,0,0,0,0,0,1,3,0,0,0,0,0,3,3,3 + db 0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,3,3,3,0,0,0,0,1,2 + db 3,2,1,0,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,0,0,0,0,0,0,3,3,3,3,2,0,0 + db 0,0,0,1,3,3,3,3,0,0,0,0,0,3,3,2 + db 3,3,2,1,0,0,0,0,0,3,3,0,0,0,1,3 + db 3,3,3,1,0,0,0,0,1,3,3,3,3,1,0,0 + db 0,3,3,3,0,0,0,0,1,3,3,3,0,1,3,3 + db 3,3,1,0,0,0,0,1,3,3,3,3,1,0,0,0 + db 3,3,3,0,0,0,0,0,1,3,3,3,0,0,0,0 + db 3,3,2,1,0,0,0,0,0,0,1,3,0,0,3,1 + db 0,0,0,3,3,3,0,0,0,1,3,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0 + db 0,2,3,3,2,0,0,0,0,0,1,3,2,0,0,0 + db 0,0,0,1,3,3,3,1,0,0,0,1,3,3,3,0 + db 0,0,0,0,1,3,2,0,0,0,0,0,0,1,2,3 + db 3,2,1,0,1,2,3,2,1,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,1,2,3,3,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,2,3,3,1,0,0,0 + db 0,0,0,1,3,3,2,0,0,0,0,3,3,3,0,0 + db 0,0,2,3,3,3,0,0,0,0,0,3,3,3,0,2 + db 3,3,2,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,1,2,3,2,3,3,3,0,0,0,0,0,3,0,0 + db 0,0,0,0,0,0,0,0,0,0,1,3,3,1,0,0 + db 0,0,0,2,3,3,2,0,3,1,0,0,0,1,2,3 + db 2,1,0,0,0,3,3,2,1,0,0,0,1,3,3,0 + db 0,2,3,3,1,0,0,0,0,0,1,3,3,2,0,3 + db 3,3,0,3,3,3,3,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3 + db 0,0,0,0,0,3,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,0,0,3,3,3,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,3,0,0,0,0,0,0,3,3,0,1,1 + db 1,2,2,3,3,3,3,3,3,3,3,0,0,3,3,3 + db 3,3,3,3,3,2,2,1,1,1,0,3,3,0,0,3 + db 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 3,3,0,0,3,3,0,0,0,0,0,0,0,0,0,0 + db 0,1,3,3,0,0,3,3,1,0,0,0,0,0,0,0 + db 0,0,0,0,3,3,0,0,3,3,0,0,0,3,3,0 + db 0,0,0,0,0,0,3,3,0,3,3,0,0,0,0,0 + db 0,0,3,3,0,3,3,0,0,0,0,0,0,0,0,0 + db 0,3,3,0,0,0,0,1,2,3,3,2,0,0,0,0 + db 0,1,3,3,1,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,3 + db 3,2,0,3,3,0,0,0,0,0,0,0,3,3,0,3 + db 3,0,1,3,3,2,0,0,0,0,0,3,3,0,1,3 + db 3,2,0,0,0,0,0,3,3,0,0,0,0,0,0,0 + db 3,3,0,3,3,0,0,0,0,0,0,0,3,3,0,3 + db 3,0,0,1,3,3,2,0,3,3,0,3,3,0,0,0 + db 0,0,0,0,3,3,0,0,0,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,1,3,2,1,1,2,3,2,0 + db 0,0,0,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 1,2,3,2,0,0,2,3,3,3,2,0,0,0,0,0 + db 0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0 + db 0,2,3,3,3,2,0,0,0,3,3,3,0,0,0,1 + db 3,0,0,0,0,0,0,0,3,3,3,0,0,0,1,3 + db 0,0,0,0,0,2,3,3,3,2,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,3,3,3,0,0,0,1,2,3,2,1,0,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 0,0,0,0,0,3,3,2,3,3,1,0,0,0,0,2 + db 3,3,3,3,0,0,0,0,0,3,3,1,2,3,3,2 + db 1,0,0,0,0,3,3,0,0,0,2,3,3,3,2,0 + db 0,0,0,0,0,2,3,3,3,2,0,0,0,3,3,3 + db 0,0,0,0,1,3,3,3,0,2,3,3,3,2,0,0 + db 0,0,0,0,2,3,3,3,2,0,0,0,3,3,3,0 + db 0,0,0,0,1,3,3,3,0,0,0,0,2,3,3,2 + db 2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,0,0,3,3,0,0,0,0,0,0,1,3,3 + db 3,1,0,0,0,0,2,3,1,0,0,0,0,0,0,0 + db 2,3,3,2,0,0,0,0,2,3,3,1,0,0,0,0 + db 2,3,1,0,0,0,0,0,0,0,1,2,3,3,2,1 + db 2,3,2,1,0,0,0,0,0,1,2,3,3,3,3,3 + db 2,1,0,0,0,0,0,0,3,3,3,2,3,3,3,3 + db 2,1,0,0,0,0,0,1,2,3,3,3,3,3,2,1 + db 0,0,0,1,2,3,3,3,3,2,3,3,3,0,0,0 + db 0,0,1,2,3,3,3,3,3,2,1,0,0,3,3,3 + db 3,3,3,3,3,0,0,0,0,0,1,2,3,3,3,3 + db 3,3,2,0,0,0,0,0,3,3,3,2,3,3,3,3 + db 2,1,0,0,0,0,3,3,3,3,3,0,0,0,0,0 + db 0,0,3,3,3,3,3,0,0,0,3,3,3,0,0,3 + db 3,3,3,3,3,3,0,0,0,0,3,3,3,0,0,0 + db 3,3,3,3,3,1,2,3,3,2,1,1,2,3,3,3 + db 2,1,0,0,0,0,3,3,3,3,3,2,3,3,3,3 + db 2,1,0,0,0,0,0,1,2,3,3,3,3,3,2,1 + db 0,0,3,3,3,3,3,2,3,3,3,3,2,1,0,0 + db 0,0,0,1,2,3,3,3,3,2,3,3,3,0,0,0 + db 3,3,3,3,3,1,2,3,3,2,1,0,0,1,2,3 + db 3,3,3,2,3,0,0,3,3,3,3,3,3,3,3,0 + db 3,3,3,3,3,0,0,0,3,3,3,3,3,0,0,0 + db 3,3,3,3,3,3,2,0,0,0,0,3,3,3,3,0 + db 3,3,3,3,3,3,3,0,0,2,3,3,3,3,2,0 + db 0,3,3,3,3,3,3,0,3,3,3,3,3,3,0,0 + db 0,3,3,3,3,3,0,3,3,3,3,3,3,3,0,0 + db 0,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3 + db 3,3,3,3,0,3,3,3,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,3,3,3,0,0,0,0,1,2 + db 3,3,0,0,0,0,1,3,3,2,0,1,2,3,3,0 + db 0,0,0,1,3,3,2,0,0,0,0,0,1,2,3,2 + db 1,3,3,3,0,0,0,0,0,3,0,0,0,0,0,0 + db 0,0,0,0,0,0,2,3,3,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,1,2,3,2,1,0,0,0 + db 0,2,3,3,2,1,0,1,2,3,2,0,0,3,3,3 + db 0,0,0,0,0,0,0,3,3,3,0,3,3,3,0,0 + db 3,3,3,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0 + db 3,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3 + db 3,3,3,3,0,3,3,3,3,3,3,3,3,3,0,3 + db 0,0,0,0,0,0,0,3,3,0,0,0,0,1,1,2 + db 3,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3 + db 2,1,1,0,0,0,0,3,3,0,0,3,3,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0 + db 3,3,0,0,0,0,0,0,0,0,0,0,0,1,3,3 + db 0,0,3,3,1,0,0,0,0,0,0,0,0,0,0,0 + db 3,3,0,0,3,3,0,0,0,3,3,0,0,0,0,0 + db 0,0,3,3,0,3,3,0,0,0,0,0,0,0,3,3 + db 0,3,3,0,0,0,0,0,0,0,0,0,0,3,3,0 + db 0,0,0,0,1,3,3,3,0,0,0,0,0,1,3,3 + db 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,1,2,3,3,0,3 + db 3,0,0,0,0,0,0,0,3,3,0,3,3,0,0,2 + db 3,3,1,0,0,0,0,3,3,0,0,2,3,3,1,0 + db 0,0,0,3,3,0,0,0,0,0,0,0,3,3,0,3 + db 3,0,0,0,0,0,0,0,3,3,0,3,3,0,0,0 + db 2,3,3,1,3,3,0,3,3,0,0,0,0,0,0,0 + db 3,3,0,0,0,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,2,3,1,0,0,1,3,3,1,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,1,2,3,3,1 + db 0,0,3,3,3,3,1,0,0,0,0,0,0,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,1,3,3 + db 3,3,0,0,0,3,3,3,0,0,1,2,3,0,0,0 + db 0,0,0,0,3,3,3,0,0,1,2,3,0,0,0,0 + db 0,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,3,3,3,0,0,0,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,3 + db 3,3,0,0,1,2,3,2,1,0,0,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,3,3,1,3,3,2,0,0,0,1,3,2,3,3,3 + db 0,0,0,0,0,3,3,0,1,2,3,3,2,1,0,0 + db 0,3,3,0,0,0,3,3,3,3,1,0,0,0,0,0 + db 0,1,3,3,3,3,0,0,0,3,3,3,0,0,0,0 + db 2,3,3,2,0,3,3,3,3,1,0,0,0,0,0,0 + db 1,3,3,3,3,0,0,0,3,3,3,0,0,0,0,0 + db 2,3,3,2,0,0,0,0,1,2,3,3,3,3,2,2 + db 1,1,0,0,0,0,0,0,0,0,0,3,3,3,0,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 0,3,3,0,0,0,0,0,0,0,2,3,3,2,0,0 + db 0,1,3,2,0,0,0,0,0,0,0,0,1,3,3,3 + db 1,0,0,0,1,3,3,2,0,0,0,1,3,2,0,0 + db 0,0,0,0,0,0,0,1,2,3,3,3,3,2,1,0 + db 0,0,0,0,0,2,3,1,0,0,1,2,3,3,1,0 + db 0,0,0,0,3,3,3,3,2,1,1,2,3,3,1,0 + db 0,0,1,3,3,2,1,0,0,2,3,2,0,0,1,3 + db 3,2,1,0,2,3,3,3,3,0,0,0,0,1,3,3 + db 2,1,0,0,2,3,3,1,0,0,0,3,3,3,0,0 + db 0,0,0,0,0,1,2,3,2,1,0,1,2,3,3,1 + db 0,0,0,0,3,3,3,3,2,1,1,2,3,3,1,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,3,3,3,0,0,1,2,3,2,1 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,3,3 + db 3,2,3,2,2,3,3,2,3,2,1,2,3,3,1,0 + db 0,0,0,0,3,3,3,3,2,1,1,2,3,3,1,0 + db 0,0,1,3,3,2,1,0,1,2,3,3,1,0,0,0 + db 3,3,3,3,2,1,1,2,3,3,2,0,0,0,2,3 + db 3,2,1,1,2,3,3,3,3,0,0,0,0,0,3,3 + db 3,2,3,2,1,3,3,0,1,2,3,2,1,1,2,3 + db 3,0,0,0,0,3,3,3,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,3,3,3,0,0,0,0,0,2,3 + db 3,2,0,0,0,0,0,2,3,2,0,0,0,0,2,3 + db 3,1,0,0,0,0,0,3,3,1,0,0,0,0,1,3 + db 2,0,0,0,0,1,2,3,2,1,0,0,1,2,3,2 + db 1,0,0,0,0,2,3,3,1,0,0,0,0,0,1,3 + db 2,0,0,0,0,3,2,1,0,0,0,1,2,3,2,1 + db 0,3,3,3,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,0,0,0 + db 0,1,2,3,2,1,0,0,0,0,0,0,0,0,1,2 + db 3,3,1,0,0,0,0,1,2,3,2,1,0,3,3,3 + db 0,0,0,0,0,3,2,3,3,3,3,3,2,1,0,0 + db 0,0,3,3,3,1,2,3,3,3,3,2,1,0,0,0 + db 0,0,0,0,2,3,3,1,0,0,0,0,0,1,3,3 + db 3,3,3,3,3,2,1,0,0,2,3,3,1,0,0,0 + db 0,0,1,3,3,3,0,3,3,3,0,0,0,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,3,3,3,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,3,3,3,3,0,0,0 + db 0,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0 + db 0,0,0,3,3,0,0,0,0,0,0,1,2,3,3,3 + db 3,3,3,0,0,3,3,3,3,3,3,2,1,0,0,0 + db 0,0,0,3,3,0,0,3,3,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,3,3,0,0,3,3,0,0 + db 0,0,0,0,0,0,0,0,0,2,3,3,0,0,3,3 + db 2,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0 + db 3,3,0,0,0,3,3,0,0,0,0,0,0,1,3,3 + db 0,3,3,1,0,0,0,0,0,1,3,3,0,3,3,0 + db 0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0 + db 0,2,3,3,0,0,0,0,0,1,3,3,1,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3 + db 3,0,0,0,0,0,0,1,3,3,0,3,3,1,0,0 + db 0,0,0,1,3,3,0,3,3,0,0,1,3,3,2,0 + db 0,0,0,3,3,0,0,1,3,3,2,0,0,0,0,3 + db 3,1,0,0,0,0,0,1,3,3,0,3,3,1,0,0 + db 0,0,0,1,3,3,0,3,3,0,0,0,1,3,3,1 + db 3,3,0,3,3,0,0,0,0,0,0,1,3,3,0,0 + db 0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3 + db 2,0,0,0,0,2,3,2,0,0,0,0,0,0,0,0 + db 3,3,3,3,3,3,3,3,3,3,2,1,0,0,3,3 + db 3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,0,0,3,3,3,3,0,0 + db 0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0 + db 3,3,3,3,3,3,3,3,0,0,0,0,0,3,3,3 + db 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,3,3,3,0,1 + db 2,3,2,1,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0 + db 2,3,3,1,0,0,2,3,1,3,3,3,0,0,0,0 + db 0,3,3,0,0,1,2,3,3,2,1,0,0,3,3,0 + db 0,0,3,3,3,3,0,0,0,0,0,0,0,0,3,3 + db 3,3,0,0,0,3,3,3,0,0,1,2,3,3,2,0 + db 0,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3 + db 3,0,0,0,3,3,3,0,0,0,1,2,3,3,2,1 + db 0,0,0,0,0,0,1,2,2,3,3,3,3,3,2,1 + db 0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,0,3,3,0 + db 0,0,0,0,0,0,1,3,3,3,1,0,0,2,3,1 + db 0,0,0,0,0,0,0,0,0,2,3,3,2,0,0,0 + db 2,3,3,3,1,0,0,2,3,1,0,0,0,0,0,0 + db 0,0,0,0,1,2,3,3,2,1,0,0,0,0,0,0 + db 0,2,3,3,1,0,0,1,3,3,2,0,0,0,0,0 + db 3,3,3,2,0,0,0,0,2,3,3,1,0,1,3,3 + db 2,0,0,0,2,3,2,1,0,1,3,3,2,1,0,0 + db 1,2,3,3,3,0,0,0,1,3,3,2,0,0,0,0 + db 0,3,3,2,0,0,0,3,3,3,0,0,0,0,0,0 + db 0,2,3,3,1,0,0,0,1,3,3,2,0,0,0,0 + db 3,3,3,2,1,0,0,1,3,3,2,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,3,3,3,0,1,2,3,2,1,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,3,3,3,3,2,1 + db 1,3,3,3,2,1,0,1,3,3,2,0,0,0,0,0 + db 3,3,3,2,1,0,0,1,3,3,2,0,0,0,2,3 + db 3,1,0,0,0,1,3,3,2,0,0,0,3,3,3,2 + db 1,0,0,1,2,3,3,1,0,1,3,3,2,1,0,0 + db 1,2,3,3,3,0,0,0,0,0,3,3,3,3,1,0 + db 2,3,2,0,2,3,2,1,0,0,1,2,3,0,0,0 + db 0,3,3,3,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,1,3,3,3,1,0 + db 0,0,1,3,2,0,0,0,0,0,1,3,3,2,0,0 + db 0,0,1,3,3,2,0,0,0,0,2,3,1,0,0,0 + db 0,0,1,2,3,2,1,0,2,3,2,1,0,0,0,0 + db 0,1,3,3,2,0,0,0,0,0,2,3,1,0,0,0 + db 0,3,1,0,0,0,1,2,3,2,1,0,0,3,3,3 + db 0,0,0,0,0,0,0,0,3,3,3,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,0,0,0,1,2,3,3,2 + db 0,0,0,0,0,0,0,0,2,3,3,3,2,1,0,0 + db 0,0,1,2,3,2,1,0,0,3,3,3,0,0,0,0 + db 0,3,3,2,1,0,1,2,3,3,2,0,0,0,3,3 + db 3,2,3,2,1,1,2,3,3,1,0,0,0,0,0,1 + db 3,3,2,0,0,0,0,0,0,0,1,2,3,3,3,3 + db 3,3,2,0,0,1,3,3,2,1,0,0,0,1,2,3 + db 3,3,0,3,3,3,0,0,0,0,0,0,0,3,3,3 + db 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,3,3,3,0,3,3 + db 3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3 + db 3,0,0,0,3,3,0,0,3,3,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3 + db 3,0,0,0,0,0,0,0,1,2,3,3,3,3,3,0 + db 0,3,3,3,3,3,2,1,0,0,0,0,0,0,0,3 + db 3,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,3,3,0,0,3,3,0,0,0,0,0,0 + db 0,0,0,0,0,2,3,3,0,0,3,3,2,0,0,0 + db 0,0,0,0,0,0,0,0,3,3,0,0,3,3,0,0 + db 0,3,3,0,0,0,0,0,0,1,3,3,0,3,3,1 + db 0,0,0,0,0,1,3,3,0,3,3,0,0,0,0,0 + db 0,0,0,0,0,3,3,0,0,0,0,0,0,1,3,3 + db 0,0,0,0,0,1,3,3,1,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,3,3,1,0,0 + db 0,0,0,1,3,3,0,3,3,1,0,0,0,0,0,1 + db 3,3,0,3,3,0,0,0,2,3,3,1,0,0,0,3 + db 3,0,0,0,2,3,3,1,0,0,0,3,3,1,0,0 + db 0,0,0,1,3,3,0,3,3,1,0,0,0,0,0,1 + db 3,3,0,3,3,0,0,0,1,3,3,2,3,3,0,3 + db 3,0,0,0,0,0,0,1,3,3,0,0,0,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,2,3,1,0,0,0 + db 0,1,3,3,1,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,1,2,3,2,1,0,3,3,3,3,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,0 + db 0,0,0,0,0,0,3,3,3,3,0,0,0,3,3,3 + db 0,0,1,2,3,0,0,0,0,0,0,0,3,3,3,0 + db 0,1,2,3,0,0,0,0,0,3,3,3,3,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3 + db 0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,3,3,3,1,2,3,3,3,2 + db 1,0,0,0,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,0,0,0,0,0,0,3,3,0,1,3,3,2 + db 0,0,3,2,0,3,3,3,0,0,0,0,0,3,3,0 + db 0,0,1,2,3,3,2,1,0,3,3,0,0,0,3,3 + db 3,3,0,0,0,0,0,0,0,0,3,3,3,3,0,0 + db 0,3,3,3,3,3,3,3,2,1,0,0,0,3,3,3 + db 3,0,0,0,0,0,0,0,0,3,3,3,3,0,0,0 + db 3,3,3,3,3,3,3,3,3,2,1,0,0,0,0,0 + db 0,0,0,0,0,1,1,2,2,3,3,3,1,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0 + db 0,0,0,2,3,3,2,1,1,3,2,0,0,0,0,0 + db 0,0,0,0,0,1,3,3,3,1,0,1,3,2,3,3 + db 2,0,1,3,2,0,0,0,0,0,0,0,0,0,0,0 + db 1,3,3,3,2,1,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,3,3,3,1 + db 0,0,0,0,1,3,3,2,0,2,3,3,1,0,0,0 + db 0,0,0,0,0,2,3,3,1,0,0,0,0,1,3,3 + db 3,0,0,0,2,3,3,1,0,0,0,0,0,3,3,3 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,3,3,3 + db 0,0,0,0,0,3,3,3,0,0,0,0,3,3,3,1 + db 0,0,0,0,3,3,3,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,3,3,3,0,0,0,3,3 + db 3,1,2,3,2,1,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,3,3,3,2,1,0,0,3,3,3 + db 1,0,0,0,3,3,3,0,0,0,0,0,3,3,3,1 + db 0,0,0,0,3,3,3,0,0,0,3,3,3,0,0,0 + db 0,0,3,3,3,0,0,0,3,3,3,1,0,0,0,0 + db 1,3,3,2,0,2,3,3,1,0,0,0,0,1,3,3 + db 3,0,0,0,0,0,3,3,3,2,0,0,0,0,0,0 + db 2,3,3,3,2,1,0,0,1,0,0,0,0,3,3,3 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,2,3,3,2,0,0,0,2,3 + db 1,0,0,0,0,0,0,2,3,3,1,0,0,0,2,3 + db 3,3,1,0,0,0,3,2,0,0,0,0,0,0,0,1 + db 2,3,2,2,3,2,1,0,0,0,0,0,0,0,2,3 + db 3,1,0,0,0,1,3,2,0,0,0,0,0,0,0,0 + db 0,1,2,3,2,1,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,3,3,3,0,0 + db 0,0,0,0,0,1,2,3,3,2,1,0,0,0,0,0 + db 0,0,0,0,0,0,1,2,3,3,2,1,0,1,2,3 + db 2,1,0,0,0,3,3,3,0,0,0,0,0,3,2,0 + db 0,0,0,0,2,3,3,1,0,0,3,3,3,3,2,1 + db 0,0,0,2,3,3,1,0,0,0,0,2,3,3,1,0 + db 0,0,0,0,0,0,1,3,3,1,1,2,3,3,3,1 + db 0,0,1,2,3,2,1,1,2,3,3,3,3,3,0,3 + db 3,3,0,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,3,0,3,3,3,3,3,3 + db 3,3,3,0,3,3,3,3,3,3,3,3,3,0,0,3 + db 3,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0 + db 0,0,0,0,1,1,2,3,3,3,3,0,0,3,3,3 + db 3,2,1,1,0,0,0,0,0,0,0,3,3,0,0,3 + db 3,0,0,0,3,3,3,3,3,3,3,2,1,0,0,0 + db 0,0,1,2,3,3,3,2,1,0,0,0,3,3,0,0 + db 0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,2 + db 1,0,0,0,3,3,1,0,0,0,0,0,0,1,3,3 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 1,2,3,3,3,2,1,0,0,0,3,3,0,0,0,0 + db 0,0,0,3,3,0,3,3,3,3,3,3,3,2,1,0 + db 0,0,3,3,3,3,3,3,3,2,1,0,0,0,0,0 + db 1,2,3,3,3,2,1,0,0,0,3,3,0,0,0,0 + db 0,0,0,3,3,0,3,3,2,0,0,0,0,0,0,3 + db 3,0,3,3,3,3,3,3,3,2,1,0,0,0,0,0 + db 3,3,0,0,3,3,0,0,0,0,0,0,0,0,0,0 + db 1,2,3,3,0,0,3,3,2,1,0,0,0,0,0,0 + db 0,0,0,0,3,3,0,0,3,3,0,0,0,3,3,0 + db 0,0,0,0,0,1,3,3,0,3,3,1,0,0,0,0 + db 0,1,3,3,0,3,3,0,0,0,0,0,0,0,0,0 + db 0,3,3,0,0,0,0,0,0,1,3,3,0,0,0,0 + db 0,1,3,3,1,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,3,3,1,0,0,0,0,0,1 + db 3,3,0,3,3,1,0,0,0,0,0,1,3,3,0,3 + db 3,0,0,0,1,3,3,2,0,0,0,3,3,0,0,0 + db 1,3,3,2,0,0,0,3,3,1,0,0,0,0,0,1 + db 3,3,0,3,3,1,0,0,0,0,0,1,3,3,0,3 + db 3,0,0,0,0,2,3,3,3,3,0,3,3,0,0,0 + db 0,0,0,1,3,3,0,0,0,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,1,3,3,3,3,3,3,3,3,3,3 + db 2,0,0,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,1,2,3,2,0,3,3,3,3,1,0,0,0,0,0 + db 0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0 + db 0,1,3,3,3,3,0,0,0,3,3,3,0,0,0,1 + db 3,0,0,0,0,0,0,0,3,3,3,0,0,0,1,3 + db 0,0,0,0,0,3,3,3,3,1,0,0,0,0,3,3 + db 3,3,3,3,3,3,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,3,3,3,2,3,2,2,3,3,2,1,0,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 0,0,0,0,0,3,3,0,0,2,3,3,1,2,3,1 + db 0,3,3,3,0,0,0,0,0,3,3,0,0,0,0,1 + db 2,3,3,2,1,3,3,0,0,0,3,3,3,3,1,0 + db 0,0,0,0,0,1,3,3,3,3,0,0,0,3,3,3 + db 0,0,0,0,0,0,0,0,0,3,3,3,3,0,0,0 + db 0,0,0,0,0,3,3,3,3,0,0,0,3,3,3,0 + db 0,0,1,2,3,3,2,1,0,0,0,0,2,0,0,0 + db 0,0,0,0,1,2,3,3,2,0,0,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,1 + db 3,3,3,2,2,3,1,0,0,0,0,0,0,0,0,0 + db 0,0,2,3,3,2,1,2,3,1,3,3,3,1,2,3 + db 1,0,0,0,0,0,0,0,0,0,0,1,2,3,2,3 + db 3,2,1,0,0,0,0,0,0,0,1,2,3,3,3,3 + db 3,3,3,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,3,3,3,0,3,3,3,0,0,0,0,0,0,0,0 + db 0,3,3,3,0,0,0,0,0,0,3,3,3,0,0,0 + db 3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,3 + db 3,3,0,0,0,0,0,0,0,2,3,3,1,0,0,0 + db 1,3,3,2,0,0,0,0,3,3,3,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,3,3,3,2,3,3 + db 2,1,0,0,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,3,3,3,1,0,0,0,3,3,3,0,0,0,0 + db 3,3,3,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 3,3,3,0,0,0,3,3,3,0,0,0,0,0,3,3 + db 3,0,0,0,3,3,3,0,0,0,0,0,0,3,3,3 + db 0,3,3,3,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,3,3,3,1,0,0,0,0,0,0,0,2,3,3 + db 3,3,2,1,0,0,0,0,0,3,3,3,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,1,3,3,3,1,0,1,3,2,0,0,0,0 + db 0,0,0,1,3,3,2,0,0,1,3,3,3,3,2,0 + db 0,1,3,2,0,0,0,0,0,0,0,0,1,3,3,3 + db 2,1,0,0,0,0,0,0,0,0,1,3,3,2,0,0 + db 0,2,3,1,0,0,0,0,0,0,0,0,1,2,3,2 + db 1,0,0,0,0,3,3,3,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,3,3,3,0,0,0,0,0,1 + db 2,3,3,2,1,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,2,3,3,2,0,2,3,2,1,0,0,0 + db 0,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0 + db 1,3,3,2,0,0,3,3,3,2,0,0,0,0,0,1 + db 3,3,2,0,0,0,0,3,3,3,0,0,0,0,0,0 + db 0,1,3,2,1,0,0,1,2,3,3,2,0,0,0,0 + db 2,3,3,3,3,2,1,3,3,3,0,3,3,3,0,0 + db 0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,3,3,3,0,0,0,0,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,3,3,3,3,3,3,3,3,3,0,0 + db 0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0 + db 0,1,2,3,3,3,3,0,0,3,3,3,3,2,1,0 + db 0,0,0,0,0,0,0,3,3,0,0,3,3,0,0,0 + db 3,3,3,3,3,3,3,3,2,1,0,0,0,1,2,3 + db 3,3,3,3,2,1,0,0,3,3,0,0,0,0,0,0 + db 0,0,0,0,3,3,3,3,3,3,3,3,2,1,0,0 + db 3,3,2,0,0,0,0,0,0,2,3,3,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,3 + db 3,3,2,1,0,0,3,3,0,0,0,0,0,0,0,3 + db 3,0,3,3,3,3,3,3,3,3,2,1,0,0,3,3 + db 3,3,3,3,3,3,2,1,0,0,0,1,2,3,3,3 + db 3,3,2,1,0,0,3,3,0,0,0,0,0,0,0,3 + db 3,0,3,3,3,1,0,0,0,0,0,3,3,0,3,3 + db 3,3,3,3,3,3,2,1,0,0,0,0,3,3,0,0 + db 3,3,0,0,0,0,0,0,0,0,0,0,1,2,3,3 + db 0,0,3,3,2,1,0,0,0,0,0,0,0,0,0,0 + db 3,3,0,0,3,3,0,0,0,3,3,0,0,0,0,0 + db 1,2,3,3,0,3,3,2,1,0,0,0,1,2,3,3 + db 0,3,3,0,0,0,0,0,0,0,0,0,0,3,3,0 + db 0,0,0,0,1,2,3,3,0,0,0,0,0,1,3,3 + db 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,3,3,2,1,0,0,0,1,2,3,3,0,3 + db 3,2,1,0,0,0,1,2,3,3,0,3,3,0,0,0 + db 0,2,3,3,1,0,0,3,3,0,0,0,0,2,3,3 + db 1,0,0,3,3,2,1,0,0,0,1,2,3,3,0,3 + db 3,2,1,0,0,0,1,2,3,3,0,3,3,0,0,0 + db 0,1,3,3,3,3,0,3,3,0,0,0,0,0,1,2 + db 3,3,0,0,0,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,2,3,1,0,0,0,0,0,0,2,3,3,1,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,1,3 + db 3,0,2,3,3,3,2,0,0,0,0,0,0,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,2,3,3 + db 3,2,0,0,0,3,3,3,0,0,0,0,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 0,2,3,3,3,2,0,0,0,0,0,0,0,3,3,3 + db 0,0,0,0,0,3,3,3,0,0,0,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,3,3,3,0,0,0,0,1 + db 2,3,2,0,0,0,3,3,3,0,0,0,0,0,0,3 + db 3,3,3,2,1,1,2,3,3,2,1,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,3,3,0,0,1,3,3,2,3,2,0,0,3,3,3 + db 0,0,0,0,0,3,3,0,0,0,0,0,1,2,3,3 + db 2,3,3,0,0,0,2,3,3,3,2,0,0,0,0,0 + db 0,2,3,3,3,2,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,0,0,2,3,3,3,0,0,1,1,1,0,0 + db 1,3,3,3,2,0,0,0,3,3,3,0,0,0,0,0 + db 2,3,3,2,0,0,0,0,3,0,0,0,0,0,0,0 + db 0,1,2,3,3,0,0,0,0,0,0,3,3,3,0,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 0,3,3,0,0,0,0,0,0,0,0,0,2,3,3,3 + db 3,2,0,0,0,0,0,0,0,0,0,0,0,0,1,3 + db 3,3,2,3,2,0,2,3,3,2,3,2,0,0,0,0 + db 0,0,0,0,0,0,1,2,3,2,1,2,3,3,2,1 + db 0,0,0,0,1,2,3,3,2,1,0,0,3,3,3,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,3,3,3 + db 0,3,3,3,0,0,0,0,0,0,0,0,0,3,3,3 + db 0,0,0,0,0,0,3,3,3,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,0 + db 0,0,0,0,0,1,3,3,2,1,0,1,2,3,3,1 + db 0,0,0,0,3,3,3,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,3,3,3,3,2,2,3,2,1,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,3,3 + db 3,0,0,0,0,3,3,3,0,0,0,0,3,3,3,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,3,3,3,0 + db 0,0,3,3,3,0,0,0,0,0,3,3,3,0,0,0 + db 3,3,3,0,0,0,0,0,0,3,3,3,0,3,3,3 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,0,0,0,1,2,3,3,3 + db 2,1,0,0,0,3,3,3,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 2,3,3,2,1,2,3,1,0,0,0,0,0,0,0,0 + db 2,3,3,1,0,2,3,1,1,3,3,1,1,2,3,1 + db 0,0,0,0,0,0,0,1,2,3,2,3,2,1,0,0 + db 0,0,0,0,0,0,0,2,3,3,1,0,1,3,2,0 + db 0,0,0,0,0,0,0,1,2,3,2,1,0,0,0,0 + db 0,3,3,3,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,3,3,3,0,0,0,0,1,2,3,2,1,0 + db 0,0,0,0,0,0,0,1,2,3,2,1,0,0,0,0 + db 1,3,3,3,0,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,0,1,2,3,2,1,0,0,0,0,3,3,3 + db 0,0,2,3,3,1,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,2,3,1 + db 0,0,0,0,1,3,3,3,0,0,0,0,0,0,0,0 + db 0,0,0,3,3,2,0,3,3,3,0,0,0,0,0,3 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,3,3,3,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0 + db 0,0,0,3,3,0,0,0,0,0,0,0,0,1,1,2 + db 3,3,3,0,0,3,3,3,2,1,1,0,0,0,0,0 + db 0,0,0,3,3,0,0,3,3,0,0,0,3,3,3,3 + db 3,3,3,3,3,2,1,0,1,2,3,3,3,3,3,3 + db 3,2,1,0,3,3,0,0,0,0,0,0,0,0,0,0 + db 3,3,3,3,3,3,3,3,3,2,1,0,2,3,3,1 + db 0,0,0,0,1,3,3,2,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,1,2,3,3,3,3,3,3,3,2 + db 1,0,3,3,0,0,0,0,0,0,0,3,3,0,3,3 + db 3,3,3,3,3,3,3,2,1,0,3,3,3,3,3,3 + db 3,3,3,2,1,0,1,2,3,3,3,3,3,3,3,2 + db 1,0,3,3,0,0,0,0,0,0,0,3,3,0,3,3 + db 3,1,0,0,0,0,0,3,3,0,3,3,3,3,3,3 + db 3,3,3,2,1,0,0,0,3,3,0,0,3,3,0,0 + db 0,0,0,0,0,0,0,0,1,2,3,3,0,0,3,3 + db 2,1,0,0,0,0,0,0,0,0,0,0,3,3,0,0 + db 3,3,0,0,0,3,3,0,0,0,0,1,2,3,3,2 + db 0,2,3,3,2,1,0,1,2,3,3,2,0,3,3,0 + db 0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,1 + db 2,3,3,2,0,0,0,0,0,1,3,3,1,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2 + db 3,3,2,1,0,1,2,3,3,2,0,2,3,3,2,1 + db 0,1,2,3,3,2,0,3,3,0,0,0,0,1,3,3 + db 2,0,0,3,3,0,0,0,0,1,3,3,2,0,0,2 + db 3,3,2,1,0,1,2,3,3,2,0,2,3,3,2,1 + db 0,1,2,3,3,2,0,3,3,0,0,0,0,1,3,3 + db 3,3,0,3,3,0,0,0,0,1,2,3,3,2,0,0 + db 0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,1,3,2,0 + db 0,0,0,0,0,0,1,3,3,2,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,1,3,2,0,1,3 + db 3,3,3,1,0,0,0,0,0,0,0,1,0,0,0,3 + db 3,3,0,0,0,0,0,0,1,3,3,3,3,1,0,0 + db 0,3,3,3,0,0,0,0,0,0,0,1,3,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,0,1,3,3 + db 3,3,1,0,0,0,0,0,1,3,3,3,0,0,0,0 + db 0,3,3,3,0,0,0,0,0,0,0,3,3,3,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,2,3,3,3,0 + db 0,0,3,3,3,0,0,0,0,0,0,3,3,3,2,1 + db 0,0,1,2,3,3,2,1,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,1,3,0,0,0,3,3,0 + db 0,0,2,3,3,3,1,0,0,3,3,3,0,0,0,0 + db 0,3,3,0,0,0,0,0,0,1,2,3,3,3,3,0 + db 0,0,1,3,3,3,3,1,0,0,0,0,1,3,3,3 + db 3,1,0,0,0,3,3,3,0,0,0,0,0,0,0,0 + db 0,1,3,3,3,1,2,3,3,3,2,0,2,3,3,3 + db 1,0,0,0,3,3,3,0,0,0,0,0,1,3,3,3 + db 0,0,0,0,3,2,0,0,0,0,0,0,0,0,1,3 + db 3,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0 + db 0,0,3,3,3,1,0,0,0,0,0,0,1,3,3,0 + db 0,0,0,0,0,0,0,0,1,3,3,3,3,1,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,2,3,3,3,3 + db 1,0,1,3,3,3,3,1,0,0,0,0,0,0,0,0 + db 0,1,2,3,2,1,0,1,2,3,3,2,1,0,0,0 + db 2,3,3,2,0,0,0,1,3,3,3,0,0,0,0,0 + db 3,3,3,1,0,0,0,0,1,3,3,2,0,2,3,3 + db 1,0,0,0,0,0,0,0,0,2,3,3,1,0,0,0 + db 0,1,3,3,3,0,0,0,2,3,3,1,0,0,0,0 + db 0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0 + db 0,0,2,3,3,3,3,3,3,2,1,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,3,3,3,2,1,1,2,3,2,1,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,3,3,3,0,0,0 + db 0,3,3,3,0,0,0,0,3,3,3,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,3,3,3,0,0,0,3,3 + db 3,0,0,0,0,0,3,3,3,0,0,0,3,3,3,1 + db 0,0,0,0,1,3,3,2,0,2,3,3,1,0,0,0 + db 0,1,3,3,3,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,0,3,0,0,0,0,1,2,3,3,2,0,0 + db 0,3,3,3,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,1,3,3,3,0,0,0,0,0,0,0,1,3,3,3 + db 2,3,2,0,0,0,0,0,0,0,0,0,1,3,3,2 + db 1,3,2,0,0,2,3,2,2,3,2,0,0,0,0,0 + db 0,0,1,2,3,2,1,2,3,2,1,0,0,0,0,0 + db 0,0,0,1,3,3,2,1,2,3,1,0,0,0,0,0 + db 0,0,1,2,3,2,1,0,0,0,0,0,0,2,3,3 + db 1,0,0,0,0,0,0,1,3,3,2,0,0,0,0,3 + db 3,3,0,0,0,0,2,3,2,1,0,0,0,0,0,0 + db 1,3,0,2,3,2,1,0,0,0,0,0,1,3,3,2 + db 0,0,0,0,0,0,0,0,0,3,3,3,0,0,0,0 + db 2,3,2,1,0,0,0,0,1,3,3,3,0,0,1,3 + db 3,1,0,0,0,0,0,1,3,3,2,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,0,3,3,1,0,0,0,0 + db 1,3,3,2,0,1,2,3,2,1,0,0,0,0,1,3 + db 3,1,0,3,3,3,0,0,0,0,0,3,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3 + db 3,0,0,0,0,0,0,0,0,0,1,2,3,3,3,0 + db 0,3,3,3,2,1,0,0,0,0,0,0,0,0,0,3 + db 3,0,0,3,3,0,0,0,3,3,0,0,0,1,2,3 + db 3,3,1,0,1,3,3,3,2,1,2,3,3,3,1,0 + db 3,3,0,0,0,0,0,0,0,0,0,0,3,3,0,0 + db 0,1,2,3,3,3,1,0,1,3,3,1,0,0,0,0 + db 1,3,3,1,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,1,3,3,3,2,1,2,3,3,3,1,0,3,3 + db 0,0,0,0,0,0,0,3,3,0,3,3,0,0,0,1 + db 2,3,3,3,1,0,3,3,0,0,0,1,2,3,3,3 + db 1,0,1,3,3,3,2,1,2,3,3,3,1,0,3,3 + db 0,0,0,0,0,0,0,3,3,0,3,3,3,2,0,0 + db 0,0,0,3,3,0,3,3,0,0,0,1,2,3,3,3 + db 1,0,0,0,3,3,0,0,3,3,0,0,0,0,0,0 + db 0,0,0,0,1,2,3,3,0,0,3,3,2,1,0,0 + db 0,0,0,0,0,0,0,0,3,3,0,0,3,3,0,0 + db 0,3,3,0,0,0,1,2,3,3,3,1,0,1,3,3 + db 3,2,1,2,3,3,3,1,0,3,3,0,0,0,0,0 + db 0,0,0,0,0,3,3,0,0,0,1,2,3,3,3,1 + db 0,0,0,0,0,1,3,3,1,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,1,3,3,3,2 + db 1,2,3,3,3,1,0,1,3,3,3,2,1,2,3,3 + db 3,1,0,3,3,0,0,0,0,0,2,3,3,1,0,3 + db 3,0,0,0,0,0,2,3,3,1,0,1,3,3,3,2 + db 1,2,3,3,3,1,0,1,3,3,3,2,1,2,3,3 + db 3,1,0,3,3,0,0,0,0,0,2,3,3,3,0,3 + db 3,0,0,0,1,2,3,3,3,1,0,0,0,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,1,2,3,1,0,0,0,0,0 + db 0,0,0,2,3,3,1,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,1,2,3,2,0,0,2,3,3,3,2 + db 0,0,0,0,0,1,2,3,0,0,0,3,3,3,0,0 + db 0,0,0,1,2,3,3,3,2,0,0,0,0,3,3,3 + db 0,0,0,0,0,0,1,2,3,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,2,3,3,3,2,0 + db 0,0,0,0,2,3,3,3,0,0,0,0,0,3,3,3 + db 0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,3,3,2,2,0,0,1,3,3 + db 2,0,0,0,0,0,0,3,3,3,1,0,0,0,0,1 + db 2,3,3,2,1,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,1,2,3,0,0,0,3,3,0,0,0,1,3 + db 3,2,0,0,0,3,3,3,0,0,0,0,0,3,3,0 + db 0,0,0,0,0,0,1,2,3,3,3,0,0,0,0,2 + db 3,3,3,2,1,0,0,0,2,3,3,3,2,0,0,0 + db 0,3,3,3,0,0,0,0,0,0,0,0,0,0,2,3 + db 3,2,3,2,1,2,3,1,3,3,3,2,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,3,3,3,1,0,1,0 + db 3,3,2,1,0,0,0,0,0,1,2,3,2,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,0,2,3 + db 3,2,0,0,0,0,0,0,2,3,2,0,0,0,0,0 + db 0,0,0,0,0,2,3,3,2,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,1,3,3,3,2,0,0,0,2 + db 3,3,2,0,0,0,0,0,0,0,0,0,1,2,3,2 + db 1,0,0,0,1,2,3,3,2,1,0,0,2,3,3,1 + db 0,0,0,2,3,3,3,0,1,0,0,0,3,3,3,2 + db 0,0,0,0,2,3,3,1,0,1,3,3,2,0,0,0 + db 0,0,1,1,0,1,3,3,2,1,0,0,1,2,3,3 + db 3,0,0,0,1,3,3,2,1,0,0,0,0,2,3,2 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,1,3,3 + db 3,2,1,0,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,3,3,3,0,0,0,3,3 + db 3,1,0,0,1,2,3,2,1,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,3,3,3,0,0,0,0,3,3,3 + db 0,0,0,0,3,3,3,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,3,3,3,0,0,0,2,3,3,1,0,0 + db 0,1,3,3,2,0,0,0,3,3,3,2,1,0,0,1 + db 2,3,3,1,0,1,3,3,2,1,0,0,1,2,3,3 + db 3,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 3,2,1,0,0,0,0,3,3,2,0,0,0,3,3,3 + db 0,0,1,0,0,0,2,3,3,1,0,0,0,2,3,3 + db 3,0,0,0,0,0,0,0,0,2,3,3,3,3,1,0 + db 0,0,0,0,0,0,0,0,0,2,3,3,3,3,0,0 + db 0,1,3,3,3,3,1,0,0,0,0,0,0,1,2,3 + db 2,1,0,1,2,3,2,1,0,0,0,0,0,0,0,0 + db 2,3,3,2,3,2,0,0,0,0,0,0,0,1,2,3 + db 2,1,0,0,0,0,1,3,0,1,3,3,2,1,0,0 + db 0,0,1,2,3,3,1,0,0,0,0,3,3,3,0,0 + db 0,0,3,3,1,0,0,0,0,0,0,1,2,3,0,2 + db 3,2,1,0,0,0,0,1,2,3,3,1,0,0,0,0 + db 0,0,0,0,0,3,3,3,0,0,0,0,2,3,2,1 + db 0,0,0,0,2,3,3,2,0,0,0,2,3,2,1,0 + db 0,0,0,2,3,3,1,0,0,0,0,3,3,3,0,0 + db 0,0,0,0,0,2,3,2,1,0,0,1,2,3,3,1 + db 0,2,3,2,1,0,0,0,0,1,2,3,2,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0 + db 0,0,0,0,0,0,1,1,2,3,3,0,0,3,3,2 + db 1,1,0,0,0,0,0,0,0,0,0,3,3,0,0,3 + db 3,0,0,0,3,3,0,0,0,0,1,2,3,3,2,0 + db 2,3,3,2,1,0,1,2,3,3,2,0,3,3,0,0 + db 0,0,0,0,0,0,0,0,3,3,0,0,0,0,1,2 + db 3,3,2,0,1,3,3,2,0,0,0,0,2,3,3,1 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3 + db 3,2,1,0,1,2,3,3,2,0,3,3,0,0,0,0 + db 0,0,0,3,3,0,3,3,0,0,0,0,1,2,3,3 + db 2,0,3,3,0,0,0,0,1,2,3,3,2,0,2,3 + db 3,2,1,0,1,2,3,3,2,0,3,3,0,0,0,0 + db 0,0,0,3,3,0,3,3,3,3,1,0,0,0,0,3 + db 3,0,3,3,0,0,0,0,1,2,3,3,2,0,0,0 + db 3,3,0,0,3,3,0,0,0,0,0,0,0,0,0,1 + db 2,3,3,3,0,0,3,3,3,2,1,0,0,0,0,0 + db 0,0,0,0,3,3,0,0,3,3,0,0,0,3,3,3 + db 3,3,3,3,3,3,2,1,0,1,2,3,3,3,3,3 + db 3,3,2,1,0,3,3,3,3,3,3,3,3,3,3,3 + db 0,3,3,3,3,3,3,3,3,3,2,1,0,0,0,0 + db 0,1,3,3,1,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,1,2,3,3,3,3,3,3,3 + db 2,1,0,1,2,3,3,3,3,3,3,3,2,1,0,3 + db 3,0,0,0,0,0,1,3,3,2,0,3,3,0,0,0 + db 0,0,1,3,3,2,0,1,2,3,3,3,3,3,3,3 + db 2,1,0,1,2,3,3,3,3,3,3,3,2,1,0,3 + db 3,0,0,0,0,0,1,3,3,3,0,3,3,3,3,3 + db 3,3,3,3,2,1,0,0,0,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,1,2,3,2,0,0,0,0,0,0,0,0,0,1 + db 3,3,2,1,0,0,0,0,3,3,3,0,0,0,0,0 + db 1,2,3,3,1,0,0,0,2,3,3,3,2,0,0,1 + db 2,3,3,2,0,0,0,3,3,3,0,0,0,0,1,2 + db 3,3,3,2,0,0,0,0,0,3,3,3,0,0,0,0 + db 0,1,2,3,3,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,0,2,3,3,3,2,1,0,1,2 + db 3,3,3,3,0,0,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,2,3,2,1,0,1,2,3,3,1,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,1,2,3,3 + db 2,1,0,0,0,0,3,3,3,0,0,0,0,0,1,2 + db 3,3,0,0,0,3,3,0,0,0,0,2,2,1,0,0 + db 0,3,3,3,0,0,0,0,0,3,3,0,0,0,0,0 + db 0,0,0,1,2,3,3,0,0,0,0,1,2,3,3,3 + db 2,1,1,2,3,3,3,2,1,0,0,0,0,3,3,3 + db 0,0,0,0,0,0,0,0,0,0,0,2,3,3,3,1 + db 0,1,3,3,3,3,2,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,2,3,3,2,1,3,0,3,3,3,3 + db 2,1,0,1,2,3,3,2,1,0,0,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,0,0,1,3,3,3,2,1 + db 0,0,1,2,3,3,1,0,0,0,0,0,0,0,0,0 + db 0,1,2,2,1,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,2,3,3,1,0,0,0,1,2,2,1,0 + db 0,0,0,0,0,0,0,1,2,3,2,1,0,0,0,0 + db 0,1,2,3,3,2,1,0,1,3,3,2,1,1,2,3 + db 2,3,3,2,3,0,0,0,3,3,2,3,2,1,1,2 + db 3,3,1,0,0,0,1,3,3,2,1,0,1,2,3,3 + db 0,0,1,3,3,2,1,1,2,3,2,3,3,0,0,0 + db 0,1,3,3,2,1,0,1,2,3,2,1,0,0,0,3 + db 3,3,0,0,0,0,0,0,0,1,2,3,3,3,3,3 + db 3,3,2,1,0,0,0,0,3,3,3,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,3,3,3,0,0,0 + db 0,1,2,3,2,1,0,0,0,0,3,3,3,0,0,0 + db 0,0,3,3,3,1,0,0,0,3,3,3,1,0,0,0 + db 3,3,3,1,0,0,0,0,3,3,3,0,0,0,0,0 + db 3,3,3,0,0,0,1,3,3,2,1,0,1,2,3,3 + db 1,0,0,0,3,3,3,3,2,1,1,2,3,3,2,0 + db 0,0,2,3,3,2,1,1,2,3,3,3,3,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,3,3,3,2 + db 1,0,2,3,3,1,0,0,0,2,3,3,0,2,3,0 + db 0,0,1,3,3,2,1,1,2,3,2,3,3,0,0,0 + db 0,0,0,0,0,1,3,3,3,2,0,0,0,0,0,0 + db 0,0,0,0,0,1,2,3,3,2,0,0,0,0,1,3 + db 3,2,0,0,0,0,0,0,1,2,3,2,1,0,0,0 + db 1,2,3,2,1,0,0,0,0,0,0,0,1,3,3,3 + db 3,1,0,0,0,0,0,0,1,2,3,2,1,0,0,0 + db 0,1,2,3,0,0,1,3,3,2,1,0,0,1,2,3 + db 3,1,0,0,0,0,0,3,3,3,0,0,0,0,3,3 + db 3,3,3,3,3,3,3,3,3,3,0,1,3,3,2,1 + db 0,0,1,2,3,3,1,0,0,0,0,0,0,0,0,0 + db 0,3,3,3,0,0,0,0,1,3,3,2,1,0,1,2 + db 3,3,2,1,0,0,0,1,2,3,2,1,0,1,2,3 + db 3,1,0,0,0,0,0,3,3,3,0,0,0,0,0,0 + db 0,1,3,3,2,0,1,2,3,3,1,0,0,1,2,3 + db 2,1,0,1,2,3,3,2,1,0,0,3,3,3,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,3,3,3,3 + db 0,3,3,3,0,3,3,3,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,3,3,3,0,0,0,0,0,0,0,0 + db 0,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0 + db 0,0,0,1,2,3,3,0,0,3,3,2,1,0,0,0 + db 0,0,0,0,0,0,0,3,3,0,0,3,3,0,0,0 + db 3,3,0,0,0,0,0,1,2,3,3,0,3,3,2,1 + db 0,0,0,1,2,3,3,0,3,3,0,0,0,0,0,0 + db 0,0,0,0,3,3,0,0,0,0,0,1,2,3,3,0 + db 0,2,3,3,1,0,0,1,3,3,2,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,3,3,2,1,0,0 + db 0,1,2,3,3,0,3,3,0,0,0,0,0,0,0,3 + db 3,0,3,3,0,0,0,0,0,1,2,3,3,0,3,3 + db 0,0,0,0,0,1,2,3,3,0,3,3,2,1,0,0 + db 0,1,2,3,3,0,3,3,0,0,0,0,0,0,0,3 + db 3,0,3,3,3,3,1,0,0,0,0,3,3,0,3,3 + db 0,0,0,0,0,1,2,3,3,0,0,0,3,3,0,0 + db 3,3,0,0,0,0,0,0,0,0,0,1,2,3,3,3 + db 0,0,3,3,3,2,1,0,0,0,0,0,0,0,0,0 + db 3,3,0,0,3,3,0,0,0,3,3,3,3,3,3,3 + db 3,2,1,0,0,0,1,2,3,3,3,3,3,2,1,0 + db 0,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3 + db 3,3,3,3,3,2,1,0,0,0,0,0,0,1,3,3 + db 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,1,2,3,3,3,3,3,2,1,0,0,0 + db 1,2,3,3,3,3,3,2,1,0,0,3,3,0,0,0 + db 0,0,0,2,3,3,0,3,3,0,0,0,0,0,0,2 + db 3,3,0,0,1,2,3,3,3,3,3,2,1,0,0,0 + db 1,2,3,3,3,3,3,2,1,0,0,3,3,0,0,0 + db 0,0,1,3,3,3,0,3,3,3,3,3,3,3,3,2 + db 1,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3 + db 3,3,3,3,0,0,0,0,0,3,3,3,3,3,3,3 + db 3,0,3,3,3,3,3,3,3,3,3,3,3,3,2,1 + db 0,0,0,0,0,1,2,3,3,3,3,3,3,2,1,0 + db 0,3,3,3,3,3,3,3,3,3,3,3,3,2,1,0 + db 0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0 + db 0,0,0,0,1,2,3,3,3,3,3,3,2,1,3,3 + db 0,0,0,3,3,3,3,3,3,3,0,0,0,3,3,3 + db 3,3,3,3,0,3,3,3,3,3,3,3,3,3,0,1 + db 2,3,3,3,3,3,2,1,0,0,0,0,0,3,3,3 + db 3,3,3,3,0,0,0,3,3,3,3,3,3,3,3,0 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3 + db 3,3,3,3,3,0,0,1,1,0,0,3,3,3,3,3 + db 3,3,0,3,3,3,3,3,3,0,0,0,0,0,0,0 + db 1,2,3,0,0,0,0,0,0,1,2,3,3,3,3,3 + db 3,2,1,0,0,0,0,3,3,3,3,3,3,3,0,0 + db 0,0,0,0,0,0,0,0,1,2,3,3,3,3,3,3 + db 2,1,0,0,0,0,3,3,3,3,3,3,3,0,0,0 + db 0,1,2,3,3,3,2,0,3,0,1,2,3,3,3,3 + db 3,2,1,0,0,0,0,0,3,3,3,3,3,3,3,3 + db 3,0,0,0,0,0,0,1,2,3,3,3,3,3,3,3 + db 2,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 1,2,2,0,0,0,0,0,1,1,0,0,0,0,0,0 + db 0,0,0,3,3,3,3,3,0,0,0,0,0,3,3,3 + db 3,3,3,0,0,1,2,3,3,3,3,2,1,2,3,3 + db 2,0,0,0,3,2,0,2,3,3,3,3,2,1,0,0 + db 0,0,0,1,2,3,3,3,3,3,2,1,0,0,0,1 + db 2,3,3,3,3,2,1,2,3,3,3,0,0,0,1,2 + db 3,3,3,3,3,2,1,0,0,3,3,3,3,3,3,3 + db 0,0,0,0,1,2,3,2,1,0,0,0,1,2,3,2 + db 1,0,3,3,3,3,3,3,3,0,0,0,3,3,3,3 + db 3,0,3,3,3,3,3,3,3,0,0,0,0,0,0,0 + db 3,3,3,0,3,3,3,3,3,3,3,0,0,3,3,3 + db 3,3,3,0,3,3,3,3,3,3,3,0,3,3,3,3 + db 3,3,3,0,0,3,3,3,3,0,0,0,3,3,3,3 + db 3,0,3,3,3,3,3,3,3,0,0,0,3,3,3,3 + db 3,0,0,1,2,3,3,3,3,3,2,1,0,0,0,0 + db 3,3,3,2,3,3,3,3,2,1,0,0,0,0,0,1 + db 2,3,3,3,3,2,3,3,3,0,0,0,3,3,3,3 + db 3,3,3,0,0,0,0,0,3,1,2,3,3,3,3,2 + db 1,0,0,0,0,1,2,3,3,3,2,0,0,0,0,1 + db 2,3,3,3,3,2,1,2,3,3,3,0,0,0,0,0 + db 0,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,1,2,2,0,0,0,0,0,0,2,2,1,0,0 + db 0,0,0,0,3,3,3,3,3,0,0,0,3,3,3,3 + db 3,3,0,0,0,0,0,0,0,2,3,3,2,0,0,0 + db 0,0,0,0,2,3,3,3,3,3,3,3,3,3,3,3 + db 0,0,0,1,2,3,3,3,3,3,3,2,1,0,0,0 + db 3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3 + db 3,3,3,3,3,3,0,0,1,2,3,3,3,3,3,3 + db 2,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3 + db 3,3,0,0,0,1,2,3,3,3,3,3,2,1,0,0 + db 0,0,0,0,1,2,3,3,3,3,3,2,1,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,0,1,2 + db 3,3,3,3,2,1,0,0,0,0,1,2,3,3,3,3 + db 3,2,1,0,0,0,0,3,3,3,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,0,0,3,3,0,3,3,3 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,3,3,3,0,0,0,0,0,0,0,0,0,3,3,3 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,1 + db 2,3,3,0,0,3,3,2,1,0,0,0,0,0,0,0 + db 0,0,0,3,3,0,0,3,3,0,0,0,3,3,0,0 + db 0,0,0,0,1,3,3,0,3,3,1,0,0,0,0,0 + db 1,3,3,0,3,3,0,0,0,0,0,0,0,0,0,0 + db 3,3,0,0,0,0,0,0,1,3,3,0,0,1,3,3 + db 1,0,0,1,3,3,1,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,1,0,0,0,0,0,1,3 + db 3,0,3,3,0,0,0,0,0,0,0,3,3,0,3,3 + db 0,0,0,0,0,0,1,3,3,0,3,3,0,0,0,0 + db 0,0,1,3,3,0,3,3,1,0,0,0,0,0,1,3 + db 3,0,3,3,0,0,0,0,0,0,0,3,3,0,3,3 + db 3,3,2,0,0,0,0,3,3,0,3,3,0,0,0,0 + db 0,0,1,3,3,0,0,0,3,3,0,0,3,3,0,0 + db 0,0,0,0,0,0,1,2,3,3,3,3,0,0,3,3 + db 3,3,2,1,0,0,0,0,0,0,0,0,3,3,0,0 + db 3,3,0,0,0,3,3,3,3,3,3,3,2,1,0,0 + db 0,0,0,1,2,3,3,3,2,1,0,0,0,3,3,3 + db 3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3 + db 2,1,0,0,0,0,0,0,0,1,3,3,1,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,1,2,3,3,3,2,1,0,0,0,0,0,1,2,3 + db 3,3,2,1,0,0,0,3,3,0,0,0,0,0,0,1 + db 3,3,0,3,3,0,0,0,0,0,0,1,3,3,0,0 + db 0,1,2,3,3,3,2,1,0,0,0,0,0,1,2,3 + db 3,3,2,1,0,0,0,3,3,0,0,0,0,0,0,2 + db 3,3,0,3,3,3,3,3,3,3,2,1,0,0,0,0 + db 0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,1,2,3,3,0,1,2 + db 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 2,3,3,1,0,0,0,0,0,1,3,3,2,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,3,2,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,1,2,3,3,1,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3 + db 3,0,0,0,0,0,0,0,0,0,0,1,2,3,3,0 + db 0,3,3,2,1,0,0,0,0,0,0,0,0,0,0,3 + db 3,0,0,3,3,0,0,0,3,3,0,0,0,0,0,0 + db 1,3,3,0,3,3,1,0,0,0,0,0,1,3,3,0 + db 3,3,0,0,0,0,0,0,0,0,0,0,3,3,0,0 + db 0,0,0,0,1,3,3,0,0,1,3,3,2,0,0,2 + db 3,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,3,3,1,0,0,0,0,0,1,3,3,0,3,3 + db 0,0,0,0,0,0,0,3,3,0,3,3,0,0,0,0 + db 0,0,1,3,3,0,3,3,0,0,0,0,0,0,1,3 + db 3,0,3,3,1,0,0,0,0,0,1,3,3,0,3,3 + db 0,0,0,0,0,0,0,3,3,0,3,3,2,3,3,1 + db 0,0,0,3,3,0,3,3,0,0,0,0,0,0,1,3 + db 3,0,0,0,3,3,0,0,3,3,0,0,0,0,0,0 + db 0,0,1,2,3,3,3,3,0,0,3,3,3,3,2,1 + db 0,0,0,0,0,0,0,0,3,3,0,0,3,3,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,1,2,3,3,3,3,1,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,2,3,3,1 + db 0,0,0,0,0,1,3,3,2,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,2,3,2,0,0,1,3,3,2,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,3,3,3,2,1 + db 2,3,3,1,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0 + db 0,0,0,0,0,0,0,0,2,3,3,0,0,3,3,2 + db 0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,3 + db 3,0,0,0,3,3,0,0,0,0,0,0,1,3,3,0 + db 3,3,1,0,0,0,0,0,1,3,3,0,3,3,0,0 + db 0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,1 + db 2,3,3,0,0,0,2,3,3,1,1,3,3,2,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 1,0,0,0,0,0,0,3,3,0,3,3,0,0,0,0 + db 0,0,0,3,3,0,3,3,0,0,0,0,0,0,1,3 + db 3,0,3,3,0,0,0,0,0,0,1,3,3,0,3,3 + db 1,0,0,0,0,0,1,3,3,0,3,3,0,0,0,0 + db 0,0,0,3,3,0,3,3,1,3,3,1,0,0,0,3 + db 3,0,3,3,0,0,0,0,0,0,1,3,3,0,0,0 + db 3,3,0,0,3,3,0,0,0,0,0,0,0,1,2,3 + db 3,3,3,3,0,0,3,3,3,3,3,2,1,0,0,0 + db 0,0,0,0,3,3,0,0,3,3,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,1,2,3,2,1,0,0,0 + db 1,2,3,2,1,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3 + db 2,0,1,2,3,3,1,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,2,3,2,1,2,3,3,1,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,3,3,3,0,3,3,3 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0 + db 0,0,0,0,2,3,3,0,0,3,3,2,0,0,0,0 + db 0,0,0,0,0,0,0,3,3,0,0,3,3,0,0,0 + db 3,3,0,0,0,0,0,0,0,3,3,0,3,3,0,0 + db 0,0,0,0,0,3,3,0,3,3,0,0,0,0,0,0 + db 0,0,0,0,3,3,0,0,0,0,1,2,3,3,2,0 + db 0,0,1,3,3,1,1,3,3,1,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,3,3,2,1,0,0 + db 0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,3 + db 3,0,3,3,0,0,0,0,0,1,2,3,3,0,3,3 + db 0,0,0,0,0,1,2,3,3,0,3,3,0,0,0,0 + db 0,0,0,3,3,0,3,3,0,0,0,0,0,0,0,3 + db 3,0,3,3,1,3,3,2,0,0,0,3,3,0,3,3 + db 0,0,0,0,0,0,0,3,3,0,0,0,3,3,0,0 + db 3,3,0,0,0,0,0,0,1,2,3,3,3,3,3,3 + db 0,0,3,3,3,3,3,3,2,1,0,0,0,0,0,0 + db 3,3,0,0,3,3,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,1,2,3,3,3,3,3,3,3,2,1 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,2,3,3,3,3 + db 2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,3,3,3,3,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,2,3,3,3,2,1,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 1,3,3,0,0,3,3,1,0,0,0,0,0,0,0,0 + db 0,0,0,3,3,0,0,3,3,0,0,0,3,3,0,0 + db 0,0,0,0,0,3,3,0,3,3,0,0,0,0,0,0 + db 0,3,3,0,3,3,0,0,0,0,0,0,0,0,0,0 + db 3,3,0,0,0,1,2,3,3,3,1,0,0,0,1,3 + db 3,2,2,3,3,1,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,2,3,3,2,1,1,1,0,0,0 + db 0,0,3,3,0,0,0,0,0,0,0,3,3,0,3,3 + db 0,0,0,0,1,2,3,3,2,0,3,3,0,0,0,0 + db 1,2,3,3,2,0,3,3,0,0,0,0,0,0,0,3 + db 3,0,3,3,0,0,0,0,0,0,0,3,3,0,3,3 + db 0,2,3,3,1,0,0,3,3,0,3,3,0,0,0,0 + db 0,0,0,3,3,0,0,0,3,3,0,0,3,3,0,0 + db 0,0,1,1,2,3,3,3,3,3,3,3,0,0,3,3 + db 3,3,3,3,3,2,1,1,0,0,0,0,3,3,0,0 + db 3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3 + db 3,0,0,0,0,0,0,0,0,0,0,0,1,3,3,0 + db 0,3,3,1,0,0,0,0,0,0,0,0,0,0,0,3 + db 3,0,0,3,3,0,0,0,3,3,0,0,0,0,0,0 + db 0,3,3,0,3,3,0,0,0,0,0,0,0,3,3,0 + db 3,3,0,0,0,0,0,0,0,0,0,0,3,3,3,3 + db 3,3,3,3,3,2,1,0,0,0,0,2,3,3,3,3 + db 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,1,3,3,3,3,2,2,1,1,0,0,0,3,3 + db 0,0,0,0,0,0,0,3,3,0,3,3,0,0,0,1 + db 2,3,3,3,1,0,3,3,0,0,0,1,2,3,3,3 + db 1,0,3,3,0,0,0,0,0,0,0,3,3,0,3,3 + db 0,0,0,0,0,0,0,3,3,0,3,3,0,1,3,3 + db 1,0,0,3,3,0,3,3,0,0,0,0,0,0,0,3 + db 3,0,0,0,3,3,0,0,3,3,0,1,1,1,2,2 + db 3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3 + db 3,3,2,2,1,1,1,0,3,3,0,0,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0 + db 0,0,0,0,0,0,0,0,1,3,3,0,0,3,3,1 + db 0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,3 + db 3,0,0,0,3,3,0,0,0,0,0,0,0,3,3,0 + db 3,3,0,0,0,0,0,0,0,3,3,0,3,3,0,0 + db 0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3 + db 2,1,0,0,0,0,0,1,3,3,3,3,1,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2 + db 3,3,3,3,3,3,2,1,0,0,3,3,0,0,0,0 + db 0,0,0,3,3,0,3,3,3,3,3,3,3,3,3,2 + db 1,0,3,3,3,3,3,3,3,3,3,2,1,0,3,3 + db 0,0,0,0,0,0,0,3,3,0,3,3,0,0,0,0 + db 0,0,0,3,3,0,3,3,0,1,3,3,2,0,0,3 + db 3,0,3,3,0,0,0,0,0,0,0,3,3,0,0,0 + db 3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,0,1,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,1,0,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0 + db 0,0,0,0,1,3,3,0,0,3,3,1,0,0,0,0 + db 0,0,0,0,0,0,0,3,3,0,0,3,3,0,0,0 + db 3,3,0,0,0,0,0,0,0,3,3,0,3,3,0,0 + db 0,0,0,0,0,3,3,0,3,3,0,0,0,0,0,0 + db 0,0,0,0,3,3,3,3,3,3,3,3,3,2,1,0 + db 0,0,0,1,2,3,3,2,1,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,3 + db 3,3,3,2,1,0,3,3,0,0,0,0,0,0,0,3 + db 3,0,3,3,3,3,3,3,3,3,2,1,0,0,3,3 + db 3,3,3,3,3,3,2,1,0,0,3,3,0,0,0,0 + db 0,0,0,3,3,0,3,3,0,0,0,0,0,0,0,3 + db 3,0,3,3,0,0,2,3,3,1,0,3,3,0,3,3 + db 0,0,0,0,0,0,0,3,3,0,0,0,3,3,0,0 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 1,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,0,1,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 1,3,3,0,0,3,3,1,0,0,0,0,0,0,0,0 + db 0,0,0,3,3,0,0,3,3,0,0,0,3,3,0,0 + db 0,0,0,0,0,3,3,0,3,3,0,0,0,0,0,0 + db 0,3,3,0,3,3,0,0,0,0,0,0,0,0,0,0 + db 3,3,0,0,0,1,2,3,3,3,1,0,0,0,0,0 + db 2,3,3,2,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,1,1,2,2,3,3,3,3 + db 1,0,3,3,0,0,0,0,0,0,0,3,3,0,3,3 + db 3,3,3,3,3,2,1,0,0,0,3,3,3,3,3,3 + db 3,2,1,0,0,0,3,3,0,0,0,0,0,0,0,3 + db 3,0,3,3,0,0,0,0,0,0,0,3,3,0,3,3 + db 0,0,1,3,3,1,0,3,3,0,3,3,0,0,0,0 + db 0,0,0,3,3,0,0,0,3,3,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3 + db 3,0,0,0,0,0,0,0,0,0,0,0,1,3,3,0 + db 0,3,3,1,0,0,0,0,0,0,0,0,0,0,0,3 + db 3,0,0,3,3,0,0,0,3,3,0,0,0,0,0,0 + db 0,3,3,0,3,3,0,0,0,0,0,0,0,3,3,0 + db 3,3,0,0,0,0,0,0,0,0,0,0,3,3,0,0 + db 0,0,1,2,3,3,2,0,0,0,0,0,1,3,3,1 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,1,1,1,2,3,3,2,0,3,3 + db 0,0,0,0,0,0,0,3,3,0,3,3,0,1,3,3 + db 2,0,0,0,0,0,3,3,0,1,3,3,2,0,0,0 + db 0,0,3,3,0,0,0,0,0,0,0,3,3,0,3,3 + db 0,0,0,0,0,0,0,3,3,0,3,3,0,0,1,3 + db 3,2,0,3,3,0,3,3,0,0,0,0,0,0,0,3 + db 3,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0 + db 0,0,0,0,0,0,0,0,1,3,3,0,0,3,3,1 + db 0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,3 + db 3,0,0,0,3,3,0,0,0,0,0,0,0,3,3,0 + db 3,3,0,0,0,0,0,0,0,3,3,0,3,3,0,0 + db 0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,1 + db 3,3,3,0,0,0,0,0,1,3,3,1,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,1,2,3,3,0,3,3,0,0,0,0 + db 0,0,0,3,3,0,3,3,0,0,2,3,3,1,0,0 + db 0,0,3,3,0,0,2,3,3,1,0,0,0,0,3,3 + db 0,0,0,0,0,0,0,3,3,0,3,3,0,0,0,0 + db 0,0,0,3,3,0,3,3,0,0,0,2,3,3,1,3 + db 3,0,3,3,0,0,0,0,0,0,0,3,3,0,0,0 + db 3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0 + db 0,0,0,0,2,3,3,0,0,3,3,2,0,0,0,0 + db 0,0,0,0,0,0,0,3,3,0,0,3,3,0,0,0 + db 3,3,0,0,0,0,0,0,1,3,3,0,3,3,1,0 + db 0,0,0,0,1,3,3,0,3,3,0,0,0,0,0,0 + db 0,0,0,0,3,3,0,0,0,0,0,0,2,3,3,0 + db 0,0,0,0,1,3,3,1,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0 + db 0,0,1,3,3,0,3,3,1,0,0,0,0,0,1,3 + db 3,0,3,3,0,0,1,3,3,2,0,0,0,0,3,3 + db 0,0,1,3,3,2,0,0,0,0,3,3,1,0,0,0 + db 0,0,1,3,3,0,3,3,1,0,0,0,0,0,1,3 + db 3,0,3,3,0,0,0,1,3,3,1,3,3,0,3,3 + db 0,0,0,0,0,0,1,3,3,0,0,0,3,3,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 2,3,3,0,0,3,3,2,0,0,0,0,0,0,0,0 + db 0,0,0,3,3,0,0,3,3,0,0,0,3,3,0,0 + db 0,0,0,0,1,3,3,0,3,3,1,0,0,0,0,0 + db 1,3,3,0,3,3,0,0,0,0,0,0,0,0,0,0 + db 3,3,0,0,0,0,0,0,1,3,3,0,0,0,0,0 + db 1,3,3,1,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,1,0,0,0,0,0,1,3 + db 3,0,3,3,1,0,0,0,0,0,1,3,3,0,3,3 + db 0,0,0,2,3,3,1,0,0,0,3,3,0,0,0,2 + db 3,3,1,0,0,0,3,3,1,0,0,0,0,0,1,3 + db 3,0,3,3,1,0,0,0,0,0,1,3,3,0,3,3 + db 0,0,0,1,3,3,2,3,3,0,3,3,0,0,0,0 + db 0,0,1,3,3,0,0,0,3,3,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3 + db 3,0,0,0,0,0,0,0,0,0,0,1,2,3,3,0 + db 0,3,3,2,1,0,0,0,0,0,0,0,0,0,0,3 + db 3,0,0,3,3,0,0,0,3,3,0,0,0,0,0,0 + db 1,3,3,0,3,3,1,0,0,0,0,0,1,3,3,0 + db 3,3,0,0,0,0,0,0,0,0,0,0,3,3,0,0 + db 0,0,0,0,1,3,3,0,0,0,0,0,1,3,3,1 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,3,3,1,0,0,0,0,0,1,3,3,0,3,3 + db 1,0,0,0,0,0,1,3,3,0,3,3,0,0,0,1 + db 3,3,2,0,0,0,3,3,0,0,0,1,3,3,2,0 + db 0,0,3,3,1,0,0,0,0,0,1,3,3,0,3,3 + db 1,0,0,0,0,0,1,3,3,0,3,3,0,0,0,0 + db 2,3,3,3,3,0,3,3,0,0,0,0,0,0,1,3 + db 3,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0 + db 0,0,0,0,0,0,0,1,2,3,3,0,0,3,3,2 + db 1,0,0,0,0,0,0,0,0,0,0,3,3,0,0,3 + db 3,0,0,0,3,3,0,0,0,0,0,1,2,3,3,0 + db 3,3,2,1,0,0,0,1,2,3,3,0,3,3,0,0 + db 0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,1 + db 2,3,3,0,0,0,0,0,1,3,3,1,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 2,1,0,0,0,1,2,3,3,0,3,3,2,1,0,0 + db 0,1,2,3,3,0,3,3,0,0,0,0,2,3,3,1 + db 0,0,3,3,0,0,0,0,2,3,3,1,0,0,3,3 + db 2,1,0,0,0,1,2,3,3,0,3,3,2,1,0,0 + db 0,1,2,3,3,0,3,3,0,0,0,0,1,3,3,3 + db 3,0,3,3,0,0,0,0,0,1,2,3,3,0,0,0 + db 3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0 + db 0,0,0,1,2,3,3,0,0,3,3,2,1,0,0,0 + db 0,0,0,0,0,0,0,3,3,0,0,3,3,0,0,0 + db 3,3,0,0,0,0,1,2,3,3,2,0,2,3,3,2 + db 1,0,1,2,3,3,2,0,3,3,0,0,0,0,0,0 + db 0,0,0,0,3,3,0,0,0,0,1,2,3,3,2,0 + db 0,0,0,0,1,3,3,1,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,2,3,3,2,1,0 + db 1,2,3,3,2,0,2,3,3,2,1,0,1,2,3,3 + db 2,0,3,3,0,0,0,0,1,3,3,2,0,0,3,3 + db 0,0,0,0,1,3,3,2,0,0,2,3,3,2,1,0 + db 1,2,3,3,2,0,2,3,3,2,1,0,1,2,3,3 + db 2,0,3,3,0,0,0,0,1,3,3,3,3,0,3,3 + db 0,0,0,0,1,2,3,3,2,0,0,0,3,3,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,1 + db 2,3,3,0,0,3,3,2,1,0,0,0,0,0,0,0 + db 0,0,0,3,3,0,0,3,3,0,0,0,3,3,0,0 + db 0,1,2,3,3,3,1,0,1,3,3,3,2,1,2,3 + db 3,3,1,0,3,3,0,0,0,0,0,0,0,0,0,0 + db 3,3,0,0,0,1,2,3,3,3,1,0,0,0,0,0 + db 1,3,3,1,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,1,3,3,3,2,1,2,3,3,3 + db 1,0,1,3,3,3,2,1,2,3,3,3,1,0,3,3 + db 0,0,0,0,0,2,3,3,1,0,3,3,0,0,0,0 + db 0,2,3,3,1,0,1,3,3,3,2,1,2,3,3,3 + db 1,0,1,3,3,3,2,1,2,3,3,3,1,0,3,3 + db 0,0,0,0,0,2,3,3,3,0,3,3,0,0,0,1 + db 2,3,3,3,1,0,0,0,3,3,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0 diff --git a/ALKU/FONA.LBM b/ALKU/FONA.LBM new file mode 100644 index 0000000..bf9b566 Binary files /dev/null and b/ALKU/FONA.LBM differ diff --git a/ALKU/FONA.UH b/ALKU/FONA.UH new file mode 100644 index 0000000..adc749b Binary files /dev/null and b/ALKU/FONA.UH differ diff --git a/ALKU/FONA2.LBM b/ALKU/FONA2.LBM new file mode 100644 index 0000000..5bd243d Binary files /dev/null and b/ALKU/FONA2.LBM differ diff --git a/ALKU/HOI.IN0 b/ALKU/HOI.IN0 new file mode 100644 index 0000000..24d049b --- /dev/null +++ b/ALKU/HOI.IN0 @@ -0,0 +1,4097 @@ + + db 252,252,128,2,200,0,0,1,49,0,0,0,0,0,0,0 + db 0,0,0,10,10,10,30,30,30,63,63,63,8,8,10,10 + db 10,12,11,11,14,13,13,16,15,15,18,17,17,20,19,19 + db 22,21,21,24,18,22,29,15,19,26,13,16,23,11,13,20 + db 9,11,17,7,8,14,6,6,11,4,4,8,2,2,6,1 + db 1,3,10,0,8,9,0,8,9,0,8,9,0,8,8,0 + db 8,7,0,8,6,0,8,6,0,7,5,0,7,4,0,7 + db 3,0,6,3,0,6,2,0,6,2,0,5,1,0,5,1 + db 0,5,1,0,4,0,0,4,0,0,4,0,0,3,0,0 + db 3,0,0,3,0,0,3,0,0,3,0,0,3,0,0,3 + db 6,3,6,7,4,7,9,6,9,11,8,11,13,11,13,0 + db 63,0,0,63,0,0,63,0,0,63,0,0,63,0,0,63 + db 0,0,63,0,0,63,0,0,63,0,0,63,0,0,63,0 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63 + db 63,63,63,63,63,63,63,63,63,63,63,63,63,21,21,21 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,3,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,2,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,3,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,3,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,2,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,3,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,3,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,2,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,3,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,3,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,2,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,5,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,2,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,2 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,9,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,2,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,2,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,11,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,3,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,2,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 6,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,3,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,3,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,2,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,1,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,3,47,47,2,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,1,47,47,47,47,47,47,3,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 2,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,2,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,2,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,2,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,5,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,3,2,47,47,47,47,47,47,47,47,47,47,47,47,11 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,3,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,3,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,2,47,47 + db 47,47,47,47,47,9,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 2,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,2,47,47,47,47,47,47,47,47 + db 47,47,47,47,2,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,6,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,6,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,3,47,47,47,47,47,47,47,47,1,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,6,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,9,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,2,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,2,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,3,47,47,47,47,47,47,47,47,47,47,47,47,47,3 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,2,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,4,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,2,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,7,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,11,47,47,47,47,47,47,47,47 + db 2,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,2,47,47,47,9,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,3,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,9,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,4,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,11,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,2,47,47,47,47,47,47,47,2 + db 10,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,3,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,3,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,3,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,9,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,3,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,2,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,10,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,3,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,2,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,2,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,4,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,4,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,8,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,2,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,2,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,2,47,47,47 + db 47,47,47,47,47,47,47,47,47,2,47,47,47,47,47,47 + db 47,47,47,47,47,47,3,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,2,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,3,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,6,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,4,47,47,47,47,47,47,47,47,3,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,1,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,2,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,3,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,10,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,4,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,3,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,3,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,3,47,47 + db 47,47,47,47,47,47,47,4,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,2,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,5,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,10,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,2,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 6,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,3,7,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,1,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,3,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,2,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,10,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,2,47,47,47,47,47,7,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,3,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,2,47,47,47,47,47,47,47,47,47,47 + db 3,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,6,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,1,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,3,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,3,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,8,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,3,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,3,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,5,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,1,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,3,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,11,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 10,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,2,47,47,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,2,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,3 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,2,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,2,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,10,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,3,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,5,47,47,47,47,47,2,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,4,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,3,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,4,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,3,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,2,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,2,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,1,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,1,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,5,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,6,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,1,47,47,47,6,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,2,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,5,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,3 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,2,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,1,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,3,47,47,47,47,1,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,3,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,4,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,9 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,8,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,2,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,3,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,3,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,4 + db 47,47,47,47,47,47,2,47,47,47,47,47,47,47,47,47 + db 47,47,47,3,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,2 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 2,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,3,47,2,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,3,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,1,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,1,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,5,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,5,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,1,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,2,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,8,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,1,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,2,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,2,47,47,47,47,47,47,47,47,47,47,4,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,2,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,2,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,2,47,47,47,47,47 + db 47,47,47,47,47,2,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,4,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,10,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,10,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,2,47,47,47,47,47,47,47,47,47,47,47,47,2 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,3,47,47,47,47,2,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,2,47,47,47,47,47,47,2,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,2,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,3,47,47,47,47,6,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,10,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,1,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 2,47,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,2,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,1,5,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,1,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,2 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,2,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,4,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,2,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,8,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,1,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,1,47,1,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,2,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,2,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,2,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,2 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,7,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 2,47,47,47,47,47,47,47,47,1,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,2,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,6,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,1,10,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,2,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,10,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,1,47,1,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,1,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 3,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,1 + db 47,47,4,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,5,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,5,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,3 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,2,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,10,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 10,47,47,47,47,47,47,47,47,47,47,47,47,47,5,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,9,47,47,47,47,47,6,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,2,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,3,47,47 + db 3,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,1,47,47,47 + db 47,47,47,47,1,47,47,47,47,47,47,2,47,47,47,4 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,1,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,3,2,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,9,47,47,47,47,47,47,47,47,47 + db 2,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,11,47,1,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,2,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,8,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,1,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,2,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,3,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,3,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,1,5,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,3,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,2,47,47,47,47,47,11 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,4,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,3,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,1,1,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,1,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,1,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,1,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,1,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,3,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,10,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,1,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,9,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,7,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 2,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,5,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,3,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,9,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,2,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,3,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,2,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 4,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,5,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,2 + db 2,47,47,47,47,47,2,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,2,47,47,47,47 + db 47,47,47,5,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,5 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,7,47,47,47,47,47 + db 47,8,47,10,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,8,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,2,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,10,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,1,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,2,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,4,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,2,47,47,47,47,47,47,47,3,47 + db 2,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,1,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,4,47,47,47,47,47,2,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,1,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,2,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 3,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,5,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,1,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,7,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,3,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,2,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,2,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,1,47,47,47,47,1,47,47,47,47,47,8 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,2,47,8,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,5,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,3,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,1,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,1,47,1,47,47,2,47,47,47,47,47,47 + db 47,2,47,47,47,47,47,47,47,47,47,47,47,47,3,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,3,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,4,47,47,47,47,47,2,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,2,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 2,47,47,47,4,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 3,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,6 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,2,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,6,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,1,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,5,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,1,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,2,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,4,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,9,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,10,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,2,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,3,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,9,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,3 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,3,1,47,47,47,47,1,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,3,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,1,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 11,47,47,47,1,47,47,47,47,3,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,9,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,1,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,1,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,4 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,1,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,2,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,3,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,47,2,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,8,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,8 + db 47,47,47,3,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,2,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,1,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,2,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,9,47,1,47,47,47,47 + db 47,47,47,2,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,47,47,47,47,47,47,47,47 + db 8,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,5,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,3,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,1,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,3,47,47,2,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,2,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,3,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,9,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,2,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,7,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,47,47,47,47,1,47,47,47 + db 47,47,47,47,47,47,47,1,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,6,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,2,47,47,47,47,47,47,47,47 + db 47,2,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,8,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,2,47,47,47 + db 47,47,47,47,47,47,47,1,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,3,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,6 + db 47,47,47,47,47,47,47,47,47,47,47,47,5,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,4,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,2,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,7,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,2,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,3,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,3,47,47 + db 47,47,47,47,47,47,47,47,47,1,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,2,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,2 + db 47,47,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,1,47,47,47,47 + db 47,47,47,47,47,47,47,5,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,3,47,47,47,47,47,47,47,47,47 + db 3,47,47,47,47,7,47,47,47,47,9,47,47,47,47,47 + db 11,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,2,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,2,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,2,47,47,47,47,47,47,47,1,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,3,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,3,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,2,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,3,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,9,47,47,47,47,47,47,47,47,47,47,2 + db 47,47,47,47,47,47,47,47,47,47,47,3,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,1,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 5,47,47,47,47,47,47,47,47,47,47,1,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,2,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,3,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,6,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,10,2,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,1,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,2,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 11,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,2,47,4,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,8,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,8,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,4,47 + db 47,47,47,47,47,2,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,2,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,1,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,2,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,6,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 2,47,47,47,47,47,47,3,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,3,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,2,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,1,47,47,47 + db 47,47,47,47,47,47,47,1,47,47,47,47,47,47,47,47 + db 47,2,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,9,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,1,47,47,47,47 + db 47,47,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,1,47,47,47,47,2,47,47,47,47,47,47 + db 47,47,47,2,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 2,47,47,47,47,47,47,47,47,47,47,2,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 4,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,1,47,47,47,47,47,47,47,47,3,47,47 + db 47,47,47,5,47,47,2,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 6,47,47,47,47,47,47,47,47,47,47,47,1,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,1,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,1,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,4,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,3,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,2,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,1,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,6,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,4,47 + db 47,47,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,11,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,1,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,1,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,3,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,4,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,1,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,1,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,8 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,3,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,11,47,47,47,47,47,1,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,5,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,2,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,2,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,11,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 2,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,4,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,1,47,47,47,1,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,2,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,2,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,1,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,3,47,47,47,47,47,47 + db 47,47,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,4,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,2,47,47 + db 47,47,47,2,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,11,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,11,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,1,47,1,47,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,1,1,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,1,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,2,47,47,47,47,47,47,47,47,47,47 + db 47,47,11,47,47,47,47,47,47,47,47,47,47,47,2,47 + db 47,47,47,47,47,47,47,47,47,47,2,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,3,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,11,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,3,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,2,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,7,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,1,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,3,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,1,47,47,47,47,47,47 + db 47,47,47,47,47,8,47,47,47,47,47,47,47,47,47,47 + db 1,1,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,2,2,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 6,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,3,47,47,47,47,47 + db 47,3,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,1,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,1,47,2,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,3,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,1,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,2,47,47,47,47,47 + db 47,47,47,47,47,47,2,47,47,47,47,47,47,47,47,47 + db 47,7,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,1,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,3,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,9,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,3,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,2 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,2,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,9,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,3 + db 3,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,2,47,47,47,47,47,47,47 + db 47,47,47,2,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,2,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,2 + db 47,47,47,47,47,47,47,47,2,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,3,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,3,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,9,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,2,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,2,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,2,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 11,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,4,47,47,47,47,47 + db 47,1,47,10,47,47,47,47,7,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,3,47,47,47,47,47,47 + db 47,47,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,4,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,3,47,47,47,47,47,47,47,2,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,1,47,6 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,2 + db 47,47,47,47,47,47,47,47,47,9,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,5,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,2,47,47,47,47,47,47,4,1,10 + db 47,47,47,47,47,47,7,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,2,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,6,47,47,47,47,47,47,2,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,1,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,10,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,1,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,2,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,2,47,2,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,2,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,3,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,2,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,2,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,1,47,47,47,47,47,47 + db 4,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,2,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,4,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 2,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,9,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,2,47,47,47,47 + db 47,1,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,2,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,2,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,3,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,3,47 + db 47,47,47,47,3,47,47,47,47,4,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,2,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,5 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,2,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 4,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,4 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,2,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 2,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,1,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,3,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,5,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,1,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,1,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,1,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,2,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 2,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,4,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,4,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,10,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,3,47 + db 47,47,47,47,47,47,8,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,1,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,7,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,2,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,2,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,2,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,2,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 20,20,21,21,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,4,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,2,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,2,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,10,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,9,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,3,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,2,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,21,21,20,20 + db 19,19,19,19,19,19,20,20,21,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,4,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 2,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,3,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,3,47,47,47,47,47,47,47,47,47 + db 47,47,47,1,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,21,20,20,19,19,19,19,19,19 + db 20,20,20,20,20,19,19,19,19,19,20,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,8,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,4,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,2,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,1,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,2,20,19,19,19,19,19,20,20,20,20,20 + db 21,21,21,21,20,20,19,18,17,18,19,19,21,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,2,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,2 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,5,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,2,47,47,47,47,47,47,47 + db 47,47,47,10,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,21,19,19,18,17,18,19,20,20,21,21,21,21 + db 19,19,19,19,19,19,19,19,18,17,19,20,19,21,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,3,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,3,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,1,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,4,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,4,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,2,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,21,19,20,19,17,18,19,19,19,19,19,19,19,19 + db 19,19,18,17,17,17,18,19,19,18,18,20,20,19,21,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,3,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,1,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,2,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,3,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,2,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,3,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,4,47,47 + db 47,47,47,47,47,47,47,47,47,5,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,8,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 5,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,21,19,20,20,18,18,19,19,18,17,17,17,18,19,19 + db 19,18,18,18,19,18,17,18,19,19,18,20,20,20,19,21 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,3,47,47,47,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,2,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,1,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,11,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,2 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,7,47,47,47,47,47,47,47,47,47,3,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,11 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,5 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 21,19,20,20,20,18,19,19,18,17,18,19,18,18,18,19 + db 19,18,19,19,19,19,18,17,19,20,18,20,20,20,20,19 + db 21,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,8,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,1,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,2,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,1,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,5,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,21 + db 19,20,20,20,20,18,20,19,17,18,19,19,19,19,18,19 + db 19,18,19,19,19,19,19,17,19,20,18,19,20,21,20,20 + db 19,21,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,9,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,1,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,2,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,5,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,2,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,4,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,2 + db 47,47,47,47,47,9,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,1,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,4,4,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,2,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,5,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,21,19 + db 20,20,21,20,19,18,20,19,17,19,19,19,19,19,18,19 + db 19,19,19,18,18,19,19,17,18,20,18,19,20,20,21,20 + db 20,19,20,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,10,47,47,47,47 + db 2,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,3,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,1,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,1,47,47,47 + db 47,47,47,47,47,47,47,2,47,47,47,47,4,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,2 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,2,47,47,47,47,47,3,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,2,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,2,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,20,19,20 + db 20,21,20,20,19,18,20,18,17,19,19,18,18,19,19,19 + db 20,20,20,19,19,18,19,17,17,20,19,19,20,20,20,21 + db 20,19,18,20,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,1,9,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,2,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,4 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,3,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,2,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,20,18,19,20 + db 21,20,20,20,19,19,20,17,17,19,18,19,19,20,20,20 + db 21,21,21,20,20,19,19,18,17,19,18,19,20,21,21,20 + db 20,20,19,18,19,20,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 2,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,2,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,1,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 1,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,2,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,2,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,20,19,18,19,20,20 + db 20,21,21,20,19,18,19,17,18,19,19,20,20,21,21,21 + db 19,19,19,19,19,20,19,18,17,19,18,19,20,20,21,21 + db 20,20,19,18,16,16,18,20,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,7,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,1,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,1,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,1,47,47,47,47 + db 47,47,47,47,47,47,47,47,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,4,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,1 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 2,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,2,47,47,47 + db 47,47,47,47,47,47,47,47,20,18,16,16,18,19,20,20 + db 21,21,20,20,19,18,19,17,18,19,20,19,19,19,19,19 + db 19,19,18,18,19,19,19,18,17,19,19,19,20,20,21,21 + db 21,21,20,19,18,17,16,16,18,19,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,1,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,1,47,47 + db 47,47,47,47,47,47,6,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,4,47 + db 47,47,47,2,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,2,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,4,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,19,18,16,16,17,18,19,20,21,21 + db 21,21,20,20,19,19,19,17,18,19,19,19,18,18,19,19 + db 18,18,19,19,18,18,19,19,18,19,20,20,20,20,20,21 + db 20,20,19,20,19,18,18,17,16,16,18,19,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,10,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,10,47,47,47 + db 47,47,47,47,47,47,47,47,47,1,47,47,47,47,2,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,1,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,9,1,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,9,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,6,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,2,9,47,47,47,47,47,47 + db 2,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,2,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 2,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,2,47 + db 47,47,47,47,47,47,47,47,47,2,47,47,47,47,47,47 + db 47,47,47,47,19,18,16,16,17,18,18,19,20,19,20,20 + db 21,20,20,20,20,20,19,18,19,19,18,18,19,19,18,18 + db 17,17,18,19,19,18,19,19,18,19,20,20,20,21,20,20 + db 20,20,19,18,17,16,16,17,18,17,16,16,18,20,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,2,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,2,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,1,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,4,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,20,18,16,16,17,18,17,16,16,17,18,19,20,20 + db 20,20,21,20,20,20,19,18,19,19,18,19,19,18,17,17 + db 18,17,18,20,19,19,18,19,19,19,20,20,20,21,20,20 + db 20,19,19,19,19,18,17,16,16,17,17,16,16,18,19,20 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,1,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,3,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,5,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,2,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,2,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,2,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 20,19,18,16,16,17,17,16,16,17,18,19,19,19,19,20 + db 20,20,21,20,20,20,19,19,19,18,19,19,20,18,17,18 + db 19,19,19,20,20,19,18,18,19,20,20,20,21,21,21,20 + db 20,19,18,18,19,19,17,17,16,16,16,17,17,16,17,18 + db 18,19,19,20,20,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,6 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,1,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,2,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,5,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,1,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,1,47,47,47 + db 2,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,4,47,47,47,47,47,47,47,47,4,47 + db 4,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,2 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,4,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,47,47,20,20,19,19,18 + db 18,17,16,17,17,16,16,16,17,17,19,19,18,18,19,20 + db 20,21,21,21,20,20,20,19,18,18,19,20,20,19,19,19 + db 20,20,21,21,20,19,18,17,18,19,20,21,21,21,21,20 + db 20,19,19,18,18,19,19,18,18,16,16,16,17,17,16,18 + db 18,18,18,18,18,18,18,19,20,46,47,46,47,46,47,47 + db 46,47,46,47,46,47,47,47,46,46,46,47,46,46,47,47 + db 47,47,46,47,46,47,46,47,47,47,47,46,47,47,47,46 + db 47,46,46,47,46,46,46,47,47,47,46,46,46,3,2,47 + db 47,47,47,47,47,46,46,47,47,47,46,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,47,46,47,46,46,47,47,47 + db 47,47,46,46,47,47,46,47,47,46,46,47,46,47,47,47 + db 46,47,46,47,47,47,47,47,47,47,47,47,46,47,47,46 + db 47,47,47,47,47,47,47,47,46,47,47,47,46,47,46,47 + db 47,47,47,47,46,46,47,46,47,47,4,47,47,47,46,46 + db 46,47,47,47,46,47,47,47,46,47,47,47,47,46,47,47 + db 46,46,47,46,47,46,47,47,47,47,47,46,47,47,47,2 + db 47,47,47,46,46,46,47,47,47,46,47,47,46,47,46,47 + db 47,47,47,47,47,46,47,46,47,46,47,47,46,47,47,47 + db 46,46,47,47,47,47,47,47,47,47,47,46,46,47,47,46 + db 46,47,47,46,47,47,47,47,46,47,47,47,47,46,46,47 + db 46,46,47,47,47,47,47,47,47,47,47,47,47,46,47,47 + db 46,47,47,47,46,46,47,47,47,46,46,46,46,47,46,47 + db 46,47,47,47,47,47,46,47,47,47,47,47,46,47,47,47 + db 46,46,46,47,47,47,46,46,46,47,47,47,46,47,46,47 + db 47,47,47,47,47,47,47,46,47,47,47,47,47,47,47,47 + db 47,47,47,47,47,47,47,47,46,46,47,47,46,47,47,47 + db 47,47,46,47,47,47,47,47,47,47,47,47,47,47,46,47 + db 47,47,47,47,47,47,47,46,47,47,47,47,47,46,46,47 + db 47,47,47,47,46,46,47,47,47,47,47,46,47,47,47,47 + db 46,47,4,46,47,47,47,47,47,47,47,46,47,47,47,47 + db 47,46,47,47,46,47,46,47,46,47,47,47,47,47,46,47 + db 47,47,47,47,47,47,47,46,47,47,47,47,47,47,46,47 + db 47,47,47,47,47,47,47,47,46,47,46,46,46,47,47,47 + db 47,47,47,47,47,47,47,47,46,47,47,46,47,47,47,46 + db 47,47,46,47,47,47,47,46,47,46,47,47,47,46,47,47 + db 47,46,47,47,47,46,46,47,47,47,46,47,46,47,47,47 + db 47,46,47,47,47,47,47,47,47,47,46,47,47,46,47,46 + db 47,47,47,47,47,47,47,47,47,47,47,47,46,47,47,47 + db 47,47,47,47,46,47,47,46,47,46,47,47,46,46,47,47 + db 47,47,47,46,46,47,47,20,19,18,18,18,18,18,18,18 + db 18,16,17,17,16,16,16,18,18,19,19,18,18,19,19,20 + db 20,21,21,21,21,20,19,18,17,18,19,20,21,21,20,20 + db 19,19,19,20,21,20,18,17,19,19,20,20,20,20,21,21 + db 21,20,19,19,19,19,19,19,18,18,17,17,16,18,17,17 + db 18,19,19,18,18,17,17,17,18,18,19,46,46,46,46,46 + db 46,46,46,46,46,47,45,46,46,46,46,46,46,46,46,46 + db 46,46,46,46,46,46,46,47,46,46,46,46,46,46,46,46 + db 46,46,46,46,47,46,46,46,46,46,45,46,46,46,46,2 + db 46,46,46,45,46,46,46,46,45,46,46,45,46,46,46,46 + db 46,46,46,46,46,46,46,46,46,46,46,45,46,46,46,46 + db 46,46,47,46,46,45,46,46,46,46,46,46,46,46,46,46 + db 46,46,46,46,46,46,46,46,45,46,46,46,46,46,46,45 + db 46,46,46,46,46,46,46,46,46,46,46,45,45,46,45,46 + db 46,45,46,46,46,46,46,46,46,46,45,46,46,46,46,46 + db 46,46,46,46,46,45,46,46,46,46,46,46,46,46,46,46 + db 46,46,46,46,46,46,46,46,45,46,46,45,46,46,46,46 + db 46,46,1,46,46,46,46,47,46,46,45,46,46,46,46,46 + db 46,46,46,46,46,46,46,45,45,46,46,45,46,47,46,45 + db 46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46 + db 46,46,46,46,46,46,46,46,46,46,46,45,46,46,46,46 + db 46,46,46,46,46,46,46,46,45,47,46,46,46,47,45,46 + db 46,46,45,46,46,45,46,46,46,46,46,46,46,46,46,46 + db 46,47,46,46,46,46,46,46,46,46,46,46,46,46,46,46 + db 46,46,46,46,46,46,46,47,46,46,46,46,47,46,47,47 + db 47,46,46,46,46,47,46,46,47,46,46,46,46,46,46,46 + db 46,46,46,46,46,46,46,46,46,46,46,47,46,46,46,46 + db 47,46,46,46,46,46,46,46,47,46,46,46,46,46,46,47 + db 46,46,46,47,46,46,46,46,46,46,46,46,46,46,46,46 + db 47,46,46,46,46,46,46,46,46,47,46,46,46,46,2,46 + db 46,46,46,46,47,46,46,46,46,47,46,46,46,46,46,46 + db 46,46,47,47,46,46,46,46,47,46,46,46,46,46,46,47 + db 46,46,46,46,47,46,46,46,46,46,46,46,46,46,47,46 + db 46,46,46,46,46,46,46,47,46,47,47,47,46,46,46,46 + db 47,47,46,46,46,46,46,46,47,46,46,46,46,46,1,46 + db 46,46,46,46,46,47,46,47,46,46,47,46,46,46,46,47 + db 47,47,47,46,46,46,46,46,47,46,46,46,46,46,46,46 + db 47,2,46,47,46,47,46,1,46,46,47,46,46,46,47,46 + db 46,47,47,46,47,46,46,47,46,46,46,46,47,46,46,46 + db 46,46,46,46,46,46,47,47,46,47,46,46,46,46,46,46 + db 46,47,46,46,46,19,18,18,17,17,17,18,18,19,19,18 + db 17,17,18,16,17,17,18,18,19,19,19,19,19,19,20,21 + db 21,21,20,20,20,20,19,19,17,18,20,21,20,19,19,19 + db 19,19,19,19,19,20,18,17,19,20,20,20,20,20,20,20 + db 20,20,20,20,19,17,16,16,16,16,16,16,17,17,16,16 + db 17,19,19,19,19,18,17,16,16,16,17,18,45,45,46,45 + db 45,45,45,45,45,45,46,45,45,46,45,45,45,45,45,45 + db 46,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45 + db 45,45,45,45,45,45,45,46,45,45,45,45,45,45,46,45 + db 46,45,46,45,45,45,45,46,45,46,45,45,45,46,45,46 + db 46,45,45,45,46,45,45,45,45,46,45,45,45,46,45,45 + db 45,45,46,45,46,45,45,45,46,46,46,45,46,46,45,45 + db 45,45,45,45,45,46,46,45,46,45,45,45,45,45,45,46 + db 46,45,45,45,45,46,45,45,46,45,45,45,45,45,45,45 + db 46,45,46,46,46,45,45,45,45,45,46,45,46,46,46,45 + db 45,45,45,45,45,45,45,46,45,45,45,45,45,45,45,45 + db 45,45,46,45,45,45,46,46,45,45,45,45,45,45,46,46 + db 45,45,1,45,45,45,45,46,46,46,45,45,45,45,45,45 + db 45,46,45,45,45,45,45,45,45,45,46,45,45,45,45,45 + db 46,45,45,45,45,45,45,45,46,45,45,45,45,46,46,46 + db 45,46,45,45,45,45,46,45,4,45,45,45,46,46,45,46 + db 46,45,2,45,45,46,46,46,45,45,45,45,45,46,45,45 + db 45,45,46,45,45,45,45,45,45,45,45,45,45,45,45,45 + db 45,45,46,45,46,45,46,46,46,45,45,46,46,45,46,46 + db 46,46,46,46,45,46,45,46,45,46,45,6,45,45,46,46 + db 46,46,45,46,45,45,45,46,45,45,46,45,45,45,46,45 + db 45,45,45,45,46,45,1,45,46,45,46,45,45,45,45,46 + db 45,46,46,46,46,45,45,45,45,45,45,46,45,45,45,46 + db 46,46,46,45,45,46,46,45,46,45,46,46,45,46,46,46 + db 46,45,46,46,46,46,45,46,46,46,45,45,45,45,46,46 + db 45,45,45,46,46,45,45,45,45,46,46,45,45,46,46,45 + db 4,45,46,46,45,46,45,45,45,45,45,45,45,45,45,4 + db 45,46,45,45,46,46,45,4,4,46,46,45,45,46,45,45 + db 45,45,45,46,46,45,45,46,46,45,46,46,46,46,46,46 + db 45,46,45,46,45,46,45,45,45,46,46,46,46,45,46,46 + db 45,46,45,45,46,45,46,45,45,45,45,45,45,45,46,45 + db 45,46,46,45,45,45,46,46,46,45,45,46,45,45,46,46 + db 45,46,45,45,46,46,46,45,46,10,45,2,45,45,45,45 + db 46,45,45,45,45,46,45,45,45,45,45,45,45,45,46,45 + db 45,45,45,45,46,45,45,45,45,45,45,46,45,46,45,45 + db 45,45,46,45,18,17,16,16,16,17,18,19,19,19,19,17 + db 16,16,17,17,16,16,16,16,16,16,17,19,20,20,20,20 + db 20,20,20,20,20,20,20,19,17,18,20,19,19,19,19,19 + db 19,19,19,19,19,20,19,18,19,19,19,20,20,21,20,20 + db 20,19,20,19,20,19,18,18,17,16,16,17,16,16,16,16 + db 17,18,17,18,19,18,17,16,16,15,15,16,18,44,44,45 + db 45,45,44,44,44,44,44,44,44,45,44,44,44,44,44,44 + db 44,45,44,44,44,44,45,44,44,44,44,45,44,44,44,44 + db 45,45,44,45,45,44,44,45,44,45,44,44,1,45,45,44 + db 45,44,44,45,45,45,45,44,44,44,45,45,45,45,45,44 + db 44,44,45,45,44,45,44,44,44,45,44,44,44,44,45,44 + db 45,45,44,44,45,44,45,44,44,45,44,44,45,44,44,45 + db 44,45,44,44,44,45,1,45,45,45,45,44,44,44,44,44 + db 44,44,44,45,45,45,44,44,45,44,44,45,44,45,45,45 + db 44,44,44,44,44,44,45,45,44,45,45,45,44,45,45,45 + db 45,44,44,45,44,45,45,44,45,44,45,44,44,45,45,44 + db 44,45,45,44,44,45,44,44,44,44,45,45,44,45,44,44 + db 44,44,45,44,45,45,44,45,45,44,44,44,44,44,44,45 + db 44,45,44,44,45,44,44,44,44,45,45,44,44,44,44,45 + db 44,45,45,44,44,44,44,45,45,44,44,45,45,44,44,44 + db 44,45,45,45,44,45,45,44,44,44,44,45,44,45,44,44 + db 44,45,44,44,45,45,45,44,45,45,44,44,44,44,44,45 + db 44,45,45,45,44,44,44,45,44,45,45,45,44,44,45,44 + db 45,44,44,45,44,45,44,44,44,45,45,44,45,45,44,45 + db 45,44,44,45,44,45,45,45,45,45,45,45,45,44,45,45 + db 45,45,45,45,45,44,44,45,45,45,45,45,44,45,44,44 + db 44,44,44,45,45,45,45,45,45,45,45,45,45,45,44,45 + db 45,45,45,45,44,45,45,44,45,45,45,45,45,45,45,45 + db 45,45,45,45,45,45,44,44,45,45,45,44,45,45,45,45 + db 44,44,44,45,44,45,45,44,45,44,44,44,45,44,45,45 + db 45,45,45,45,45,45,45,45,45,45,45,44,45,44,45,45 + db 45,45,45,44,45,45,45,45,44,45,45,45,45,45,45,45 + db 45,45,44,45,45,45,45,45,45,44,45,45,44,45,44,45 + db 44,45,44,44,44,45,45,45,45,45,45,45,45,45,44,45 + db 45,45,45,45,45,45,45,45,44,45,44,45,45,44,44,45 + db 45,45,45,45,45,44,45,45,45,45,44,44,45,45,44,45 + db 45,45,45,44,45,45,45,44,44,44,45,45,45,45,44,45 + db 44,45,45,44,45,45,45,45,45,45,45,44,44,45,45,45 + db 45,45,45,44,45,45,45,45,45,45,45,45,45,45,44,45 + db 45,44,44,44,45,45,45,44,45,45,45,45,45,45,45,45 + db 45,45,44,18,16,15,15,16,16,17,18,19,18,17,18,17 + db 16,16,16,16,17,16,16,17,18,18,19,20,19,20,19,20 + db 20,20,21,20,20,19,19,19,18,19,20,19,19,19,19,19 + db 20,20,20,20,19,20,20,19,19,19,19,20,21,21,21,20 + db 20,19,19,19,19,19,19,19,19,18,18,18,19,19,19,18 + db 18,18,18,16,16,17,17,17,16,16,15,15,16,18,44,44 + db 43,43,44,44,43,43,44,44,44,44,43,44,43,44,44,44 + db 43,43,44,43,44,44,43,43,43,44,43,44,43,44,44,43 + db 43,44,44,44,44,44,44,44,44,44,44,44,44,44,44,43 + db 44,44,43,44,43,44,43,44,44,44,44,43,44,43,44,44 + db 43,44,44,44,43,43,43,44,43,43,43,43,44,43,44,44 + db 43,44,44,43,44,44,44,44,43,44,44,44,44,43,44,44 + db 44,44,44,43,43,44,44,44,44,44,44,44,44,44,44,43 + db 44,44,44,43,44,44,44,44,44,43,43,44,43,44,43,43 + db 44,43,44,44,43,44,43,43,44,43,43,44,44,44,44,43 + db 44,43,44,44,44,44,43,44,44,44,43,44,44,43,44,44 + db 44,43,44,43,44,43,44,43,43,44,43,44,43,44,44,44 + db 44,44,44,43,44,43,43,44,44,44,44,43,44,44,43,43 + db 44,43,43,44,44,44,44,43,44,43,44,44,43,43,44,43 + db 43,44,44,43,43,43,44,43,44,44,44,44,43,44,43,44 + db 43,44,44,43,44,44,44,43,44,44,44,1,44,44,44,43 + db 43,44,43,44,44,44,44,44,44,43,43,44,44,43,44,44 + db 43,44,44,43,44,43,43,44,43,43,44,44,44,44,44,44 + db 44,44,44,45,5,44,45,44,44,44,44,44,44,44,45,44 + db 44,44,44,44,44,44,44,44,44,44,44,45,44,44,44,44 + db 44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,45 + db 44,44,44,44,44,44,44,44,44,44,45,45,44,44,44,44 + db 44,45,44,44,45,45,44,44,44,44,44,44,44,44,45,44 + db 44,44,44,4,44,44,44,44,44,45,44,44,44,44,44,44 + db 44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44 + db 44,44,44,44,44,44,44,44,44,44,45,44,44,44,44,44 + db 44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,45 + db 6,44,44,44,44,44,44,44,44,44,45,45,44,44,45,44 + db 44,44,44,45,44,44,44,44,45,44,44,44,44,44,44,44 + db 44,45,44,44,44,44,44,44,44,44,44,44,44,44,44,5 + db 45,44,44,44,44,44,45,44,44,44,44,44,44,45,44,45 + db 44,45,44,44,45,44,44,44,44,44,45,45,44,44,44,44 + db 4,44,44,44,45,44,44,44,44,44,45,44,44,44,44,44 + db 44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44 + db 44,2,45,44,44,44,45,44,44,44,44,44,44,44,44,44 + db 44,44,18,16,15,15,16,16,17,17,17,16,16,18,18,18 + db 18,19,19,19,18,18,18,19,19,19,19,19,19,19,19,20 + db 20,21,21,21,20,19,19,19,19,20,20,19,20,20,20,20 + db 19,20,20,20,20,20,19,20,20,20,20,20,21,21,21,21 + db 20,19,19,18,18,18,17,17,17,16,16,16,16,17,17,16 + db 17,17,19,18,17,16,16,15,15,15,16,15,15,16,18,43 + db 43,43,43,42,42,43,43,42,43,43,43,43,43,43,43,42 + db 43,43,43,43,43,43,43,43,43,43,42,43,43,43,43,43 + db 43,42,43,43,42,43,43,43,43,43,43,43,43,43,43,43 + db 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43 + db 43,43,43,43,43,43,42,43,43,43,43,43,43,43,42,43 + db 43,43,43,42,43,42,43,43,43,43,43,42,48,43,43,42 + db 43,42,42,43,42,43,43,43,43,43,43,43,43,43,43,43 + db 43,43,43,43,42,43,43,43,43,43,42,43,43,43,43,43 + db 43,43,43,43,43,43,42,42,43,43,43,43,42,43,43,43 + db 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43 + db 43,42,43,43,43,43,43,43,43,43,43,43,43,43,43,43 + db 43,43,43,42,42,43,42,42,43,43,43,43,43,43,43,43 + db 43,43,43,43,43,43,43,42,43,43,43,42,42,43,43,42 + db 43,43,43,43,43,43,43,43,43,42,43,43,43,42,43,43 + db 43,42,43,43,43,43,43,43,42,43,43,42,43,43,43,43 + db 42,43,43,43,43,42,42,43,43,43,43,42,43,43,43,43 + db 43,42,42,42,42,43,43,43,43,43,43,43,43,43,43,42 + db 43,43,43,43,43,43,43,44,43,43,43,43,44,43,43,44 + db 43,44,44,43,43,43,43,43,44,44,43,43,44,43,44,43 + db 44,44,44,43,43,43,43,44,43,44,43,43,43,44,43,43 + db 44,44,43,44,44,44,43,44,43,43,44,43,44,43,43,44 + db 43,43,43,43,44,44,43,6,43,43,43,43,44,43,43,43 + db 43,44,43,44,43,44,43,44,44,43,43,43,44,44,43,43 + db 43,44,44,44,43,43,43,43,43,44,43,43,44,43,43,44 + db 44,43,44,43,43,44,43,43,44,44,44,43,44,43,44,44 + db 43,43,44,43,44,43,43,43,43,43,44,44,43,43,44,43 + db 43,43,43,43,43,43,43,43,43,43,44,43,43,44,44,43 + db 44,43,44,43,43,43,43,9,43,43,43,43,43,43,43,43 + db 43,44,43,44,43,44,43,43,44,43,43,43,43,43,43,43 + db 44,43,43,44,43,43,44,43,43,44,43,43,43,44,43,43 + db 43,44,43,43,44,44,44,43,44,43,44,43,44,43,44,43 + db 43,44,43,44,43,43,44,44,43,44,44,43,44,44,44,43 + db 44,44,43,43,44,44,44,43,44,44,44,43,44,43,43,44 + db 43,43,44,43,43,43,43,43,44,43,43,43,44,43,44,43 + db 43,18,16,15,15,16,15,15,15,16,16,17,18,19,17,17 + db 16,17,17,16,16,16,16,17,17,17,18,18,18,19,19,20 + db 21,21,21,21,20,20,20,20,20,19,20,20,20,20,20,19 + db 19,19,18,18,18,19,20,19,20,19,19,20,20,20,21,21 + db 20,20,19,19,19,19,19,18,18,18,17,17,16,16,16,16 + db 16,17,19,19,19,19,18,18,17,17,16,16,16,15,17,20 + db 43,43,42,42,42,43,42,42,42,42,43,42,42,43,42,42 + db 42,43,42,42,43,42,43,42,42,43,43,42,42,42,42,42 + db 42,42,42,43,42,42,42,42,42,42,43,43,42,43,43,42 + db 42,42,42,42,42,43,42,42,42,42,42,42,42,42,42,43 + db 42,43,43,42,42,42,42,42,42,42,42,42,42,42,42,42 + db 42,42,42,42,43,42,42,42,43,42,42,42,42,42,43,42 + db 42,42,42,42,42,43,42,43,42,42,42,48,42,43,42,42 + db 42,42,42,42,42,42,42,42,43,42,42,43,42,42,42,42 + db 42,42,42,42,42,42,42,42,42,42,43,43,42,42,42,42 + db 42,42,42,42,42,43,42,42,42,42,42,43,42,42,43,42 + db 42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,43 + db 42,42,42,43,43,42,42,42,42,42,42,42,42,42,43,42 + db 42,43,42,42,43,42,43,42,43,43,42,43,42,42,43,43 + db 42,42,42,42,42,42,42,42,42,42,42,42,43,42,42,42 + db 42,42,42,43,1,42,42,42,43,43,43,42,42,42,2,42 + db 42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42 + db 42,42,42,42,42,42,42,42,42,42,42,42,43,42,42,42 + db 42,43,43,9,43,1,43,43,43,43,43,42,43,42,42,43 + db 42,43,43,43,43,43,42,43,43,43,43,43,42,43,42,43 + db 43,43,43,42,42,43,42,43,42,43,43,43,43,42,43,43 + db 48,42,42,43,43,43,42,43,42,43,42,43,43,43,43,43 + db 43,43,43,43,43,42,43,42,43,42,42,43,42,42,43,42 + db 43,43,43,43,42,42,43,42,43,42,42,43,43,43,43,43 + db 43,43,43,43,43,42,43,42,43,42,42,42,43,43,42,43 + db 43,43,43,43,43,43,42,43,42,43,43,43,43,42,43,43 + db 43,43,43,43,42,43,42,42,43,42,43,43,43,42,42,43 + db 42,43,43,43,42,43,43,43,42,42,43,43,42,43,42,43 + db 43,42,43,42,43,43,43,43,42,43,42,43,42,42,43,43 + db 42,42,43,42,42,42,42,43,43,42,43,43,43,42,43,43 + db 43,42,43,43,43,43,42,43,42,42,42,43,43,43,43,43 + db 42,43,43,43,43,43,43,42,43,43,43,42,42,43,42,43 + db 43,42,42,42,42,43,43,43,42,43,42,42,43,42,43,43 + db 43,42,43,43,42,43,43,43,42,42,43,42,43,42,42,43 + db 42,43,43,43,43,43,43,42,43,43,42,43,43,42,43,43 + db 20,17,15,16,16,16,17,17,18,18,19,19,19,19,17,16 + db 16,16,16,16,17,17,18,18,18,19,19,19,19,19,20,20 + db 21,21,20,20,20,19,19,20,19,20,19,18,18,18,19,19 + db 20,19,19,19,18,17,19,20,19,19,19,19,19,20,20,20 + db 20,19,19,18,19,19,19,19,19,19,18,18,17,16,16,16 + db 16,16,18,19,16,16,17,17,18,18,17,17,16,16,16,19 + db 42,41,41,41,41,41,41,41,42,42,42,42,41,41,41,42 + db 41,41,41,41,42,42,42,41,42,42,41,42,42,41,41,42 + db 41,42,41,41,42,42,41,42,42,41,42,41,41,42,41,41 + db 42,42,41,42,41,41,41,41,41,42,41,41,41,41,41,42 + db 42,41,41,41,41,49,41,41,41,41,41,41,42,42,41,41 + db 41,41,41,42,41,41,41,42,41,41,41,42,41,42,41,41 + db 41,41,41,41,42,41,42,41,41,48,41,42,41,42,41,42 + db 42,41,41,42,42,41,41,41,41,41,41,42,41,41,41,42 + db 41,41,42,42,42,41,42,41,41,41,41,41,42,41,41,41 + db 41,42,42,41,41,42,41,42,42,42,41,41,41,42,42,41 + db 41,41,41,41,42,41,42,42,41,42,41,41,41,41,41,41 + db 41,42,42,42,42,41,42,41,41,41,42,41,41,42,41,41 + db 41,42,41,41,41,41,42,41,41,42,42,42,41,42,41,41 + db 41,41,41,42,41,42,41,2,41,41,41,41,41,41,42,41 + db 41,42,41,42,41,2,42,41,41,41,42,41,41,42,41,41 + db 41,41,41,41,41,42,41,42,42,41,41,41,41,42,41,41 + db 41,41,42,41,2,42,42,41,42,41,41,41,41,41,42,42 + db 42,42,42,43,41,42,43,42,42,42,42,42,42,42,42,42 + db 42,42,42,42,42,42,42,42,42,42,43,42,42,42,42,42 + db 42,42,42,41,42,43,42,42,42,42,43,42,42,42,42,42 + db 0,42,42,42,42,43,42,42,42,42,42,42,43,42,42,42 + db 42,42,42,42,43,42,42,42,42,42,42,42,42,43,42,43 + db 42,42,43,42,42,42,42,42,42,42,42,42,42,42,42,41 + db 42,42,42,42,42,42,42,42,42,42,43,42,42,42,42,42 + db 42,42,42,41,42,42,42,42,42,42,42,42,42,42,42,42 + db 42,42,43,41,42,42,42,42,42,42,42,42,42,42,42,42 + db 42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42 + db 43,42,42,43,41,42,42,42,42,42,42,43,42,42,42,42 + db 42,42,42,42,42,41,42,42,42,42,42,42,42,42,41,43 + db 42,42,42,42,43,42,42,41,42,42,42,42,8,42,42,42 + db 42,42,42,42,42,43,42,42,42,42,43,42,42,42,42,42 + db 42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42 + db 42,42,42,42,42,42,42,42,42,42,42,42,42,42,43,42 + db 42,42,42,42,42,42,42,42,43,42,43,42,42,43,42,42 + db 19,16,16,16,17,17,18,18,17,17,16,16,19,18,16,16 + db 16,16,16,17,18,18,19,19,19,19,19,19,18,19,19,20 + db 20,20,20,19,19,19,19,19,20,19,17,18,19,19,19,20 + db 20,20,20,19,19,18,18,19,20,19,19,20,20,20,20,19 + db 19,18,18,18,18,19,19,20,20,19,19,19,18,18,17,17 + db 16,16,17,18,18,17,16,16,15,15,15,16,17,17,16,18 + db 20,40,41,40,41,41,40,41,41,40,40,41,40,41,40,40 + db 41,40,41,41,40,52,40,41,41,41,40,40,40,40,41,41 + db 40,41,52,40,41,41,41,40,40,41,41,41,41,40,40,41 + db 40,41,40,41,40,41,41,41,41,50,40,40,41,41,41,41 + db 41,41,49,40,41,40,41,41,41,40,40,41,41,41,40,41 + db 41,41,40,41,41,41,41,40,40,41,41,40,41,40,41,41 + db 40,41,40,40,40,40,40,40,40,40,41,40,41,41,40,41 + db 41,41,41,41,41,41,41,40,40,40,41,41,40,40,40,40 + db 40,41,41,41,41,41,41,41,41,40,40,40,41,41,40,41 + db 41,40,40,40,41,41,41,41,41,48,41,41,41,41,41,40 + db 41,40,41,41,41,40,41,40,41,41,40,41,40,40,41,40 + db 41,41,40,41,41,40,40,41,40,41,41,41,41,41,41,41 + db 41,40,40,41,41,41,40,4,40,41,41,40,40,41,40,41 + db 40,40,40,41,40,41,40,41,40,41,40,41,41,41,40,41 + db 40,40,40,40,40,41,41,41,41,41,41,40,41,41,40,41 + db 41,40,40,41,40,41,41,41,41,41,41,41,40,40,41,41 + db 40,41,41,40,41,41,41,41,41,41,40,40,40,41,40,41 + db 41,42,42,42,41,42,41,41,41,41,41,41,41,41,41,41 + db 41,41,42,42,41,41,42,42,42,41,41,42,41,42,42,41 + db 42,41,41,41,41,42,41,41,41,42,41,41,41,41,41,41 + db 48,42,41,41,42,41,41,41,42,41,42,41,41,41,42,42 + db 42,41,41,42,41,41,42,41,41,42,41,41,41,42,41,42 + db 41,41,41,41,41,42,41,41,41,42,41,41,41,41,41,41 + db 41,42,41,42,42,41,41,41,41,41,41,41,41,41,42,41 + db 41,42,41,41,41,41,42,41,41,41,41,41,41,42,41,42 + db 41,42,41,42,42,41,42,42,42,41,41,42,42,42,41,41 + db 41,41,42,42,42,41,41,41,41,41,42,41,41,41,42,42 + db 4,41,41,41,42,41,41,41,41,41,41,41,42,42,41,42 + db 41,42,42,41,42,42,41,41,41,42,41,41,41,41,41,41 + db 41,41,42,41,42,42,42,42,41,41,41,41,41,42,41,41 + db 41,41,42,42,42,41,41,41,41,41,41,41,41,42,41,41 + db 41,41,42,42,42,41,48,42,41,41,41,41,42,41,41,41 + db 41,41,41,42,41,41,48,41,41,41,41,41,41,42,41,41 + db 41,42,42,41,41,42,41,41,41,41,41,41,42,42,42,20 + db 18,16,17,17,16,15,15,15,16,16,17,18,18,17,16,16 + db 17,17,18,18,19,19,19,20,20,19,19,18,18,18,18,19 + db 19,20,20,20,20,19,19,20,19,18,18,19,19,20,20,20 + db 19,19,19,19,19,19,19,20,20,20,20,20,21,20,20,20 + db 19,19,19,20,20,20,19,19,19,18,18,17,17,16,15,15 + db 15,15,16,17,18,18,18,17,17,16,16,15,15,16,17,16 + db 18,40,40,40,40,40,40,40,39,39,40,39,40,39,39,40 + db 52,40,40,40,40,40,40,39,40,40,39,40,39,40,39,40 + db 40,40,39,39,39,40,40,40,39,40,39,39,40,40,40,39 + db 40,39,40,40,40,40,40,40,40,40,40,40,39,39,39,39 + db 40,40,40,40,39,40,40,40,40,40,39,40,40,40,40,40 + db 40,40,40,40,40,40,40,40,40,39,40,40,40,40,40,40 + db 40,40,40,39,40,40,39,40,40,40,40,40,40,40,40,40 + db 40,40,40,40,40,40,39,40,40,40,40,39,40,40,40,40 + db 40,40,40,40,39,40,39,40,40,40,40,40,40,40,40,40 + db 40,39,40,40,39,40,40,40,40,40,40,40,40,40,40,39 + db 39,40,40,39,40,40,40,39,39,40,40,40,40,40,40,40 + db 40,39,40,40,39,40,40,40,40,40,39,40,40,39,40,40 + db 40,39,40,40,40,40,39,40,39,40,40,40,40,40,40,40 + db 40,40,40,40,40,40,39,40,40,40,40,40,39,39,40,39 + db 40,40,39,40,40,40,40,40,40,40,40,40,40,40,40,39 + db 40,40,40,40,40,40,39,39,40,39,40,39,40,40,39,40 + db 40,39,40,40,40,40,40,40,40,39,40,40,40,40,40,40 + db 40,40,41,41,41,40,41,40,41,41,41,41,41,40,41,41 + db 40,41,41,41,41,40,40,40,41,40,41,40,41,41,40,40 + db 41,40,40,40,40,41,41,40,40,41,41,41,40,41,41,40 + db 40,41,41,41,41,41,41,40,40,41,40,41,41,41,41,41 + db 41,40,41,40,41,40,40,41,40,41,40,41,41,40,40,41 + db 41,40,41,41,41,41,41,48,40,41,41,41,40,41,41,41 + db 41,41,41,41,41,41,41,41,41,41,40,41,40,41,41,41 + db 40,41,40,40,41,41,41,40,41,40,40,41,41,41,41,40 + db 41,41,41,41,41,40,40,40,41,40,40,41,40,41,40,41 + db 40,41,41,40,41,40,41,40,41,41,41,41,41,41,40,41 + db 41,41,40,40,41,40,40,41,41,41,41,41,41,41,41,41 + db 41,41,40,40,40,41,41,40,40,41,40,41,41,41,41,40 + db 40,41,40,40,40,40,41,40,41,41,40,41,41,41,41,40 + db 41,41,41,41,40,41,41,41,41,41,41,41,41,40,40,41 + db 40,41,41,41,41,40,41,41,41,40,41,41,41,40,41,40 + db 41,41,41,40,40,40,41,40,41,41,41,40,40,41,40,40 + db 40,41,41,40,41,40,41,40,41,41,41,40,41,41,41,18 + db 16,17,16,15,15,16,16,17,17,18,18,18,17,16,15,15 + db 15,15,16,17,17,18,18,19,19,19,20,20,20,19,19,19 + db 20,20,20,21,20,20,20,20,20,19,19,19,19,19,19,19 + db 20,20,20,20,20,20,20,20,19,19,19,20,20,21,21,20 + db 20,20,19,19,18,18,17,17,16,16,15,15,15,14,14,13 + db 13,14,14,15,16,17,18,18,18,18,17,17,16,15,16,16 + db 17,39,40,39,39,39,39,39,39,40,39,39,39,39,39,39 + db 39,39,39,39,39,40,39,39,39,39,39,39,39,39,39,39 + db 39,39,39,39,40,39,39,40,39,39,39,40,39,39,40,39 + db 39,39,39,40,39,40,39,39,39,39,39,52,39,39,39,39 + db 39,40,39,39,39,40,39,39,39,39,39,40,40,39,39,39 + db 39,39,39,40,39,39,39,39,39,39,39,39,39,39,39,39 + db 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39 + db 39,39,39,39,39,39,39,39,40,39,39,39,39,39,39,39 + db 48,39,39,39,39,39,39,39,39,39,39,39,39,39,39,40 + db 40,39,39,39,39,39,39,40,39,39,39,40,39,39,40,39 + db 39,39,39,39,39,40,39,39,39,40,39,39,39,39,39,39 + db 39,39,39,39,39,39,39,39,39,39,39,40,39,39,39,39 + db 39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39 + db 39,39,40,39,39,39,39,39,39,39,39,39,39,39,39,39 + db 39,39,40,40,39,51,39,40,39,39,39,39,39,39,39,40 + db 40,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39 + db 39,39,39,40,39,39,39,39,39,39,39,39,39,40,39,39 + db 40,40,40,40,40,40,40,40,40,40,40,40,40,40,39,40 + db 39,40,40,40,40,39,40,40,40,40,40,40,40,40,40,40 + db 40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,41 + db 40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40 + db 40,40,39,40,40,40,40,40,40,40,40,40,40,40,40,40 + db 41,40,40,40,40,40,40,40,40,41,40,40,40,40,39,40 + db 48,40,40,40,40,40,39,40,40,40,40,40,40,40,40,40 + db 40,40,40,41,40,40,40,40,40,40,40,40,40,40,40,40 + db 39,40,40,40,40,40,40,39,40,40,40,40,40,39,40,40 + db 40,40,40,40,40,40,40,40,40,40,40,39,40,40,40,40 + db 40,40,40,40,40,40,40,40,40,40,40,39,40,40,40,40 + db 40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40 + db 40,40,40,40,40,40,39,40,40,40,40,40,40,40,40,40 + db 40,40,40,40,40,40,40,40,40,40,40,40,40,39,40,40 + db 40,40,40,40,40,40,40,40,40,40,40,40,40,40,48,40 + db 40,40,40,40,40,40,39,40,40,40,41,40,40,40,40,40 + db 40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,17 + db 16,16,15,16,17,17,18,18,18,18,17,16,15,14,14,13 + db 13,14,14,15,15,15,16,16,17,17,18,18,19,19,20,20 + db 20,21,21,20,20,19,19,19,20,20,20,20,20,20,20,20 + db 19,19,19,19,19,19,19,19,19,19,19,20,20,21,21,21 + db 20,20,20,19,19,19,19,19,19,19,19,19,18,18,18,17 + db 16,16,16,16,15,15,16,17,17,16,16,16,17,16,16,16 + db 16,19,39,39,38,39,38,38,39,39,39,39,38,38,38,38 + db 38,38,39,38,38,39,38,39,38,38,39,38,39,38,38,38 + db 39,39,39,38,38,38,39,38,38,39,38,38,39,38,38,39 + db 39,39,39,38,39,38,39,38,38,38,39,38,38,39,38,49 + db 38,39,38,38,38,39,39,39,39,38,38,38,39,38,38,38 + db 38,38,38,38,38,38,39,38,38,38,39,38,38,39,38,39 + db 38,38,38,38,38,39,38,38,39,38,38,39,38,38,39,39 + db 38,38,38,38,38,38,38,38,38,39,38,38,39,38,39,38 + db 38,38,38,39,38,38,38,38,38,38,38,39,39,38,39,38 + db 38,39,38,38,38,38,38,48,39,38,38,38,38,39,39,38 + db 38,38,39,38,38,38,38,39,38,38,38,38,38,39,38,38 + db 38,39,39,38,39,38,39,38,38,38,38,38,38,38,38,38 + db 38,39,39,38,38,38,39,38,39,38,38,38,38,38,38,38 + db 38,38,39,39,38,38,38,38,38,39,38,38,38,38,38,39 + db 38,38,38,39,38,38,38,38,38,38,38,38,38,38,39,39 + db 38,38,38,38,38,39,39,48,38,39,38,39,38,39,38,38 + db 38,39,38,38,38,39,39,38,38,39,38,38,38,38,38,38 + db 39,40,40,40,39,39,39,40,39,40,39,39,39,39,40,39 + db 39,40,39,39,39,39,40,39,39,39,40,40,39,39,39,48 + db 40,40,39,40,39,39,40,39,39,40,39,39,39,39,40,40 + db 39,39,39,39,40,39,39,40,40,39,39,39,39,39,39,39 + db 39,39,40,40,39,39,39,40,40,39,39,40,40,39,40,39 + db 39,40,39,39,39,40,39,39,39,39,39,40,40,40,39,39 + db 39,40,39,40,40,40,39,39,40,40,40,39,40,39,40,39 + db 40,39,39,40,39,40,39,39,40,39,40,39,39,39,39,40 + db 40,39,40,39,39,39,40,39,39,39,39,39,39,39,39,39 + db 40,39,40,39,39,39,39,40,39,39,39,39,39,39,39,40 + db 39,39,40,39,40,40,39,40,50,40,40,50,39,39,40,40 + db 40,39,39,39,39,40,39,39,40,40,40,40,39,39,39,40 + db 40,39,40,39,39,39,39,40,39,39,39,39,40,40,39,39 + db 39,40,39,40,40,40,39,39,39,40,39,39,39,39,39,48 + db 39,40,39,39,40,39,40,39,39,39,39,39,40,39,39,39 + db 40,39,39,39,39,39,40,39,40,39,39,39,40,39,39,39 + db 40,39,39,39,40,40,39,39,39,40,39,39,39,40,19,16 + db 16,16,16,17,16,16,16,17,17,16,15,15,16,16,16,16 + db 17,18,18,18,19,19,19,19,19,19,19,19,19,20,20,20 + db 21,21,21,20,20,19,19,19,19,19,19,19,19,19,19,19 + db 17,17,17,17,17,17,17,17,18,18,18,19,20,20,20,21 + db 21,21,20,19,19,18,18,18,17,16,16,15,16,16,17,18 + db 18,17,17,16,16,16,14,16,17,18,19,19,18,17,17,16 + db 16,18,38,38,37,37,38,37,38,37,37,38,38,38,38,38 + db 38,38,38,38,37,37,38,38,38,38,37,37,37,38,37,38 + db 37,37,38,37,37,37,37,37,37,38,38,37,37,38,37,38 + db 38,38,38,37,37,38,38,38,38,38,37,37,37,38,38,38 + db 38,38,37,38,37,37,37,37,38,38,38,37,37,38,38,37 + db 37,37,37,37,37,37,37,38,38,37,38,38,37,37,38,37 + db 38,38,37,37,37,38,38,37,38,37,38,38,37,37,38,38 + db 38,38,37,38,37,38,37,38,38,38,38,37,38,38,38,38 + db 37,38,37,49,38,38,38,37,37,37,38,38,38,38,37,37 + db 37,37,38,38,37,38,37,37,38,38,38,38,37,38,37,37 + db 38,38,37,38,38,38,37,37,37,37,37,37,37,37,37,38 + db 37,38,37,38,38,37,38,37,37,38,38,38,38,38,38,38 + db 38,38,38,38,37,37,37,37,38,37,37,38,38,38,38,37 + db 37,37,38,38,37,37,38,37,37,38,38,38,37,37,38,38 + db 38,37,37,37,38,38,37,37,48,38,37,37,38,38,38,37 + db 38,38,37,37,38,38,37,38,37,37,37,37,38,38,38,38 + db 38,38,38,37,38,38,37,37,37,38,37,37,38,37,38,38 + db 38,38,39,39,38,39,39,39,38,39,39,39,38,38,39,38 + db 39,39,39,39,39,38,39,39,39,38,39,39,39,39,38,38 + db 38,39,38,38,39,38,39,39,38,38,39,38,38,39,39,39 + db 39,39,38,38,39,39,39,38,48,38,39,38,39,39,38,39 + db 39,38,38,38,39,38,38,38,38,38,39,39,38,39,38,39 + db 38,39,38,39,38,38,39,39,39,38,39,38,20,20,19,19 + db 18,18,17,17,16,16,16,16,16,17,18,19,20,39,39,38 + db 39,39,39,38,39,39,38,39,39,38,39,38,38,38,38,38 + db 38,38,38,38,39,38,38,39,38,38,38,38,39,38,39,38 + db 39,38,38,38,39,39,38,39,39,38,38,38,38,38,39,38 + db 39,39,38,38,39,39,38,39,38,39,38,39,38,38,38,39 + db 39,39,38,39,39,38,38,39,39,38,39,38,39,39,39,38 + db 38,39,39,38,39,39,38,39,39,38,38,38,38,39,38,38 + db 38,39,39,38,39,38,39,38,38,38,38,38,38,39,39,39 + db 38,39,39,39,38,39,38,38,38,39,38,39,39,38,38,39 + db 39,38,38,39,39,38,38,38,38,38,38,39,39,38,39,39 + db 39,38,39,39,39,39,39,38,38,39,38,39,39,39,18,16 + db 16,17,17,18,19,19,18,17,16,14,16,16,16,17,17,18 + db 18,17,16,16,15,16,16,17,18,18,18,19,19,20,21,21 + db 21,20,20,20,19,18,18,18,17,17,17,17,17,17,17,17 + db 17,17,17,17,17,17,16,16,17,18,18,18,18,19,19,20 + db 20,20,19,20,19,19,19,18,18,19,19,19,19,19,19,19 + db 18,16,17,17,16,17,15,14,16,17,17,16,16,17,17,17 + db 16,17,37,37,37,37,36,36,37,37,37,37,36,37,37,37 + db 36,36,36,37,37,36,37,37,37,37,36,37,37,36,37,37 + db 37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37 + db 36,37,36,37,36,37,37,37,36,37,37,37,36,37,37,37 + db 37,37,37,37,37,36,36,36,37,36,36,37,37,37,37,36 + db 37,37,37,37,37,36,37,37,36,37,36,37,37,37,37,37 + db 37,37,37,37,37,37,36,37,36,36,37,37,37,36,37,37 + db 37,36,37,37,37,48,36,37,37,37,37,37,36,37,37,37 + db 36,36,36,37,37,36,36,37,37,37,37,37,36,36,37,37 + db 37,36,36,37,36,37,36,37,37,36,37,37,37,37,37,36 + db 37,37,36,37,36,37,37,37,36,37,37,37,37,37,36,37 + db 37,37,37,37,37,37,37,37,37,36,37,37,37,36,36,36 + db 36,37,37,37,37,37,37,37,36,37,36,37,37,37,36,37 + db 37,37,37,36,37,36,36,37,37,37,36,37,37,37,37,36 + db 37,37,37,37,37,37,37,37,37,37,37,36,37,37,36,37 + db 37,36,37,36,36,37,37,37,37,37,37,36,36,37,37,36 + db 37,37,37,36,37,36,37,37,36,37,36,37,37,37,37,37 + db 38,38,38,38,38,37,38,37,37,38,37,38,38,37,38,38 + db 38,37,38,38,38,38,38,38,37,37,38,38,38,38,38,38 + db 38,38,37,38,38,38,38,38,38,38,37,38,38,20,20,19 + db 18,17,16,16,16,16,16,17,18,18,19,20,20,38,38,38 + db 37,38,38,37,38,38,38,38,38,38,38,38,38,38,38,38 + db 38,38,38,38,20,20,19,19,18,18,17,17,17,17,16,16 + db 16,16,16,16,16,16,15,15,15,15,16,16,17,18,19,20 + db 38,38,38,38,38,38,38,38,38,38,38,37,38,38,38,38 + db 38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38 + db 38,38,38,38,38,37,38,37,38,38,38,37,38,37,38,38 + db 38,38,38,38,38,38,38,38,37,38,38,37,3,38,38,38 + db 38,37,38,38,38,38,38,38,38,38,37,38,38,38,38,37 + db 38,37,38,38,38,38,38,38,38,38,38,37,38,38,38,38 + db 37,38,38,38,38,38,38,38,38,37,37,38,38,38,38,38 + db 38,37,37,48,38,38,38,38,38,38,38,38,38,38,38,38 + db 38,38,37,37,38,38,38,38,38,38,38,38,38,38,38,37 + db 37,38,37,37,37,38,38,38,38,38,37,38,37,38,17,16 + db 17,17,17,16,16,17,17,16,14,15,17,16,17,17,16,18 + db 19,19,19,19,19,19,19,18,18,19,19,19,20,19,20,20 + db 20,19,19,18,18,18,18,17,16,16,17,17,17,17,17,17 + db 19,19,19,18,18,17,17,16,16,16,16,16,17,18,18,19 + db 19,20,20,19,18,18,18,17,16,16,15,15,15,15,15,15 + db 15,16,16,16,16,17,16,14,16,17,17,17,17,16,16,18 + db 18,17,19,36,36,36,36,35,36,36,36,35,36,36,36,36 + db 36,36,36,36,36,36,37,36,36,36,36,36,36,36,36,36 + db 36,36,36,36,36,36,36,36,36,36,35,36,36,36,36,36 + db 36,36,36,35,36,37,36,36,36,36,36,36,36,36,36,36 + db 36,36,36,36,36,37,36,36,36,36,36,36,36,36,36,36 + db 36,36,37,36,35,36,36,36,36,36,36,36,36,36,36,37 + db 36,36,37,36,36,36,36,36,36,36,36,36,36,36,36,36 + db 36,36,36,36,36,36,36,36,36,36,36,37,36,36,36,36 + db 36,36,36,36,36,36,36,36,37,37,36,36,35,36,36,36 + db 36,36,37,36,36,36,36,36,36,36,37,36,36,36,36,36 + db 36,36,36,36,36,36,36,36,36,36,37,36,36,36,36,37 + db 36,36,36,37,36,37,35,36,36,36,36,36,36,36,36,36 + db 36,36,35,36,36,36,36,36,36,36,36,36,36,36,36,36 + db 36,36,36,35,36,36,36,36,36,36,36,36,37,35,36,36 + db 36,36,36,36,37,36,36,36,36,36,36,36,36,36,36,36 + db 36,36,36,35,36,36,36,36,36,36,35,36,36,36,36,36 + db 36,36,36,36,37,36,36,36,36,36,36,36,36,36,36,36 + db 37,38,38,37,37,37,37,38,37,38,38,37,37,37,37,38 + db 37,37,38,37,37,37,37,38,48,38,37,37,37,37,37,37 + db 37,37,37,37,37,38,38,38,38,20,19,18,18,17,16,16 + db 16,15,15,15,15,15,15,15,15,15,16,17,18,18,19,19 + db 20,20,37,38,37,38,37,37,37,37,37,37,38,37,20,20 + db 19,19,18,18,17,17,17,17,17,17,18,18,17,17,17,17 + db 16,16,17,17,17,17,17,17,17,17,17,17,16,16,17,18 + db 20,38,37,37,37,38,37,38,38,37,37,37,37,37,37,38 + db 37,37,38,38,37,37,38,37,37,38,37,38,38,37,48,37 + db 37,37,37,37,37,38,37,37,37,37,37,37,48,37,38,37 + db 37,37,37,38,38,38,38,38,37,37,38,37,37,37,37,37 + db 38,37,37,37,38,38,37,37,37,37,37,38,38,37,38,37 + db 49,37,38,38,37,37,37,38,37,38,37,37,37,37,49,38 + db 37,37,37,38,38,38,38,38,48,38,38,37,37,37,37,37 + db 38,38,37,38,38,37,37,37,37,37,37,38,37,37,37,37 + db 38,37,38,37,37,37,38,38,37,37,37,37,37,38,37,37 + db 37,38,37,38,38,38,37,37,37,38,37,37,37,19,17,18 + db 18,16,16,17,17,17,17,16,14,16,17,16,16,16,16,15 + db 15,15,15,15,15,15,16,16,17,18,18,18,19,20,20,19 + db 19,18,18,17,16,16,16,16,16,17,17,18,18,19,19,19 + db 19,19,19,19,19,19,19,18,18,17,16,16,15,16,16,17 + db 18,19,20,21,20,19,19,18,18,17,16,16,15,16,16,16 + db 17,17,16,17,16,16,17,16,15,16,16,16,17,17,17,17 + db 16,17,18,36,35,35,35,35,35,35,35,36,36,35,35,35 + db 35,36,36,35,35,36,35,35,36,36,36,36,35,35,35,36 + db 35,35,36,35,36,35,35,36,35,35,35,36,36,36,35,35 + db 35,35,36,35,35,35,36,35,35,35,36,35,35,36,36,36 + db 36,35,35,35,36,35,35,35,35,35,35,35,36,36,36,35 + db 36,35,36,35,35,35,35,36,35,36,35,35,35,35,36,35 + db 36,35,35,35,36,35,35,36,35,35,36,35,35,35,35,36 + db 35,35,36,35,35,36,35,36,35,35,35,35,35,35,35,35 + db 35,35,35,35,35,36,35,36,35,35,35,36,35,35,35,35 + db 36,35,35,35,35,36,36,35,35,35,36,35,36,36,35,35 + db 35,35,35,35,35,35,35,36,35,36,35,35,35,35,35,36 + db 36,35,35,36,35,35,36,36,36,35,36,36,35,35,35,35 + db 36,35,35,35,35,35,35,35,48,36,36,35,35,36,36,35 + db 35,35,35,36,35,35,35,36,35,35,35,35,35,35,35,35 + db 36,35,35,35,36,36,35,35,35,36,35,35,35,35,35,35 + db 35,35,35,35,35,36,35,35,35,35,35,36,36,35,35,35 + db 35,35,35,35,36,36,35,36,36,35,36,35,35,36,35,35 + db 37,37,37,36,37,37,36,36,36,36,37,36,36,37,37,37 + db 37,36,36,37,37,36,37,36,36,37,36,37,37,36,36,36 + db 36,37,37,37,36,36,20,19,18,17,17,17,16,16,16,15 + db 15,14,14,15,16,16,17,16,16,16,15,15,15,14,15,16 + db 16,17,17,18,18,19,19,19,19,20,20,19,19,18,18,17 + db 17,17,17,17,18,18,18,19,19,19,18,18,18,18,18,17 + db 17,17,16,17,18,18,18,18,18,17,17,17,17,17,16,16 + db 17,19,36,36,36,36,36,37,37,36,37,36,37,36,36,36 + db 37,36,37,37,36,37,37,37,37,36,37,37,37,37,37,36 + db 36,37,36,37,37,37,37,36,37,37,37,37,36,36,36,37 + db 36,36,37,36,36,36,36,37,37,37,36,37,37,36,37,36 + db 37,37,37,36,37,37,36,36,36,36,37,37,36,37,37,36 + db 37,36,36,37,37,37,37,37,37,37,37,36,36,36,36,36 + db 36,36,37,37,36,37,36,37,37,37,36,37,36,36,37,37 + db 37,36,37,36,36,37,37,37,37,37,37,36,37,36,36,36 + db 37,37,37,36,36,37,37,36,36,36,37,36,36,37,37,37 + db 37,37,36,37,36,37,36,36,36,37,37,37,37,18,17,16 + db 17,17,17,17,16,16,16,15,16,17,16,16,17,16,17,17 + db 16,16,16,15,16,16,17,18,18,19,19,20,21,20,19,18 + db 17,16,16,15,16,16,17,18,18,19,19,19,19,19,19,19 + db 19,19,18,17,18,18,18,17,17,17,17,16,16,15,15,16 + db 16,18,19,21,21,21,20,19,19,19,18,18,18,19,19,18 + db 18,18,16,17,17,16,17,17,16,15,17,17,16,16,16,16 + db 16,17,17,19,34,35,35,34,34,34,34,34,34,35,34,35 + db 35,35,34,34,34,35,35,34,35,35,35,34,34,35,34,35 + db 35,34,34,34,34,34,35,35,34,35,34,35,34,34,34,35 + db 48,35,34,35,34,35,35,35,34,35,35,34,35,34,34,34 + db 35,34,34,35,34,35,35,34,35,35,35,34,35,34,20,19 + db 18,17,18,19,20,34,34,35,34,34,34,34,35,35,35,34 + db 35,35,34,34,35,35,34,35,35,34,34,34,35,34,34,35 + db 35,35,35,35,34,35,34,34,35,34,35,34,34,35,35,34 + db 34,34,35,35,34,34,34,34,35,35,34,20,20,19,19,19 + db 19,19,19,20,20,34,34,34,34,35,35,34,34,34,34,35 + db 35,34,34,35,35,34,34,35,34,35,35,35,35,34,35,34 + db 35,34,34,34,35,35,34,34,35,35,34,35,34,34,35,34 + db 35,35,34,35,34,35,34,35,35,34,34,34,35,34,35,35 + db 35,34,35,34,35,35,35,35,35,34,35,34,34,35,34,35 + db 35,34,34,34,35,34,34,34,34,34,34,35,35,35,34,35 + db 35,34,35,34,35,34,34,35,34,34,34,35,35,35,35,35 + db 48,34,34,34,34,35,34,34,35,34,35,34,34,34,35,35 + db 36,36,36,35,36,36,36,36,36,36,35,36,36,36,36,36 + db 35,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36 + db 36,36,36,36,19,18,17,17,17,18,18,18,18,18,17,17 + db 16,16,15,14,15,16,16,17,17,16,16,16,16,15,14,14 + db 15,15,16,17,17,17,17,18,18,18,17,17,17,17,17,18 + db 18,18,19,19,19,19,19,19,19,19,19,18,18,18,18,18 + db 18,17,17,17,17,17,18,18,18,18,18,17,17,17,17,17 + db 16,17,18,20,36,36,36,35,36,36,36,36,36,36,35,36 + db 36,36,35,36,36,36,36,36,36,36,36,36,36,36,36,36 + db 36,36,36,35,36,35,36,36,36,35,36,36,36,35,36,36 + db 35,35,36,36,36,36,36,36,35,36,36,36,36,36,36,36 + db 36,36,35,36,35,36,36,36,36,36,35,35,36,35,35,35 + db 36,36,36,36,36,35,36,35,36,36,36,36,36,36,36,36 + db 36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36 + db 36,36,36,36,36,36,35,36,36,36,36,36,36,36,35,35 + db 36,36,36,36,36,36,35,36,36,36,36,36,35,36,36,36 + db 36,35,36,36,36,35,36,36,36,36,36,36,19,17,17,16 + db 16,16,16,16,17,17,15,16,17,17,16,17,17,16,18,18 + db 18,19,19,18,18,18,19,19,19,20,21,21,21,19,18,16 + db 16,15,15,16,16,17,17,17,17,18,18,18,17,18,19,19 + db 17,17,17,17,17,17,17,16,16,15,16,17,17,17,17,15 + db 14,16,17,18,19,19,20,21,21,21,21,20,20,20,19,19 + db 19,18,17,16,18,17,17,18,17,16,16,17,18,18,19,19 + db 19,18,17,18,34,34,34,33,33,34,34,34,34,34,34,33 + db 34,33,34,34,33,34,34,34,34,34,34,34,34,33,48,34 + db 34,34,34,34,34,34,33,34,34,34,33,34,34,34,34,34 + db 34,34,34,34,34,34,33,34,34,34,34,34,34,34,33,34 + db 34,34,33,34,34,34,33,33,34,34,33,34,19,18,17,17 + db 17,16,16,16,16,17,20,34,33,34,49,34,33,33,34,34 + db 34,33,34,34,34,33,34,34,33,34,33,33,34,34,34,34 + db 33,34,33,33,34,33,34,34,34,33,34,34,33,34,34,34 + db 34,33,34,34,34,33,34,20,19,18,17,17,16,16,16,15 + db 15,15,16,17,17,18,19,20,34,34,33,34,34,33,34,34 + db 34,48,34,34,33,33,34,34,34,34,34,34,33,34,34,34 + db 34,34,34,34,34,34,34,34,34,34,34,33,33,34,34,34 + db 33,34,34,33,34,34,33,34,34,34,34,34,33,34,33,34 + db 34,34,34,34,34,33,34,34,34,34,33,34,34,34,34,34 + db 34,34,34,34,33,34,33,34,33,33,48,34,34,34,34,34 + db 21,21,20,20,20,20,20,20,20,20,21,33,34,33,34,33 + db 33,33,34,34,33,34,33,34,34,34,34,33,34,34,34,33 + db 35,36,35,35,35,35,35,35,35,35,35,35,36,35,35,36 + db 36,35,35,35,36,35,35,20,19,18,17,16,15,16,16,17 + db 17,18,19,18,17,17,18,18,18,19,19,19,19,19,19,18 + db 18,17,17,16,15,15,16,17,17,17,18,17,17,16,16,14 + db 14,14,15,15,16,16,17,17,17,17,18,18,19,19,19,19 + db 19,19,19,19,19,18,18,18,17,18,17,17,17,18,18,18 + db 18,18,18,18,18,18,18,18,19,19,18,18,18,17,17,18 + db 17,17,17,17,19,35,35,36,35,36,35,36,35,36,35,35 + db 35,35,48,35,35,35,36,35,35,35,36,35,35,35,35,36 + db 36,35,35,35,35,35,35,35,35,35,35,35,36,35,35,36 + db 36,35,35,36,35,35,35,35,36,35,36,36,35,48,36,35 + db 35,48,35,35,36,36,35,35,35,36,35,35,36,35,35,35 + db 35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35 + db 35,35,35,36,35,35,36,35,35,35,36,35,36,35,35,35 + db 35,35,35,35,35,35,35,36,35,36,36,35,35,35,35,35 + db 36,36,35,35,35,36,36,35,36,35,35,35,35,35,35,35 + db 36,35,35,35,36,35,35,36,35,35,35,35,18,17,18,19 + db 19,19,18,18,17,16,16,17,18,17,17,18,16,17,18,19 + db 19,19,20,20,20,21,21,21,21,20,19,19,18,17,16,14 + db 15,17,17,17,17,16,15,16,16,17,17,17,17,17,17,17 + db 18,18,18,17,17,17,17,17,17,17,17,17,17,18,17,16 + db 15,15,16,16,17,18,19,20,21,21,21,21,21,20,21,21 + db 20,19,17,16,19,18,17,18,18,18,17,17,17,18,19,19 + db 19,19,18,17,18,33,33,32,33,33,33,33,33,33,33,33 + db 33,33,33,33,33,33,33,33,34,33,33,33,33,33,33,33 + db 33,33,33,33,33,33,33,32,33,33,33,33,33,33,32,33 + db 33,33,33,33,33,33,33,33,32,33,33,33,33,32,33,33 + db 33,33,33,34,33,33,33,33,34,33,20,18,18,18,18,18 + db 17,17,16,16,15,16,17,18,20,33,33,33,33,32,33,33 + db 33,33,33,33,33,33,33,33,33,49,33,32,32,33,33,33 + db 33,33,32,33,49,33,33,33,33,33,33,34,33,33,33,33 + db 33,33,32,33,20,19,18,17,17,17,18,18,18,17,17,16 + db 16,15,15,15,15,16,16,17,18,19,20,33,33,33,34,33 + db 33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33 + db 33,33,33,33,33,32,33,32,33,33,33,33,33,33,33,33 + db 33,33,33,33,32,32,33,33,33,33,33,33,33,33,33,33 + db 33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33 + db 33,33,33,33,33,33,33,33,33,32,21,21,20,20,19,18 + db 17,16,16,16,16,15,15,15,15,15,16,17,18,19,20,21 + db 33,33,33,33,33,33,33,33,33,33,33,33,34,34,33,33 + db 48,34,34,34,34,34,34,34,34,34,34,34,48,35,34,34 + db 35,34,34,34,34,19,18,17,17,17,17,17,15,14,14,14 + db 15,16,16,17,18,18,18,18,19,19,19,19,19,20,19,19 + db 19,18,18,17,17,16,15,16,17,17,18,18,17,17,16,16 + db 15,15,15,15,15,15,15,15,16,16,17,17,17,18,19,19 + db 19,19,19,19,19,19,19,19,18,18,18,17,17,16,16,17 + db 17,17,18,18,18,18,19,19,19,19,19,19,18,18,18,17 + db 17,18,17,17,17,18,35,35,34,35,35,35,35,35,35,34 + db 34,35,34,34,35,34,34,34,34,35,35,34,34,35,34,35 + db 34,34,35,34,34,35,35,34,34,34,35,35,35,35,34,34 + db 34,35,34,35,34,34,34,34,35,34,35,35,35,35,35,34 + db 34,34,34,34,34,34,34,34,34,34,35,35,34,35,35,35 + db 34,34,34,34,35,34,34,34,34,34,34,34,34,35,34,34 + db 34,35,34,35,34,35,35,35,34,34,34,35,35,35,35,34 + db 34,35,34,34,34,34,34,35,35,35,34,34,35,35,34,34 + db 35,35,34,35,34,35,35,35,35,35,35,35,34,35,35,34 + db 35,35,35,34,35,35,34,34,34,35,35,18,17,18,19,19 + db 19,19,18,17,17,17,18,18,18,17,18,19,16,17,19,20 + db 21,21,20,21,21,21,21,21,20,19,18,17,16,16,15,15 + db 16,17,18,17,17,17,17,17,17,17,17,17,17,18,18,18 + db 19,19,18,18,18,18,18,18,17,17,17,18,18,16,16,16 + db 17,17,17,16,16,17,17,18,19,20,20,20,20,21,21,21 + db 21,19,18,17,17,17,16,16,15,15,15,15,15,15,15,16 + db 16,16,17,17,18,19,33,32,32,32,33,32,32,33,32,33 + db 32,32,33,32,32,33,32,32,33,32,33,33,32,33,32,32 + db 32,32,32,33,32,32,32,32,32,32,32,33,32,32,32,32 + db 32,32,33,32,32,33,33,32,32,32,32,32,32,32,32,32 + db 33,32,32,32,32,32,32,32,19,18,18,18,18,18,18,19 + db 18,18,17,18,16,15,15,15,16,17,19,20,33,32,32,32 + db 32,33,33,33,33,32,32,32,32,32,33,32,32,32,32,32 + db 33,32,32,32,32,33,32,32,32,33,33,33,32,32,32,32 + db 32,20,19,18,18,18,18,18,18,19,19,19,19,18,18,17 + db 17,16,15,16,15,15,14,14,15,16,17,18,20,32,32,32 + db 32,33,32,32,32,32,32,33,33,32,32,32,32,32,33,32 + db 32,32,32,32,32,33,32,33,32,32,32,32,32,32,32,32 + db 32,33,33,33,32,32,32,32,32,32,33,32,32,32,33,33 + db 32,32,32,32,32,32,48,32,33,32,32,32,32,32,32,33 + db 33,32,32,32,21,20,20,19,19,18,18,17,17,17,17,17 + db 17,17,17,17,17,17,16,16,16,15,14,14,14,15,16,17 + db 18,19,20,21,32,32,33,32,32,33,33,32,32,33,32,32 + db 34,33,34,33,33,33,34,34,33,34,34,34,34,33,34,34 + db 33,33,34,19,18,17,17,17,18,18,18,17,17,16,15,14 + db 14,15,15,16,16,17,17,18,18,18,19,19,19,20,20,20 + db 19,19,19,18,18,17,16,15,16,17,17,18,18,18,17,16 + db 16,16,15,16,16,16,15,15,15,15,15,16,16,17,17,18 + db 19,19,19,20,20,20,19,20,20,19,19,19,18,18,18,17 + db 17,18,17,17,17,18,18,18,19,20,20,20,19,19,18,18 + db 18,17,17,17,16,17,17,20,34,34,34,34,34,34,34,34 + db 33,34,34,34,34,34,34,34,34,34,33,34,34,34,34,34 + db 34,34,33,33,34,34,34,34,34,33,34,34,34,34,33,33 + db 34,34,34,34,34,34,34,34,33,34,33,34,34,34,34,34 + db 33,34,34,33,33,33,34,34,33,33,34,34,34,34,34,34 + db 33,33,33,33,34,34,34,33,34,33,33,34,34,34,49,34 + db 34,34,34,34,34,34,34,34,34,34,34,33,34,33,34,33 + db 34,34,34,33,33,33,34,33,34,34,34,34,34,34,33,34 + db 34,33,34,34,33,33,33,33,34,34,33,34,33,34,33,34 + db 33,33,34,33,34,34,34,33,34,34,19,18,17,17,16,16 + db 16,15,15,15,15,15,15,15,16,16,17,17,17,18,19,21 + db 21,21,21,20,20,20,20,19,18,17,17,16,16,17,17,17 + db 16,16,16,18,18,17,17,17,18,18,18,18,18,18,19,19 + db 19,19,19,19,19,19,19,18,18,18,18,18,17,17,17,17 + db 18,17,16,15,16,16,17,17,17,18,18,18,19,19,18,17 + db 17,17,16,16,15,15,15,15,15,15,15,15,15,14,14,14 + db 14,14,14,15,16,17,19,32,31,32,31,31,32,31,31,32 + db 32,31,31,31,32,31,31,32,31,32,32,32,31,32,31,31 + db 31,32,32,32,31,31,31,32,31,32,32,31,32,31,31,32 + db 32,32,32,32,31,31,31,32,31,32,31,32,31,31,32 diff --git a/ALKU/HOI.IN1 b/ALKU/HOI.IN1 new file mode 100644 index 0000000..722a75e --- /dev/null +++ b/ALKU/HOI.IN1 @@ -0,0 +1,3955 @@ + + db 31,32,31,31,32,32,31,18,18,18,18,18,19,19,18,18 + db 18,19,18,19,18,17,17,16,15,15,15,16,17,17,18,19 + db 20,31,31,32,32,32,31,31,32,32,31,32,32,31,32,31 + db 31,31,32,32,32,31,31,31,31,32,32,31,31,31,32,20 + db 19,18,18,18,18,19,19,19,19,20,21,21,20,20,20,19 + db 18,17,17,15,17,17,17,16,16,15,15,16,16,17,18,20 + db 31,31,31,32,31,31,32,32,32,32,31,31,31,31,31,31 + db 32,32,32,31,31,32,20,20,20,20,20,20,20,20,20,20 + db 20,20,32,31,31,32,31,31,32,32,31,31,32,31,31,31 + db 32,31,32,32,32,32,32,32,31,32,31,31,32,31,32,20 + db 19,19,18,18,18,18,18,18,18,18,19,19,19,19,19,19 + db 18,18,18,18,18,17,17,17,17,17,16,16,15,14,14,14 + db 15,15,15,16,17,18,20,32,31,32,31,31,31,33,33,34 + db 34,34,34,33,33,33,33,33,33,33,33,34,33,33,33,33 + db 33,20,19,18,18,18,17,18,19,19,19,20,19,18,17,17 + db 16,16,15,15,15,15,15,16,16,17,17,18,18,19,19,19 + db 20,20,20,19,19,19,19,17,16,16,17,17,18,19,18,18 + db 17,17,16,16,16,16,16,16,16,15,16,16,15,15,16,16 + db 17,17,18,19,19,20,20,20,20,20,20,20,19,19,19,19 + db 19,19,19,18,18,18,17,17,17,18,18,18,19,19,19,19 + db 18,18,18,18,17,17,16,16,17,19,33,33,33,33,33,33 + db 33,33,33,34,34,33,33,33,33,33,33,33,34,33,33,33 + db 33,33,33,33,34,33,33,33,33,34,33,33,33,33,33,33 + db 33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,48 + db 34,33,33,33,33,33,34,33,33,33,33,33,33,33,33,33 + db 34,33,34,33,33,33,33,33,33,33,33,33,33,34,33,33 + db 33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33 + db 33,33,33,33,33,33,33,33,33,33,33,34,33,33,33,33 + db 33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33 + db 33,33,33,33,33,33,33,33,33,34,19,17,16,15,14,14 + db 14,14,14,14,15,15,15,15,15,15,15,15,15,16,16,17 + db 17,17,18,19,19,18,18,18,17,17,17,16,16,15,16,17 + db 18,17,17,17,17,18,18,18,18,18,19,19,19,19,19,19 + db 19,16,16,17,17,18,19,19,19,19,19,18,18,17,16,16 + db 17,18,17,16,15,17,17,17,16,17,17,18,18,18,19,19 + db 19,19,19,19,19,19,19,19,19,19,19,19,18,18,17,17 + db 16,16,16,15,15,15,15,16,17,31,30,30,30,30,30,31 + db 31,31,30,30,31,30,30,31,31,31,31,31,30,31,31,31 + db 31,30,31,31,31,30,31,30,31,30,30,31,30,31,31,31 + db 31,30,30,31,31,31,30,31,31,30,30,31,30,48,31,31 + db 31,31,31,31,31,19,18,18,18,18,19,19,18,18,17,17 + db 18,18,19,20,19,18,17,16,16,17,16,16,16,15,15,15 + db 15,16,17,18,18,19,20,20,30,31,31,31,31,31,31,31 + db 31,30,31,30,31,31,31,31,30,31,30,31,31,19,18,18 + db 18,18,19,19,20,20,20,21,21,21,21,21,21,21,21,20 + db 19,18,18,16,18,18,18,17,16,16,15,17,17,16,16,17 + db 17,30,30,31,31,30,30,31,31,31,31,30,30,30,30,30 + db 31,31,20,19,18,17,17,17,17,17,17,17,17,17,16,16 + db 15,15,16,17,17,19,30,31,31,31,30,30,31,31,30,30 + db 30,30,31,31,31,31,30,31,30,30,20,19,18,17,17,17 + db 18,18,18,18,18,19,19,19,19,20,20,20,20,20,19,19 + db 19,20,19,19,19,19,18,18,18,18,17,16,15,16,16,16 + db 16,16,15,15,15,14,15,16,20,30,31,31,31,31,31,32 + db 33,33,32,32,33,32,32,32,33,32,33,32,33,32,32,20 + db 19,18,18,19,18,19,18,17,18,19,19,20,20,19,18,18 + db 17,16,17,17,17,17,17,16,16,16,16,16,17,18,18,19 + db 19,20,20,20,20,20,19,18,18,17,16,17,18,18,19,18 + db 18,17,17,16,17,17,17,16,16,16,15,16,16,16,15,15 + db 16,16,17,17,18,19,19,19,20,20,20,20,20,20,20,20 + db 20,20,20,19,19,19,19,18,18,17,17,18,18,18,19,19 + db 19,18,18,17,18,18,17,16,16,16,18,20,33,32,32,32 + db 32,32,32,32,32,32,32,32,32,33,32,32,33,32,32,33 + db 33,32,32,32,32,33,33,32,32,32,33,32,32,32,33,32 + db 32,32,33,32,33,33,32,33,32,48,32,32,33,33,32,33 + db 32,33,32,32,33,32,32,32,32,32,32,33,32,32,32,32 + db 32,33,32,32,33,32,33,32,33,32,32,32,33,32,32,32 + db 32,33,33,32,32,32,32,32,32,32,32,32,32,33,32,32 + db 32,32,32,32,32,32,32,32,32,32,32,32,32,32,33,32 + db 32,33,33,32,32,32,32,32,32,32,32,33,32,33,32,32 + db 32,32,33,32,32,32,32,32,32,17,16,15,15,15,15,16 + db 16,16,17,17,18,18,19,19,19,19,19,19,19,19,19,19 + db 19,19,19,19,18,18,18,17,17,16,17,17,17,15,16,17 + db 18,17,16,16,17,18,18,19,19,19,19,19,18,17,17,16 + db 16,16,15,16,16,16,17,18,18,19,18,18,17,16,17,17 + db 17,17,16,16,16,17,18,17,16,16,17,17,18,18,18,18 + db 18,17,17,17,17,17,17,16,16,16,16,17,17,17,18,18 + db 19,19,19,18,18,17,16,15,16,18,30,30,30,30,30,30 + db 30,30,29,30,30,30,30,29,30,30,30,30,20,19,18,17 + db 17,17,18,19,20,30,30,30,30,30,30,30,30,30,29,30 + db 30,30,29,30,30,30,29,30,30,30,30,30,30,29,29,30 + db 30,30,30,19,18,18,18,19,19,19,19,19,18,18,18,17 + db 18,19,20,20,19,18,18,18,16,18,18,17,17,16,16,15 + db 15,15,15,15,15,15,15,15,16,16,17,19,20,30,29,30 + db 29,30,30,30,29,30,30,30,30,30,19,18,18,18,19,19 + db 20,20,20,20,20,21,21,21,20,20,20,20,20,21,21,21 + db 20,19,18,17,18,18,19,18,18,17,16,18,17,17,16,15 + db 16,17,20,30,30,30,30,30,30,48,30,30,30,30,30,19 + db 18,18,17,17,17,18,18,18,18,18,18,18,18,17,17,17 + db 17,16,15,15,14,16,17,30,30,30,30,30,30,30,30,30 + db 30,30,30,30,30,20,19,18,17,17,17,16,16,16,16,16 + db 16,17,17,17,18,18,18,19,18,19,19,19,19,19,20,20 + db 20,20,20,19,19,19,19,19,18,18,17,16,16,17,17,17 + db 17,17,16,16,16,15,14,15,16,19,30,30,30,30,30,31 + db 31,31,31,31,31,32,32,32,31,32,32,31,32,20,19,18 + db 18,18,19,19,19,18,19,18,17,19,19,19,20,19,19,18 + db 18,18,16,17,18,18,17,17,17,17,17,17,16,16,17,18 + db 18,19,19,20,20,19,19,19,19,18,17,16,17,18,19,19 + db 18,18,17,17,17,17,18,17,17,16,16,16,16,16,16,16 + db 16,16,16,16,17,17,17,19,19,19,20,20,19,20,20,20 + db 20,20,20,20,20,20,19,19,19,18,18,17,17,18,18,19 + db 19,19,18,17,17,18,19,18,17,16,16,18,19,31,31,32 + db 32,32,32,32,31,31,32,32,31,31,31,32,31,31,31,32 + db 32,31,32,32,32,31,31,32,32,32,32,31,31,32,32,32 + db 32,32,31,32,32,32,31,32,32,31,32,32,32,31,32,31 + db 31,32,31,32,32,32,31,32,32,31,31,32,32,31,32,32 + db 32,32,32,32,31,32,31,32,31,32,32,31,31,32,31,32 + db 31,31,31,32,32,31,31,32,31,32,32,32,31,31,31,31 + db 31,32,32,32,32,32,31,32,32,32,31,31,32,32,32,32 + db 31,31,32,31,31,32,31,32,31,31,32,31,31,32,32,32 + db 31,31,32,32,32,31,32,32,18,16,15,16,17,18,18,19 + db 19,19,18,18,17,17,17,16,16,16,16,17,17,17,17,17 + db 17,18,18,18,18,18,17,17,16,16,17,18,17,16,16,16 + db 17,17,17,17,16,17,18,18,19,18,18,17,16,16,16,15 + db 16,16,16,15,16,16,16,17,17,18,18,17,17,17,18,18 + db 17,17,17,17,18,18,17,17,17,15,16,17,18,19,18,18 + db 18,18,18,18,17,17,16,17,16,17,16,16,15,15,15,15 + db 15,16,16,17,17,18,18,17,16,16,18,19,29,30,29,29 + db 29,29,30,30,29,30,29,29,20,19,18,17,17,17,17,16 + db 16,16,16,16,16,17,19,20,29,30,29,30,30,30,29,29 + db 30,29,30,29,29,29,30,30,30,29,29,29,30,29,29,29 + db 30,30,18,18,19,19,20,19,20,20,19,19,19,19,18,18 + db 18,19,19,19,19,18,18,18,17,17,18,19,18,18,17,16 + db 16,17,18,18,18,18,18,18,17,16,16,15,15,16,17,20 + db 29,29,30,29,29,29,29,29,19,18,18,19,20,20,20,20 + db 20,20,20,20,19,19,19,19,19,19,19,19,19,19,19,20 + db 20,20,18,18,17,18,19,19,18,17,17,18,18,18,17,15 + db 15,16,17,20,29,29,29,29,29,29,30,29,19,18,18,18 + db 18,18,19,19,19,19,19,19,19,19,19,19,19,18,18,18 + db 17,17,17,16,15,14,16,17,29,29,29,29,29,29,30,30 + db 29,20,19,18,17,17,17,17,17,17,17,17,17,17,16,16 + db 15,15,15,16,16,17,18,18,19,19,20,20,20,20,20,20 + db 20,19,19,19,20,20,20,20,19,18,18,17,16,17,18,18 + db 18,18,17,17,17,16,15,16,15,16,18,30,30,30,30,31 + db 31,31,31,31,31,31,31,31,31,31,20,19,18,18,18,19 + db 19,19,19,19,20,19,19,19,19,18,19,20,20,20,19,19 + db 18,18,18,17,17,18,18,17,17,17,17,17,17,17,16,16 + db 17,17,18,19,19,20,19,19,18,19,18,16,17,18,18,19 + db 19,19,18,18,17,17,18,17,16,17,16,17,17,16,17,16 + db 16,17,17,16,16,16,17,17,17,18,18,19,19,19,19,19 + db 19,19,19,20,20,20,20,20,20,19,19,18,18,17,18,18 + db 18,18,19,18,17,17,18,19,18,18,17,16,17,18,31,30 + db 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 + db 31,31,31,31,31,31,30,31,31,31,31,30,31,30,31,31 + db 31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31 + db 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 + db 31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31 + db 31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31 + db 31,31,31,31,30,31,31,31,31,31,31,31,31,30,31,31 + db 31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30 + db 31,30,31,31,31,31,19,18,16,16,17,18,18,17,17,16 + db 16,15,15,15,15,15,16,16,17,16,17,16,17,17,18,18 + db 18,18,18,18,19,18,17,16,15,17,17,17,18,18,17,17 + db 17,17,18,18,17,17,17,18,18,17,17,16,16,16,15,16 + db 16,17,16,16,15,15,15,16,16,17,18,19,19,19,19,18 + db 18,18,18,19,19,19,18,18,17,17,17,17,17,19,19,19 + db 18,18,17,17,17,17,17,17,17,16,16,17,16,16,16,15 + db 15,14,14,15,16,16,17,18,18,18,18,18,19,28,29,29 + db 28,28,29,28,20,19,18,18,18,18,18,18,18,18,18,17 + db 17,17,17,16,16,16,17,17,19,20,28,29,28,28,28,28 + db 28,29,28,29,29,28,28,29,28,28,28,29,29,29,28,29 + db 28,18,18,19,19,19,20,20,20,20,20,20,19,19,19,18 + db 18,19,18,18,18,19,18,18,18,17,18,19,19,19,19,18 + db 17,16,18,18,19,18,19,18,18,17,18,18,17,16,15,16 + db 17,20,28,28,29,28,19,18,18,19,19,20,20,20,19,19 + db 19,19,19,19,19,19,18,18,18,18,18,18,18,18,19,19 + db 19,20,19,18,17,18,19,20,19,18,17,18,19,19,18,15 + db 14,15,16,17,20,28,28,28,29,29,19,18,18,18,19,19 + db 19,19,19,19,20,20,20,20,20,20,20,20,20,20,19,19 + db 18,18,17,17,16,15,15,16,18,20,28,29,28,29,20,19 + db 18,18,17,17,18,18,18,18,18,18,18,18,18,18,17,16 + db 17,17,17,17,16,16,16,17,18,18,19,20,20,19,20,19 + db 19,20,20,20,20,20,20,20,19,18,18,17,17,18,18,18 + db 19,18,18,18,17,17,15,16,16,15,16,17,19,30,30,30 + db 30,30,30,30,30,31,31,31,20,19,18,18,18,19,19,19 + db 20,19,19,19,19,20,20,19,19,19,19,19,20,20,19,19 + db 19,19,19,19,19,18,18,18,17,18,17,17,17,18,18,17 + db 16,16,16,17,18,19,19,19,19,19,18,18,17,17,18,18 + db 19,19,19,18,18,18,19,18,17,16,15,16,17,17,16,17 + db 17,16,17,17,17,17,16,16,16,16,16,17,17,17,18,18 + db 18,19,19,19,19,19,19,19,19,19,19,19,19,18,17,17 + db 17,17,18,18,18,17,17,18,19,18,18,17,16,16,17,18 + db 19,30,31,31,19,19,18,18,17,17,17,17,17,17,17,17 + db 17,17,17,18,18,19,19,30,30,30,30,31,30,30,30,30 + db 30,30,30,30,31,30,30,30,30,31,31,30,30,30,31,30 + db 30,30,31,31,30,30,31,30,30,30,30,30,31,30,30,30 + db 30,30,30,30,30,30,30,30,30,31,30,30,30,30,31,30 + db 30,31,30,30,30,30,30,30,30,30,31,30,30,30,30,30 + db 30,31,30,30,31,30,30,31,30,30,30,31,30,30,30,30 + db 30,31,31,30,31,30,30,30,30,30,31,31,30,30,30,30 + db 31,30,30,30,30,19,18,18,18,18,18,17,16,16,15,14 + db 14,15,15,16,16,16,17,16,16,17,17,17,17,17,17,17 + db 18,18,19,19,19,17,17,17,17,17,18,18,19,19,19,18 + db 18,18,18,19,19,19,19,18,17,16,16,15,15,15,16,16 + db 17,19,18,18,17,17,17,16,15,16,17,18,19,18,18,17 + db 17,17,17,16,16,16,16,15,15,14,15,16,17,18,19,20 + db 19,19,19,19,18,18,18,18,18,19,19,19,18,18,17,17 + db 17,16,15,15,15,15,14,14,15,16,17,17,18,19,28,27 + db 20,19,18,18,18,18,18,19,19,19,19,19,19,19,19,18 + db 18,18,17,17,17,16,16,16,16,17,18,19,27,28,27,27 + db 28,28,27,28,28,27,28,27,27,27,28,27,28,27,28,19 + db 18,18,19,19,20,20,20,20,20,20,19,19,18,18,18,18 + db 18,19,18,17,17,17,17,17,16,16,16,16,17,18,19,19 + db 19,18,17,18,18,19,20,19,18,18,17,18,18,17,17,16 + db 16,17,19,19,18,18,18,19,20,20,20,19,19,19,19,18 + db 18,18,18,18,18,17,17,17,17,17,17,18,18,18,18,18 + db 18,19,19,19,18,17,18,19,20,18,18,17,18,19,19,16 + db 17,16,15,16,17,19,27,28,19,18,18,19,19,19,19,19 + db 20,20,20,20,20,20,20,20,20,20,20,20,19,18,18,18 + db 17,17,16,16,16,16,15,15,16,17,19,20,20,19,18,18 + db 17,17,18,18,18,18,19,19,18,18,19,19,18,18,18,17 + db 16,18,18,18,18,17,17,16,16,17,18,18,19,20,19,19 + db 19,19,19,19,20,20,20,20,20,19,18,18,17,18,18,19 + db 19,19,18,18,18,17,16,17,17,17,16,16,17,19,30,30 + db 30,30,30,30,30,20,19,18,18,18,19,19,19,19,19,20 + db 20,20,19,20,19,20,20,20,20,20,19,19,20,19,19,19 + db 19,19,19,18,18,17,18,19,17,18,18,17,17,18,18,18 + db 18,17,17,16,16,17,18,18,19,18,18,18,18,17,18,18 + db 18,19,19,19,19,19,18,19,18,17,16,15,16,17,17,16 + db 17,17,16,17,17,17,17,17,17,17,17,16,16,16,16,16 + db 17,17,18,18,18,18,19,19,19,19,19,19,19,19,19,18 + db 17,17,17,17,18,18,18,17,18,19,19,18,17,17,16,16 + db 17,17,17,17,17,16,16,16,16,17,17,18,18,18,18,18 + db 17,17,16,16,15,15,16,17,18,19,29,30,30,30,30,29 + db 30,30,30,29,29,29,30,29,29,30,30,29,29,29,29,29 + db 29,30,29,30,30,29,29,30,30,30,29,29,30,30,30,29 + db 29,29,29,29,29,29,29,30,30,30,29,30,29,30,30,30 + db 30,29,29,29,29,29,30,29,29,29,29,29,29,30,29,29 + db 29,30,29,30,29,30,29,29,30,29,30,30,30,29,30,29 + db 30,29,30,29,30,29,30,29,29,29,29,30,29,30,30,30 + db 30,29,30,29,19,18,17,17,16,15,14,14,15,15,15,15 + db 16,17,17,17,18,18,19,19,19,18,18,18,18,18,19,19 + db 19,19,20,19,18,17,16,15,14,15,15,16,16,16,16,17 + db 17,17,17,18,18,19,18,17,16,15,16,17,17,17,18,18 + db 19,20,20,19,19,18,18,17,16,16,16,17,19,19,19,18 + db 18,17,17,17,17,17,17,16,16,16,15,16,16,17,19,20 + db 21,21,21,20,20,20,19,19,19,19,18,18,18,17,17,16 + db 15,15,15,16,16,16,15,15,14,14,15,16,17,18,19,18 + db 18,18,19,19,19,19,19,20,20,20,20,20,19,19,19,19 + db 19,19,18,18,17,16,16,16,16,16,16,17,18,19,27,26 + db 27,27,27,27,27,26,27,27,27,27,27,27,27,27,19,18 + db 19,19,20,20,20,20,20,19,19,19,18,18,18,18,18,18 + db 18,18,18,18,18,18,18,18,18,18,18,18,17,16,16,17 + db 18,19,18,17,18,19,19,20,19,18,17,18,19,18,18,17 + db 17,16,16,17,18,18,19,19,19,19,19,19,18,18,18,18 + db 18,18,17,17,17,17,16,16,16,16,16,16,16,16,17,17 + db 17,18,18,18,18,18,18,18,20,19,18,18,17,18,19,16 + db 18,17,16,15,16,17,19,18,18,19,19,19,19,20,20,20 + db 20,20,19,19,19,20,20,20,19,19,19,18,17,17,17,17 + db 17,18,18,19,18,18,18,17,16,16,16,16,17,18,18,18 + db 18,18,19,19,19,20,20,20,20,20,20,19,19,19,18,18 + db 17,17,18,19,18,18,18,18,17,17,17,18,18,19,19,18 + db 18,18,18,18,19,19,19,20,19,20,19,18,17,18,18,19 + db 20,19,19,18,18,18,16,16,17,18,17,16,16,17,19,30 + db 30,20,19,18,18,18,18,18,19,19,19,20,20,20,20,20 + db 19,19,20,20,20,20,20,20,20,19,19,19,19,19,19,19 + db 19,18,18,18,18,18,18,19,18,18,18,18,17,17,18,19 + db 18,18,18,17,17,17,18,18,18,19,18,18,18,18,17,18 + db 18,18,19,18,19,19,19,19,18,18,17,17,16,17,17,17 + db 16,17,17,16,16,17,17,18,18,18,18,18,17,17,17,17 + db 17,17,17,17,17,17,17,18,18,18,19,18,19,19,19,19 + db 18,18,17,17,18,19,18,18,17,18,18,19,18,17,17,17 + db 16,16,16,16,16,16,16,17,17,17,18,18,19,18,19,18 + db 18,18,18,17,16,16,15,15,16,17,18,18,19,29,28,29 + db 29,29,29,29,28,29,28,29,29,28,28,28,29,29,29,28 + db 29,29,29,28,28,29,29,29,29,29,28,28,29,28,29,28 + db 29,29,28,29,29,29,29,29,28,29,29,28,29,29,29,29 + db 28,28,29,28,29,29,29,28,28,29,29,29,28,28,28,29 + db 29,28,28,28,29,29,28,29,28,29,29,29,29,29,29,29 + db 29,29,29,28,29,29,29,28,29,29,28,29,29,29,29,28 + db 29,29,29,19,18,17,16,15,14,14,15,15,16,16,16,15 + db 15,15,16,17,17,18,18,18,19,19,19,19,20,20,20,21 + db 21,21,20,19,17,16,16,15,16,16,16,17,17,17,17,17 + db 17,18,18,19,19,19,17,16,16,16,17,18,18,19,19,20 + db 20,17,17,17,16,16,16,16,17,17,16,17,18,19,19,19 + db 19,19,18,18,18,17,17,18,19,19,18,18,17,17,18,19 + db 20,20,20,19,19,18,18,17,17,16,16,15,15,15,15,15 + db 15,16,16,16,17,17,17,16,16,16,16,15,16,17,18,19 + db 18,19,19,20,20,20,20,20,20,20,19,19,18,17,17,17 + db 18,18,19,19,18,17,17,17,17,17,16,16,16,17,18,19 + db 26,26,26,26,26,26,26,26,26,26,26,26,26,19,18,19 + db 19,20,19,20,20,19,19,19,18,18,18,18,18,18,18,18 + db 18,19,19,19,19,19,18,19,19,19,19,18,18,17,16,16 + db 17,18,19,18,18,19,18,20,19,18,18,18,19,19,18,18 + db 17,18,18,17,17,18,18,18,19,18,18,18,18,18,18,17 + db 18,18,18,18,18,18,18,18,18,18,17,16,16,15,15,15 + db 15,16,16,17,17,18,18,18,19,20,20,19,18,18,20,17 + db 18,17,16,17,16,16,17,18,18,19,19,18,18,18,19,19 + db 19,19,18,19,20,19,19,19,18,19,18,18,18,18,18,18 + db 18,19,19,19,19,18,17,16,16,16,15,15,14,15,15,16 + db 17,18,18,18,19,19,19,19,20,20,20,20,20,19,19,18 + db 18,17,18,19,19,19,18,18,18,18,18,18,18,17,17,17 + db 16,16,16,16,17,18,18,19,20,20,19,18,18,18,19,19 + db 20,20,19,19,18,18,17,16,18,18,18,17,16,16,17,17 + db 17,17,18,18,18,19,19,19,19,20,20,20,20,20,20,20 + db 20,20,20,20,20,20,19,19,19,19,18,19,19,19,18,18 + db 18,17,17,17,17,17,17,17,18,18,18,18,17,18,18,18 + db 19,19,18,18,17,17,18,18,18,18,18,18,18,18,18,17 + db 18,18,18,17,18,18,18,18,18,18,17,17,17,16,17,17 + db 17,16,17,17,17,16,17,17,18,18,18,18,18,18,18,18 + db 18,18,18,17,17,17,17,17,17,17,18,19,18,19,19,18 + db 18,18,19,18,18,18,19,18,18,18,18,18,19,18,18,17 + db 17,17,16,16,16,17,17,17,17,18,18,18,19,19,18,19 + db 19,19,18,18,18,17,17,16,15,16,16,17,17,18,19,19 + db 28,28,28,28,28,28,28,28,28,27,28,28,28,28,28,27 + db 28,28,28,28,28,27,28,28,28,28,28,28,27,28,28,28 + db 27,28,28,28,28,28,28,28,28,28,28,27,28,28,28,28 + db 28,28,28,28,28,27,28,28,28,29,28,27,28,28,28,29 + db 28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28 + db 28,28,28,27,27,27,28,27,28,29,28,28,28,28,28,28 + db 28,28,19,18,17,16,15,16,16,16,16,17,17,17,16,16 + db 16,15,15,15,15,15,15,16,16,17,17,18,18,19,19,20 + db 20,20,19,18,17,17,18,18,19,19,18,17,17,18,18,18 + db 19,19,19,19,19,18,17,16,17,17,16,16,16,16,17,17 + db 17,17,17,17,17,18,18,18,18,18,16,16,18,18,17,17 + db 17,17,17,17,16,16,16,15,15,14,14,14,15,16,17,19 + db 19,20,20,20,19,19,18,18,17,17,16,16,16,16,16,16 + db 16,17,18,18,18,17,16,15,16,17,17,17,17,17,18,18 + db 19,18,19,19,19,19,19,19,18,18,18,17,17,17,17,17 + db 17,17,17,18,19,18,17,18,18,18,17,17,16,16,16,17 + db 17,17,18,19,25,25,25,26,25,25,26,25,19,18,18,19 + db 19,19,19,19,19,19,18,18,18,17,18,17,18,18,18,19 + db 19,19,20,20,20,20,20,19,20,19,19,19,19,18,18,18 + db 17,17,18,18,18,18,18,18,19,19,18,18,18,19,19,18 + db 17,18,19,18,17,17,18,18,19,18,18,18,17,18,17,18 + db 18,18,19,19,20,20,20,19,19,18,18,18,18,18,17,17 + db 16,17,16,16,16,16,17,17,18,18,19,20,19,18,20,17 + db 18,17,16,18,17,17,16,17,18,18,18,18,19,19,19,19 + db 18,19,19,19,19,19,19,18,19,18,18,18,18,19,19,19 + db 20,20,19,18,18,17,16,17,18,18,18,18,18,18,17,16 + db 16,16,17,18,18,18,20,20,20,20,20,19,19,20,20,19 + db 18,18,18,19,19,18,18,18,17,17,17,17,17,18,18,18 + db 18,17,16,17,16,17,18,18,19,19,20,19,18,18,19,19 + db 20,20,19,18,18,18,17,16,18,19,18,18,17,16,17,18 + db 18,18,18,19,19,19,20,20,20,20,20,20,20,19,19,20 + db 20,20,19,19,19,19,19,19,19,18,18,18,18,18,17,17 + db 18,18,18,17,16,16,16,16,16,17,17,18,18,17,18,18 + db 18,19,19,19,18,18,17,18,18,18,18,18,18,17,17,18 + db 17,17,17,18,17,18,18,18,17,18,17,17,17,17,17,17 + db 17,17,17,17,17,17,17,17,17,17,18,18,18,18,18,18 + db 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19 + db 19,18,18,19,19,19,19,19,18,18,17,18,18,19,18,18 + db 18,17,17,17,18,18,18,19,18,17,17,18,18,19,19,18 + db 18,18,19,19,18,18,18,17,17,17,16,16,16,16,17,17 + db 17,18,19,27,27,27,27,27,27,27,27,27,27,27,27,27 + db 19,19,18,18,17,17,17,18,18,19,27,27,27,27,27,27 + db 28,27,28,27,27,27,27,27,27,27,28,28,28,27,28,28 + db 28,27,28,27,27,27,28,27,28,28,28,27,28,27,28,27 + db 27,27,27,27,27,28,19,19,18,18,17,17,17,18,19,19 + db 27,27,27,27,27,28,27,28,27,28,27,27,27,27,27,27 + db 27,19,18,18,17,17,17,17,17,16,15,16,17,18,18,18 + db 17,16,16,16,16,16,16,16,17,17,18,18,19,19,20,20 + db 20,19,19,17,16,15,14,14,14,15,15,16,16,16,17,17 + db 17,17,17,17,18,18,16,16,18,18,18,18,18,17,17,17 + db 17,18,18,18,18,19,19,19,19,18,15,16,19,19,18,18 + db 17,17,17,17,17,18,18,18,17,16,16,16,15,15,16,18 + db 19,20,21,20,19,19,19,18,18,17,17,16,16,17,17,18 + db 18,19,19,17,17,16,15,16,16,18,18,18,18,17,17,17 + db 18,19,18,18,18,18,18,18,18,18,18,18,18,18,18,18 + db 18,17,17,17,18,19,19,19,18,18,18,18,17,16,16,16 + db 16,16,16,16,16,16,17,18,19,24,25,19,18,18,19,18 + db 19,19,18,18,19,18,18,18,17,18,17,18,19,19,19,19 + db 18,18,19,19,19,19,18,18,18,18,18,18,18,18,18,18 + db 18,18,17,18,18,18,18,18,18,18,18,18,18,18,18,18 + db 18,18,18,19,18,18,18,18,18,17,18,18,17,18,17,18 + db 18,18,18,19,20,20,20,20,20,20,20,20,19,18,18,18 + db 17,17,18,18,18,18,17,17,17,17,18,19,20,20,20,18 + db 18,18,17,18,18,17,17,17,17,18,18,19,18,18,18,18 + db 19,19,19,18,18,19,18,19,18,18,18,19,19,19,20,20 + db 19,18,18,18,18,17,17,18,19,19,19,18,18,17,17,17 + db 17,17,16,16,17,18,18,18,19,19,19,20,20,19,19,19 + db 18,18,18,18,18,17,17,17,18,18,18,19,19,19,19,18 + db 18,18,17,18,16,16,17,18,18,19,20,19,18,18,19,19 + db 20,20,20,19,18,18,17,16,18,18,19,18,18,17,16,18 + db 18,19,19,19,19,19,19,19,19,19,19,19,18,18,19,19 + db 19,19,19,19,19,18,18,18,18,19,18,17,17,17,17,18 + db 18,19,18,18,18,18,17,17,17,16,16,17,17,18,17,18 + db 18,19,19,17,19,19,18,18,18,18,18,18,17,17,17,17 + db 18,17,17,17,17,18,18,17,17,18,17,17,18,18,18,18 + db 17,17,17,17,17,17,17,17,17,18,17,17,18,18,17,17 + db 18,18,18,18,18,17,17,18,18,18,18,18,18,18,18,17 + db 17,18,18,18,18,19,19,19,19,18,18,17,18,18,18,17 + db 17,18,18,17,17,18,18,18,19,18,18,17,18,18,19,17 + db 17,17,17,18,18,18,17,18,18,18,17,17,16,16,16,16 + db 16,16,17,17,18,19,27,26,27,27,19,19,18,18,17,17 + db 17,17,17,16,16,15,14,15,16,17,17,18,19,27,26,27 + db 26,27,26,27,27,26,27,27,26,26,26,27,26,26,27,26 + db 27,26,27,26,27,26,27,26,27,26,26,26,27,27,27,26 + db 26,26,27,27,19,18,17,17,16,15,14,14,14,14,15,16 + db 16,16,17,17,17,17,18,18,19,19,26,26,26,26,26,26 + db 19,18,17,17,17,18,18,18,18,16,16,15,16,17,17,19 + db 19,18,18,17,17,16,16,17,17,18,18,19,19,19,20,21 + db 20,19,18,16,15,15,16,16,16,17,18,18,18,17,17,17 + db 17,17,18,18,19,19,16,15,18,19,19,19,19,18,18,18 + db 18,19,19,20,20,20,20,19,18,17,15,17,19,19,19,18 + db 18,18,18,18,17,17,17,18,18,18,17,17,17,16,17,18 + db 19,19,20,21,20,20,19,19,19,18,18,18,18,19,19,19 + db 19,18,16,15,15,15,16,16,17,17,17,18,18,18,18,18 + db 17,18,19,19,18,18,18,18,19,19,19,19,20,20,20,20 + db 19,18,18,17,18,18,19,19,19,18,18,18,17,17,18,18 + db 18,17,17,17,16,16,16,16,16,16,17,17,18,18,18,19 + db 19,18,18,18,18,18,18,17,17,17,18,18,17,18,18,18 + db 18,18,18,18,17,18,18,18,18,17,18,18,18,18,18,17 + db 18,17,18,17,18,18,18,18,18,17,17,18,17,18,18,18 + db 18,18,18,18,18,18,18,18,17,18,17,17,18,17,18,17 + db 18,18,18,18,18,19,19,19,20,20,20,20,19,19,19,18 + db 18,18,17,18,19,18,18,18,18,18,17,17,18,20,20,19 + db 19,18,17,18,19,18,18,17,17,17,18,18,18,18,18,18 + db 18,18,18,18,18,18,18,18,18,18,18,19,19,19,19,18 + db 19,18,18,18,17,18,18,19,19,19,18,17,17,17,18,18 + db 18,18,18,18,17,17,17,18,18,18,19,19,18,18,18,18 + db 18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19 + db 19,18,17,18,17,16,16,18,18,18,19,19,18,18,18,19 + db 20,20,20,18,18,18,18,17,17,18,19,19,18,18,17,17 + db 18,18,18,18,18,18,18,18,18,19,18,19,17,17,18,18 + db 17,19,19,18,18,17,17,17,18,18,19,18,17,17,18,17 + db 17,19,19,19,18,18,18,17,17,17,17,16,16,17,17,18 + db 18,18,19,17,18,18,18,18,18,17,18,18,17,17,17,18 + db 17,17,16,17,18,17,18,17,17,18,18,17,17,18,17,18 + db 17,18,17,17,18,16,16,16,16,17,17,17,17,18,18,17 + db 17,17,17,17,17,18,18,17,17,18,17,17,18,18,17,17 + db 18,17,17,17,18,18,18,18,18,19,18,18,17,18,18,18 + db 18,17,17,18,17,17,17,17,18,19,18,18,17,17,18,18 + db 17,17,17,17,17,18,18,17,17,18,18,17,17,17,17,16 + db 16,16,16,16,17,17,18,18,18,17,17,17,17,17,18,18 + db 18,18,18,17,17,17,16,15,15,15,15,15,16,17,17,18 + db 19,26,26,26,26,26,25,26,26,26,26,26,26,26,25,26 + db 25,26,25,26,26,26,26,26,26,26,26,26,26,26,25,26 + db 26,26,18,17,17,17,16,16,16,16,16,15,15,14,14,14 + db 14,14,15,16,16,16,16,16,16,17,17,17,18,19,25,19 + db 18,17,18,18,18,18,18,17,17,17,16,16,15,15,15,16 + db 18,19,19,19,19,18,18,18,18,19,19,19,20,20,21,20 + db 19,19,18,17,16,17,17,17,18,18,18,17,17,17,18,18 + db 18,18,18,19,19,19,17,15,17,18,19,20,20,20,20,19 + db 19,20,20,21,21,20,19,19,17,17,16,17,19,20,19,19 + db 19,19,18,18,18,18,17,17,17,17,17,16,16,17,16,17 + db 18,20,21,21,21,20,20,19,20,20,20,20,20,20,19,18 + db 17,16,15,15,16,17,17,18,18,18,18,19,19,18,18,17 + db 17,18,18,18,19,19,19,18,18,18,18,19,19,19,19,20 + db 19,19,18,17,18,18,19,19,19,18,17,17,18,19,19,19 + db 19,18,18,18,17,17,16,17,17,16,16,16,16,17,18,18 + db 18,18,18,18,18,18,17,17,18,17,18,17,18,17,18,17 + db 18,18,18,17,17,17,18,18,17,18,18,18,17,18,17,18 + db 17,17,17,17,17,18,17,18,17,17,18,17,18,17,18,18 + db 17,18,17,17,17,18,17,17,18,17,17,17,18,17,17,18 + db 18,17,17,17,17,18,18,18,18,18,18,18,18,18,18,19 + db 19,18,18,17,19,19,19,19,18,19,19,17,18,19,20,20 + db 20,18,17,18,19,19,18,18,18,17,18,18,18,18,18,18 + db 18,18,18,18,18,18,18,18,18,18,19,18,18,19,18,19 + db 18,18,17,17,18,18,19,19,19,18,17,18,18,18,18,19 + db 18,19,19,18,18,18,17,17,18,18,18,18,18,18,18,18 + db 18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19 + db 19,19,18,19,17,17,16,17,18,18,18,19,19,19,18,19 + db 19,20,20,19,18,18,18,17,17,18,19,19,19,18,18,17 + db 17,18,18,18,18,18,17,18,18,18,18,19,17,18,17,17 + db 18,18,19,17,17,17,18,17,16,17,17,17,18,17,17,17 + db 18,17,19,19,19,19,18,18,18,17,17,17,17,17,17,17 + db 17,18,18,17,18,17,17,18,17,17,18,17,17,18,17,17 + db 17,17,17,16,17,17,17,17,17,17,17,18,17,17,18,17 + db 17,17,17,16,17,18,17,17,17,17,18,16,16,17,16,17 + db 17,16,16,17,17,17,17,17,17,17,17,18,17,17,18,18 + db 17,17,18,18,17,17,17,18,18,18,17,17,16,17,18,17 + db 18,18,18,17,16,17,17,18,17,17,18,17,18,17,17,17 + db 17,17,17,16,17,17,17,17,17,17,17,18,17,17,17,17 + db 17,17,17,16,16,16,17,17,17,17,18,18,18,18,18,18 + db 19,19,18,18,18,18,17,17,17,17,16,15,15,15,15,15 + db 15,16,17,17,18,19,26,25,26,25,25,25,25,25,25,25 + db 25,25,25,25,26,26,25,25,25,26,25,25,25,26,26,26 + db 18,17,17,17,16,16,16,17,17,17,17,17,16,15,15,15 + db 15,15,15,15,15,16,16,17,17,17,17,18,18,18,18,18 + db 18,17,17,18,18,19,19,18,18,18,18,17,17,16,15,15 + db 16,17,18,19,20,20,20,20,20,20,19,20,20,21,21,21 + db 20,18,17,16,17,16,16,17,17,17,17,17,18,18,18,18 + db 19,19,19,19,20,19,17,16,17,17,19,19,20,21,21,20 + db 20,19,19,18,18,18,17,17,17,17,17,18,19,20,20,19 + db 19,19,19,18,18,17,17,17,17,18,18,17,17,16,15,16 + db 18,19,19,19,20,21,21,21,21,20,20,19,19,18,17,16 + db 16,17,17,18,18,18,18,18,18,19,19,18,18,18,17,17 + db 16,16,15,15,16,17,18,19,19,19,19,18,18,18,19,19 + db 19,19,18,18,18,19,19,18,18,18,18,18,18,18,19,19 + db 19,19,19,19,18,18,17,16,18,18,18,18,18,17,17,17 + db 17,18,18,18,17,17,17,18,17,17,17,17,17,17,17,17 + db 17,17,17,17,17,18,17,17,18,18,17,17,18,18,17,17 + db 17,17,17,17,18,17,17,17,17,17,17,17,17,17,17,17 + db 18,17,17,17,17,17,17,17,17,17,17,18,17,17,17,17 + db 17,17,17,17,17,17,18,18,18,17,18,18,18,18,18,18 + db 18,19,19,18,18,18,19,19,19,19,19,19,20,20,20,20 + db 20,19,18,18,19,20,20,20,20,19,18,18,17,18,18,18 + db 18,18,17,18,18,18,18,18,18,18,18,18,18,18,18,18 + db 18,18,18,18,18,18,18,19,18,18,18,18,19,19,19,19 + db 19,19,19,19,19,18,18,18,17,17,18,18,18,17,18,18 + db 18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,19 + db 19,19,19,19,18,18,17,16,17,18,18,18,18,18,18,19 + db 19,19,19,18,19,18,18,18,17,18,18,19,19,19,18,18 + db 17,18,18,18,18,18,18,18,18,18,17,17,18,17,17,17 + db 17,19,18,17,17,17,18,18,16,17,16,18,17,16,17,17 + db 17,18,17,17,19,19,19,18,18,17,17,17,17,17,16,16 + db 17,17,17,17,17,17,16,17,17,18,17,17,17,17,17,17 + db 16,16,16,16,16,17,17,17,17,17,17,17,16,16,16,16 + db 16,16,16,17,16,17,17,17,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,17,17,17,16,16,16,17,17,17,17 + db 17,18,17,17,17,17,17,17,17,17,18,17,17,16,17,17 + db 17,17,18,17,17,16,17,17,17,17,17,17,17,18,17,17 + db 16,17,17,17,16,16,17,17,17,16,17,17,17,16,17,17 + db 18,18,18,18,17,17,17,16,17,17,18,18,18,18,18,18 + db 18,18,19,19,18,18,18,18,18,17,17,16,16,16,16,16 + db 15,15,15,15,16,16,16,17,18,18,25,25,25,24,24,24 + db 25,25,25,24,24,24,24,24,25,24,25,24,25,24,17,17 + db 16,16,15,16,16,16,17,16,16,17,18,18,18,17,17,16 + db 16,16,16,16,16,17,17,17,18,18,18,18,17,16,15,15 + db 16,16,17,17,18,18,18,19,19,18,18,18,18,18,18,17 + db 17,16,16,17,18,19,19,20,20,21,21,21,21,20,19,19 + db 19,18,16,15,16,17,17,18,18,17,17,17,17,18,18,19 + db 19,19,19,20,20,19,18,17,17,17,17,17,18,18,18,19 + db 19,21,20,20,19,19,19,18,17,17,18,19,20,21,20,20 + db 19,19,18,18,18,18,18,18,19,19,19,18,17,17,17,16 + db 17,18,19,20,20,21,20,20,19,19,19,18,17,17,18,18 + db 18,18,18,18,18,18,18,18,19,19,18,17,16,16,16,16 + db 17,17,17,16,15,14,14,15,16,17,18,19,19,19,18,18 + db 18,18,18,18,18,18,18,18,18,18,18,17,18,18,18,17 + db 17,18,18,18,18,18,18,17,17,18,18,18,18,18,18,18 + db 18,18,18,17,17,17,17,17,17,17,17,16,17,17,17,16 + db 17,17,17,17,17,16,17,18,18,17,17,17,17,17,17,16 + db 17,17,17,17,17,17,16,17,17,17,16,16,17,16,16,17 + db 17,17,17,17,17,17,16,17,17,16,17,17,17,17,17,17 + db 17,17,17,17,18,18,17,17,17,18,17,17,18,18,17,18 + db 18,18,19,18,18,18,19,19,18,19,18,18,18,19,19,19 + db 20,20,19,19,19,19,18,19,19,18,17,17,18,18,18,18 + db 17,17,18,18,17,17,18,18,17,18,18,17,17,18,18,17 + db 18,18,18,17,18,18,18,18,18,18,18,18,18,18,18,18 + db 18,19,19,19,19,18,18,18,17,18,18,18,17,17,18,18 + db 18,17,17,18,18,18,17,17,18,18,18,18,18,18,18,18 + db 18,18,18,19,19,19,19,18,17,17,17,18,18,18,18,18 + db 18,19,19,18,18,18,18,18,18,18,18,19,19,19,18,18 + db 18,17,18,18,18,17,18,17,18,18,18,17,17,18,17,17 + db 17,17,17,18,17,17,17,17,17,16,16,17,17,16,16,16 + db 18,17,17,18,17,18,18,17,17,17,17,17,16,16,17,17 + db 16,17,17,17,17,16,17,16,17,17,17,16,17,16,16,16 + db 17,16,16,17,16,17,16,16,16,16,16,16,16,17,17,17 + db 17,17,16,16,16,16,17,17,17,17,17,17,17,16,16,16 + db 16,16,16,16,15,15,16,16,16,16,16,16,16,16,16,16 + db 17,17,17,16,16,16,17,17,17,17,17,17,17,17,16,16 + db 17,17,17,17,17,17,16,16,16,17,17,17,17,17,17,17 + db 17,16,17,17,17,17,16,17,17,17,16,16,17,17,16,16 + db 17,17,18,18,18,17,16,17,17,17,16,17,17,17,17,17 + db 17,17,17,18,18,17,17,17,17,17,17,17,16,16,17,17 + db 17,17,16,16,15,15,15,16,16,16,16,17,18,24,24,23 + db 24,23,23,24,23,23,24,24,23,24,24,18,17,17,16,16 + db 16,15,16,16,15,16,16,16,16,16,16,16,17,18,18,18 + db 17,17,17,17,17,17,18,18,17,16,15,14,14,15,16,17 + db 17,17,16,16,16,16,17,18,19,19,18,18,18,18,18,18 + db 18,18,18,18,17,17,18,19,19,19,20,20,21,20,20,19 + db 18,17,16,17,17,17,18,19,19,19,18,18,18,18,18,18 + db 19,19,20,20,21,20,19,18,17,17,18,19,19,19,20,20 + db 21,20,19,19,19,18,18,18,19,19,19,20,21,20,20,19 + db 19,18,18,18,17,17,16,16,16,16,15,15,16,16,16,17 + db 17,18,19,19,20,20,20,20,20,20,20,19,19,19,18,18 + db 18,18,18,18,18,19,19,19,18,17,16,16,17,17,17,17 + db 18,19,18,17,17,16,15,14,14,15,16,16,18,18,19,19 + db 19,19,18,18,18,18,18,18,18,18,18,18,17,17,17,18 + db 18,17,17,18,17,17,18,18,18,18,18,17,18,17,17,18 + db 17,17,17,17,16,16,17,17,17,16,16,17,17,16,16,17 + db 16,16,17,16,16,17,17,17,17,17,17,16,17,17,16,17 + db 17,17,16,17,17,16,16,17,16,16,17,16,16,17,17,17 + db 16,17,16,17,16,16,17,17,16,17,17,17,17,16,16,17 + db 16,17,17,17,16,17,17,17,17,17,17,17,17,17,18,18 + db 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18 + db 19,19,19,19,18,18,18,18,17,17,18,18,18,17,17,17 + db 17,17,17,17,18,18,17,17,17,17,17,18,18,18,17,18 + db 18,17,17,18,18,18,18,18,17,17,18,17,17,17,17,18 + db 18,18,18,18,18,18,17,17,18,17,17,17,18,18,17,17 + db 17,18,17,17,17,17,17,17,17,18,18,18,17,18,18,18 + db 18,18,18,18,18,18,18,18,18,18,17,17,17,18,18,18 + db 18,18,18,18,18,18,17,18,17,18,18,18,19,19,18,18 + db 18,18,18,17,17,17,17,17,18,18,17,17,17,17,17,16 + db 17,17,16,16,17,16,16,16,16,16,17,16,17,17,16,16 + db 16,17,16,16,17,17,16,16,16,16,16,16,16,16,17,17 + db 17,16,16,16,16,16,16,17,16,16,17,17,16,17,17,16 + db 16,17,17,17,17,16,16,16,17,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,17,17,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,15,15,16,16,16,16,15,15,16,16 + db 16,16,16,17,17,17,16,16,16,16,16,16,17,17,17,17 + db 16,16,16,17,17,17,16,16,17,16,16,16,16,17,17,17 + db 16,16,16,17,16,16,16,16,16,17,16,17,16,17,16,16 + db 16,17,17,17,17,17,17,16,16,17,17,16,16,17,17,17 + db 16,16,17,17,17,17,17,16,16,16,17,17,17,17,16,17 + db 17,17,17,16,16,16,16,15,16,16,16,16,16,16,16,17 + db 18,23,23,23,23,23,23,23,23,18,17,16,16,16,16,15 + db 14,14,15,15,14,14,14,15,15,15,16,17,17,17,18,18 + db 18,18,18,18,18,18,17,16,15,14,14,15,16,17,17,18 + db 19,18,17,17,17,17,16,16,17,18,19,19,19,18,18,18 + db 18,18,18,18,19,19,19,20,20,20,20,20,20,20,19,19 + db 18,17,17,16,16,16,15,15,16,16,16,16,17,17,18,18 + db 18,19,19,20,20,21,20,19,19,19,18,18,18,19,19,19 + db 20,19,19,18,18,18,19,19,19,20,20,21,21,19,19,18 + db 18,17,17,17,18,18,18,18,18,18,18,18,18,17,16,16 + db 17,17,18,19,19,19,19,20,20,21,20,20,19,19,19,19 + db 19,19,19,19,19,18,18,18,17,17,17,18,18,18,18,17 + db 16,16,17,16,14,15,16,17,16,15,14,15,16,16,17,18 + db 18,18,17,17,16,16,16,16,16,17,17,18,17,17,17,17 + db 16,16,16,17,17,18,17,17,17,17,17,17,17,17,17,16 + db 16,17,16,16,16,16,17,16,16,16,16,17,16,16,16,16 + db 16,16,16,17,16,16,16,17,17,16,16,16,17,16,16,15 + db 16,16,16,16,16,16,16,16,17,16,16,16,16,16,16,16 + db 16,16,16,16,17,16,16,17,16,16,16,16,16,16,17,16 + db 16,16,16,16,17,17,17,18,17,17,17,17,17,17,17,18 + db 18,17,17,18,17,18,18,18,18,17,17,17,17,18,17,18 + db 18,18,18,18,18,17,17,17,18,18,18,17,17,16,17,17 + db 17,17,17,18,17,17,17,17,17,18,17,17,17,17,17,17 + db 17,17,17,17,18,18,17,17,17,17,17,17,17,17,17,18 + db 17,17,18,18,17,17,17,17,17,17,17,17,17,16,16,17 + db 17,17,17,17,17,17,17,17,18,18,17,17,17,17,18,18 + db 17,18,18,18,18,18,18,18,18,18,17,17,18,17,18,17 + db 17,18,18,18,18,17,18,17,18,18,18,18,19,18,18,18 + db 18,18,17,17,17,17,17,17,17,16,17,17,17,16,16,17 + db 16,16,15,16,16,16,17,17,16,18,16,16,18,17,16,16 + db 16,16,16,16,16,16,17,16,16,16,17,17,16,16,16,16 + db 16,16,16,17,17,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,15,15,16,16,16 + db 15,15,16,16,15,15,16,16,16,16,16,16,16,15,16,16 + db 16,16,16,16,16,16,16,16,15,15,15,16,16,16,15,15 + db 16,16,16,16,17,17,17,17,17,17,16,16,16,16,16,16 + db 17,17,17,16,16,16,16,16,16,16,17,16,16,16,16,16 + db 17,17,16,16,17,16,16,15,15,16,16,16,17,16,17,16 + db 16,16,16,16,16,16,16,16,17,16,16,15,15,16,16,16 + db 17,17,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,17,17,17,17,16,16,16,15,15,16,15,15,15,16,16 + db 16,16,16,17,18,22,18,17,17,16,16,15,15,15,14,14 + db 14,15,15,15,15,15,15,15,15,15,15,15,15,16,16,17 + db 18,18,17,17,16,16,15,14,15,16,17,16,15,14,16,17 + db 16,16,17,18,18,18,18,17,17,17,18,18,18,19,19,19 + db 19,19,19,19,19,19,20,20,21,20,20,19,19,19,19,18 + db 17,17,16,16,17,18,18,18,18,18,18,18,18,18,17,17 + db 17,18,18,19,19,21,21,20,20,19,19,19,18,18,18,19 + db 19,19,19,19,20,20,20,20,21,21,21,21,20,19,19,19 + db 18,18,18,18,18,18,19,19,19,18,18,18,18,18,18,17 + db 16,16,18,19,19,19,19,19,19,19,20,20,21,20,20,20 + db 20,20,20,19,19,19,18,18,17,17,18,18,19,19,19,18 + db 17,17,16,16,15,16,17,17,16,16,15,15,15,15,16,16 + db 16,17,18,18,18,18,17,17,16,16,15,15,15,15,16,16 + db 16,16,16,16,16,16,17,16,16,16,16,16,16,16,16,16 + db 16,16,16,15,16,16,16,16,16,17,16,16,16,16,16,15 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,15,15,16 + db 16,16,16,16,16,15,15,16,16,16,15,15,15,15,16,15 + db 16,16,16,16,16,16,15,16,16,16,15,15,16,16,16,16 + db 16,16,16,16,16,16,17,16,16,16,16,16,17,17,17,17 + db 17,17,17,17,16,16,16,17,17,17,17,17,16,16,17,17 + db 17,17,17,17,17,17,17,17,18,17,17,17,16,17,17,17 + db 17,17,17,17,17,17,17,17,17,16,16,17,17,17,16,16 + db 16,16,16,16,17,17,17,16,16,17,16,17,16,17,17,17 + db 17,17,16,16,17,17,17,17,17,17,16,16,16,17,16,17 + db 17,17,16,16,16,17,17,17,16,16,17,17,17,18,17,17 + db 18,18,17,17,18,18,17,17,17,17,18,17,17,17,17,18 + db 18,17,17,17,17,17,17,17,18,18,17,18,18,18,17,18 + db 17,17,17,17,17,17,16,16,16,17,17,16,16,16,16,16 + db 16,15,16,16,16,16,16,16,16,16,16,16,16,17,16,16 + db 16,16,17,16,16,16,16,16,16,16,16,16,16,17,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,15,15,15,15,15,16,15,15,15,16,16,15,15,15 + db 15,15,15,15,16,15,15,15,15,15,15,15,15,16,16,16 + db 15,15,15,16,16,15,15,15,16,16,15,15,15,15,15,15 + db 15,15,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,17,17,17,17,16,16,17,16,16,16,15,16,15 + db 16,16,17,17,16,16,16,16,16,15,15,16,16,16,16,16 + db 15,15,15,15,16,16,16,16,16,15,15,15,16,16,16,16 + db 16,16,16,16,16,16,16,15,15,16,16,16,15,15,16,16 + db 16,15,15,16,16,16,15,16,16,15,15,16,15,15,15,15 + db 15,15,16,16,16,16,16,16,16,15,15,15,15,15,15,15 + db 15,15,14,14,14,14,14,15,16,16,17,17,18,18,18,18 + db 17,16,16,16,15,15,15,15,16,16,17,17,16,15,16,16 + db 17,17,18,19,19,19,18,18,17,17,18,18,19,19,19,20 + db 20,20,20,20,20,21,20,20,19,19,19,19,19,19,19,18 + db 16,16,17,18,18,18,18,18,18,19,19,19,18,18,18,18 + db 18,18,19,19,19,20,21,21,21,21,20,20,20,20,19,19 + db 19,20,20,20,20,19,19,19,19,19,19,19,19,20,20,19 + db 19,19,19,19,19,19,19,19,19,19,19,18,19,18,18,18 + db 17,16,16,16,17,18,18,18,19,19,20,20,20,21,21,20 + db 19,20,20,20,19,19,18,17,18,19,19,20,20,19,18,17 + db 16,16,16,17,17,18,18,16,17,16,15,16,17,17,18,18 + db 18,18,18,17,16,16,16,16,17,17,18,18,18,16,15,14 + db 14,15,15,16,16,16,16,16,16,16,15,15,16,16,16,16 + db 16,16,15,16,16,16,16,16,16,16,16,16,16,15,15,16 + db 15,15,15,15,16,15,15,14,15,15,15,16,15,16,15,15 + db 15,14,15,15,15,15,15,15,15,15,14,14,15,15,15,16 + db 16,15,15,16,16,15,15,15,15,15,15,15,15,16,15,15 + db 15,15,15,15,16,16,16,16,16,16,17,16,16,17,16,16 + db 16,16,16,16,17,17,17,16,17,16,16,16,16,16,17,16 + db 16,16,17,16,16,17,17,16,16,17,17,16,17,17,17,17 + db 16,16,16,17,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,15,16,16,16,16,16,16,16,16,17,17,17,16 + db 16,16,17,17,16,16,16,16,16,16,17,16,16,16,16,17 + db 17,17,16,16,17,17,16,16,16,17,16,16,16,17,17,17 + db 17,17,17,17,17,17,17,17,17,17,16,16,17,17,17,17 + db 17,17,16,16,17,17,17,17,17,17,17,17,17,17,17,17 + db 17,17,17,16,16,16,16,16,17,16,16,16,15,16,16,17 + db 16,16,16,16,16,15,15,16,16,16,16,16,16,16,16,16 + db 15,16,16,16,16,16,16,15,15,15,16,16,16,15,15,15 + db 16,16,15,15,15,15,15,15,15,15,16,15,15,16,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + db 14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + db 15,16,16,15,15,15,15,15,15,15,15,15,15,15,16,16 + db 16,15,15,15,15,16,16,16,15,15,15,15,16,16,16,15 + db 15,15,16,16,16,16,16,16,16,16,16,16,16,16,15,15 + db 15,15,16,16,16,15,15,15,15,15,15,15,15,15,15,15 + db 16,16,15,15,16,16,15,16,15,15,15,16,15,15,16,16 + db 16,16,16,15,15,15,15,16,16,15,15,16,16,16,15,15 + db 15,16,16,15,15,16,16,15,15,15,15,15,15,14,14,14 + db 14,14,14,14,14,15,15,15,14,15,15,14,14,15,15,14 + db 14,14,15,16,16,17,18,18,17,17,16,16,16,16,17,18 + db 18,18,18,18,17,17,16,15,16,17,16,18,18,17,17,16 + db 16,16,17,18,19,20,20,19,19,18,17,18,19,19,20,20 + db 20,19,20,21,21,20,20,20,19,19,18,18,18,17,16,16 + db 16,17,18,18,18,19,18,19,19,19,19,19,19,19,19,19 + db 19,19,19,20,20,19,19,19,19,19,19,19,19,20,20,20 + db 20,19,19,19,19,19,19,19,19,18,18,18,18,19,19,20 + db 20,21,20,20,19,19,19,20,20,19,19,19,19,19,19,19 + db 18,18,17,16,16,15,16,16,17,17,18,18,18,19,19,19 + db 19,19,19,18,17,17,17,18,18,19,19,19,18,18,17,17 + db 17,17,17,18,18,18,17,16,16,17,17,18,18,18,18,19 + db 19,18,18,18,18,18,17,17,16,16,16,15,16,17,18,18 + db 16,15,14,15,15,15,14,15,15,15,14,15,14,16,15,15 + db 15,15,15,15,15,15,16,15,15,15,15,15,15,15,15,15 + db 15,16,15,15,15,15,15,15,15,16,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,14,16,15,15,15,16,16,15,15,16,16,16,16,15 + db 15,15,15,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,17,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,15,15,15,16 + db 16,16,16,16,16,15,15,16,16,17,17,17,16,16,16,16 + db 16,16,16,16,16,16,16,15,15,16,16,16,16,17,17,16 + db 16,16,16,16,16,16,16,17,16,16,16,17,17,16,16,16 + db 17,17,17,17,16,16,17,16,16,16,16,16,17,17,17,16 + db 16,16,17,17,17,16,16,17,17,17,17,16,16,17,17,16 + db 16,16,16,16,15,16,16,16,16,16,15,16,16,16,16,16 + db 15,15,16,15,15,16,16,16,16,15,15,16,16,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,16,16,16,16,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,15,14,14,14 + db 15,15,15,15,15,15,15,15,15,14,15,15,14,15,15,15 + db 16,15,15,15,15,15,15,15,16,16,15,15,15,15,15,15 + db 15,15,16,15,15,15,15,15,15,15,15,15,15,15,16,16 + db 16,16,15,15,15,15,15,15,15,15,15,15,15,16,16,16 + db 15,15,15,15,16,15,15,15,15,15,15,15,15,16,15,15 + db 15,15,16,16,15,15,15,15,15,14,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,16,15,15,15,15,16 + db 16,16,16,15,15,15,15,15,15,15,15,15,14,15,15,14 + db 14,15,15,15,15,14,14,14,14,14,14,15,15,14,14,14 + db 15,16,18,18,17,16,15,16,16,16,17,17,18,18,18,18 + db 18,19,19,18,18,18,18,17,17,16,16,17,18,18,18,17 + db 17,17,17,17,18,18,19,19,19,18,18,17,17,17,18,19 + db 19,19,19,19,19,18,18,18,17,17,16,16,15,16,16,17 + db 18,18,19,19,19,19,19,19,19,20,20,19,19,19,20,20 + db 21,20,20,19,19,18,18,18,18,19,19,19,19,19,19,19 + db 19,18,18,18,17,17,16,16,16,17,17,17,18,18,19,19 + db 20,21,21,21,21,20,20,19,18,18,18,19,19,18,18,18 + db 18,18,18,18,18,18,18,19,19,19,19,20,20,20,20,19 + db 18,18,17,17,17,16,15,15,15,14,15,16,17,18,19,19 + db 19,18,18,17,16,15,16,17,18,18,19,19,19,18,19,20 + db 21,20,20,19,19,18,18,17,17,17,16,16,16,15,15,16 + db 17,18,16,15,14,15,15,15,14,15,15,15,15,15,14,15 + db 15,15,15,15,15,15,15,14,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,14,15,15,14,14 + db 14,14,14,15,15,15,15,14,15,15,15,15,15,14,15,15 + db 14,14,15,14,15,15,14,14,15,15,14,14,15,15,14,15 + db 14,14,15,15,15,14,15,15,15,15,15,15,15,15,15,15 + db 15,16,16,15,15,15,15,16,16,15,15,15,15,15,15,16 + db 16,16,16,16,16,16,16,17,16,16,16,15,15,16,16,16 + db 15,16,16,16,16,16,16,15,15,15,15,15,15,15,16,16 + db 15,15,16,15,15,16,16,16,16,16,16,16,15,15,15,15 + db 16,16,16,16,16,15,15,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,15,16,16,16,16,17,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,15,16,15,16,16,16,16,16 + db 16,16,16,16,16,17,16,16,16,16,15,16,16,16,16,16 + db 16,16,16,16,16,16,16,15,16,16,16,15,15,15,15,15 + db 16,16,15,15,15,15,15,15,15,15,15,15,15,15,16,16 + db 16,16,16,15,15,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,14,14,14,14,14,14,15,15 + db 15,14,14,14,14,15,15,14,14,14,14,14,14,14,14,14 + db 14,15,15,15,15,14,15,15,15,15,15,15,14,14,14,15 + db 15,15,15,16,15,15,15,14,14,15,15,15,15,15,15,15 + db 15,15,15,15,15,16,16,16,15,16,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,14,15,15,15,15 + db 15,16,15,15,15,15,15,15,15,15,14,15,15,15,15,15 + db 15,15,15,16,16,16,16,16,16,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,14,14,15,15,14,14,14 + db 14,14,14,14,14,14,13,13,13,13,14,14,14,14,15,16 + db 18,17,16,15,15,16,16,16,17,17,17,18,18,19,19,20 + db 20,21,20,19,18,19,19,19,18,18,17,16,15,16,17,18 + db 18,19,19,19,18,17,16,15,14,15,15,15,16,17,17,17 + db 18,18,19,20,20,20,20,19,19,19,19,18,18,18,18,18 + db 18,18,18,18,18,19,19,18,18,18,19,20,20,21,21,21 + db 21,20,19,19,18,18,17,17,17,16,16,16,17,17,18,18 + db 18,17,17,17,17,17,17,17,18,18,18,19,19,18,17,18 + db 19,20,20,21,21,21,20,19,19,20,20,19,19,19,19,19 + db 19,20,20,20,20,20,19,19,19,19,19,19,19,19,18,18 + db 17,16,16,15,15,16,16,17,17,17,15,15,17,18,19,18 + db 17,17,16,16,17,17,18,18,19,20,19,18,18,19,20,20 + db 20,19,19,18,18,17,17,17,16,16,16,15,15,15,14,14 + db 15,16,17,18,15,14,14,14,15,15,15,14,14,14,15,15 + db 14,14,15,15,15,15,15,15,15,14,15,15,15,14,14,15 + db 15,14,14,14,14,15,14,15,14,14,14,14,14,14,14,14 + db 14,15,15,14,14,14,14,14,14,14,15,14,15,15,15,14 + db 14,15,14,14,14,14,14,14,14,14,14,14,14,14,14,14 + db 14,15,15,14,15,15,15,15,15,15,15,15,14,14,14,15 + db 15,15,15,15,15,15,15,15,15,15,15,16,16,16,15,15 + db 15,16,16,15,15,15,16,16,15,15,15,15,15,15,15,16 + db 16,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + db 14,15,15,15,16,15,15,16,15,15,15,15,15,15,15,15 + db 16,16,15,15,15,15,15,15,15,15,15,15,16,16,16,15 + db 16,16,16,15,16,16,16,15,15,16,16,16,16,16,16,15 + db 15,16,16,16,16,16,16,15,15,15,16,16,16,16,16,15 + db 15,16,16,16,16,16,16,16,16,15,16,16,15,15,16,16 + db 16,16,15,15,15,15,15,15,15,15,15,15,15,15,16,16 + db 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,14,14,14,14,15,15,15,14,14,14 + db 14,15,15,15,14,14,14,14,14,14,14,14,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,14,14,14,15,15,14,14 + db 14,14,14,14,15,14,15,15,15,15,14,14,14,14,14,14 + db 14,14,14,14,15,15,14,14,15,15,15,15,15,15,15,15 + db 16,16,16,16,15,15,15,15,15,14,14,14,14,15,14,14 + db 14,14,14,15,15,15,15,15,15,15,16,16,15,15,15,14 + db 14,14,14,14,14,15,15,15,15,15,15,15,14,15,14,15 + db 15,15,15,15,15,15,14,14,14,14,15,15,14,15,15,14 + db 14,15,15,15,15,15,15,15,15,15,14,15,15,15,15,15 + db 15,14,15,15,15,14,14,14,14,14,14,14,14,14,14,14 + db 13,13,13,13,13,13,14,14,14,14,14,14,14,16,18,17 + db 16,15,14,14,15,15,15,16,16,16,17,17,17,18,18,19 + db 19,20,20,20,19,18,18,19,20,19,18,18,17,17,16,16 + db 17,17,18,19,18,17,15,15,17,17,17,16,16,15,15,16 + db 16,17,18,18,19,19,19,19,19,19,19,19,20,20,20,20 + db 20,19,19,19,19,19,19,20,20,19,19,20,21,21,21,20 + db 20,19,18,17,18,19,19,18,18,18,17,17,17,17,17,17 + db 17,18,17,17,17,18,18,19,19,20,20,20,20,19,18,17 + db 18,19,20,21,20,21,21,21,21,21,21,20,20,20,19,20 + db 20,20,19,19,19,19,18,19,20,19,19,19,18,18,17,16 + db 16,17,17,18,18,19,19,19,18,17,16,15,16,17,18,18 + db 18,18,18,18,18,18,19,19,20,21,21,21,20,19,18,18 + db 18,17,17,17,17,18,18,18,17,17,17,17,17,16,16,15 + db 14,15,16,17,18,15,16,17,17,17,16,15,14,14,14,14 + db 14,15,14,15,15,14,15,14,15,15,14,15,14,15,15,14 + db 14,14,14,14,15,14,14,14,14,14,13,13,14,14,14,14 + db 14,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14 + db 14,14,13,13,13,13,12,12,12,12,13,13,14,14,14,14 + db 14,14,15,15,14,14,14,14,14,14,13,13,13,14,14,15 + db 15,14,15,15,15,15,15,15,15,16,16,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,16,16,16,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,14,14,15,15,14,14,14,14 + db 14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,14,15,15,15,15,15,15,15 + db 15,15,15,16,16,15,15,16,16,15,15,15,16,15,15,15 + db 16,15,15,15,15,15,15,15,15,15,15,15,15,15,15,16 + db 16,16,16,16,16,16,15,15,16,16,15,15,15,15,16,15 + db 15,15,15,15,15,15,15,14,15,15,15,14,14,15,15,15 + db 15,15,15,15,15,14,14,15,15,15,15,15,14,14,15,15 + db 14,14,14,14,15,15,15,15,14,14,14,14,14,14,14,15 + db 15,14,14,14,14,14,14,14,13,13,13,13,13,13,13,13 + db 13,12,12,12,12,13,13,13,14,14,14,14,14,14,14,14 + db 14,14,15,15,15,15,14,14,14,14,15,15,15,15,15,15 + db 15,15,15,14,15,14,14,14,14,14,14,14,14,14,15,15 + db 15,15,15,15,15,14,14,14,14,14,14,14,15,15,15,16 + db 16,15,15,14,14,15,15,15,14,15,15,15,16,15,15,15 + db 15,15,15,15,15,14,14,14,15,15,14,14,14,14,15,15 + db 15,15,14,14,14,14,14,14,14,15,14,14,15,15,15,15 + db 15,14,14,14,14,14,14,14,14,14,15,15,15,14,14,14 + db 15,15,15,15,15,15,15,14,14,14,13,13,13,13,13,13 + db 14,14,14,14,14,14,13,13,13,14,14,14,16,18,17,16 + db 15,14,15,16,16,17,17,17,17,17,18,18,18,17,17,17 + db 17,18,18,18,19,20,21,21,21,20,19,19,18,18,18,18 + db 18,18,18,18,17,16,15,16,17,18,19,19,19,18,18,17 + db 17,16,16,17,18,18,19,19,19,20,19,18,19,19,19,19 + db 20,20,20,19,20,20,20,21,21,21,21,21,21,20,21,20 + db 19,18,17,18,19,20,20,20,20,19,19,18,18,17,17,17 + db 18,18,18,18,19,19,20,20,21,21,21,21,20,20,19,18 + db 17,18,19,19,19,20,20,20,20,20,20,19,19,19,19,18 + db 18,18,18,18,18,18,19,20,20,19,19,18,18,17,17,18 + db 18,18,17,17,16,16,15,16,17,17,17,16,15,16,17,17 + db 18,18,19,19,19,20,21,21,21,20,19,19,18,18,18,18 + db 18,18,19,20,20,20,19,19,18,18,16,16,15,15,15,14 + db 13,14,15,16,17,18,17,16,15,16,17,17,17,16,15,14 + db 14,14,14,14,14,14,15,15,14,14,14,14,14,14,14,14 + db 14,14,14,14,14,14,13,13,13,13,14,14,13,13,13,13 + db 13,14,14,14,14,14,13,13,13,13,13,12,12,12,12,13 + db 13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,15 + db 15,15,15,15,15,15,14,13,12,12,12,13,13,14,14,14 + db 15,15,15,15,14,14,14,13,13,13,13,13,13,13,14,14 + db 14,14,14,14,15,15,16,16,15,15,15,15,15,15,15,14 + db 14,14,14,15,15,14,14,14,14,14,14,14,14,14,14,15 + db 15,15,15,15,15,15,15,15,15,14,14,14,14,14,15,15 + db 14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15 + db 15,14,14,14,15,15,15,14,15,15,14,14,14,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,16,16,15,15 + db 16,15,15,15,15,15,15,15,14,15,15,15,15,15,14,15 + db 14,14,15,15,14,14,15,15,15,14,14,14,15,15,14,14 + db 14,15,15,14,14,15,15,14,14,14,14,14,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14 + db 13,13,13,13,13,12,12,12,12,12,13,13,13,13,13,13 + db 14,14,14,14,14,14,14,15,15,14,14,14,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,15,15,15,15,15,14,14 + db 14,14,14,14,14,15,15,14,15,15,15,15,14,14,14,15 + db 15,15,15,15,15,14,15,15,15,15,15,15,15,15,15,15 + db 15,15,14,14,14,15,15,15,15,14,14,15,15,15,14,14 + db 13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14 + db 14,14,14,14,14,14,13,13,13,13,13,14,14,14,14,14 + db 14,14,14,14,14,14,14,13,13,13,14,14,14,14,14,14 + db 13,13,13,14,13,13,14,14,14,14,15,16,18,17,16,15 + db 14,13,14,15,15,15,16,16,18,18,19,19,20,20,20,19 + db 18,18,18,18,18,18,19,19,20,21,21,21,20,19,19,19 + db 18,18,17,17,16,15,16,17,17,17,16,15,16,16,17,17 + db 18,18,18,17,17,18,18,19,19,20,20,19,18,18,18,18 + db 18,18,18,19,19,19,19,20,20,20,20,20,20,19,19,19 + db 18,17,18,19,20,20,21,21,21,21,20,20,19,19,18,18 + db 18,18,19,19,20,21,21,21,21,21,21,21,21,20,20,19 + db 18,17,17,18,19,19,19,19,19,19,19,19,19,18,18,18 + db 18,18,19,19,20,20,19,19,18,18,18,17,17,18,18,18 + db 19,19,18,18,19,19,18,18,18,17,16,16,17,17,16,17 + db 17,18,18,18,18,18,18,19,19,20,20,21,20,20,19,19 + db 20,20,20,19,18,16,16,16,16,17,18,18,17,17,16,15 + db 15,16,17,16,15,16,18,16,16,15,14,15,16,17,17,16 + db 15,14,14,14,14,15,15,14,14,14,14,14,13,13,13,13 + db 13,13,13,13,13,13,14,14,14,14,13,13,12,12,12,13 + db 13,14,13,13,13,13,13,13,14,14,14,14,14,14,14,13 + db 13,13,13,13,14,13,13,14,14,15,15,15,15,15,15,14 + db 14,14,14,13,13,13,13,13,14,14,14,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,16 + db 16,16,15,15,15,15,15,15,15,15,15,15,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,14,13,13,13,13,13,14 + db 14,14,14,14,14,14,14,14,14,14,14,14,14,14,13,13 + db 13,13,14,14,14,14,14,14,14,15,15,15,14,14,14,14 + db 14,15,15,15,14,14,15,15,14,14,14,14,15,14,14,14 + db 15,15,15,14,14,14,14,14,14,14,14,14,14,14,14,14 + db 14,14,14,14,15,15,14,14,14,14,14,14,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,14,14,14,13,13,13,13 + db 13,13,13,13,12,12,12,12,12,12,12,12,13,13,13,13 + db 13,13,13,14,14,14,14,15,15,15,15,15,15,14,14,14 + db 14,14,14,14,13,13,13,13,13,13,14,14,14,14,14,14 + db 14,14,14,14,14,15,15,14,14,14,13,13,13,13,13,13 + db 13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14 + db 14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,14 + db 14,14,14,14,14,14,15,15,15,14,14,14,14,14,14,15 + db 15,15,15,15,15,14,14,14,14,14,14,14,14,14,14,14 + db 14,14,14,15,15,15,15,14,14,14,13,13,13,13,13,13 + db 13,14,14,14,14,14,14,14,14,14,14,14,13,13,13,13 + db 13,13,13,14,14,14,15,15,15,15,15,15,14,14,14,14 + db 15,15,15,15,15,15,14,14,14,15,16,18,16,15,16,17 + db 16,15,15,16,17,17,18,18,17,16,16,16,16,18,19,20 + db 20,20,19,19,20,20,21,20,20,19,19,18,18,18,18,18 + db 18,17,17,16,17,17,16,16,17,18,18,18,19,19,18,18 + db 19,19,18,18,18,17,17,18,18,18,19,19,20,20,19,19 + db 18,18,18,18,18,19,19,19,19,19,19,19,19,19,18,17 + db 17,18,19,20,20,21,21,21,21,21,21,21,21,20,19,19 + db 18,19,20,20,20,20,20,19,19,18,18,18,17,17,17,17 + db 17,18,17,17,18,18,18,19,20,20,19,18,18,18,17,17 + db 17,17,17,18,18,19,19,19,19,18,17,18,18,19,19,20 + db 20,20,20,19,19,19,19,19,19,19,19,18,17,17,17,16 + db 17,16,16,16,17,17,17,18,18,18,18,19,19,20,20,20 + db 20,19,18,18,18,18,18,17,17,16,16,15,15,16,17,17 + db 18,19,18,17,15,15,16,18,16,16,15,14,14,15,16,17 + db 17,15,14,14,15,14,14,13,13,13,12,12,12,12,12,12 + db 12,12,12,12,12,13,13,13,13,13,14,14,14,14,13,13 + db 13,13,13,13,14,14,14,13,13,13,12,12,12,12,12,13 + db 13,14,13,13,13,14,14,14,14,14,14,15,15,14,14,14 + db 14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,16,16,16,16,15,15,15,15,15,15,15,15 + db 15,15,16,16,16,15,15,15,15,14,14,14,14,14,15,15 + db 15,15,14,14,14,13,13,13,13,13,14,14,14,14,13,13 + db 13,13,13,14,14,14,14,13,13,13,13,13,13,13,14,14 + db 14,14,14,14,14,14,14,14,14,14,14,14,14,13,13,14 + db 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,13,13,13,13,13,13,13 + db 13,14,14,14,14,14,14,13,13,13,13,13,13,12,12,12 + db 12,12,13,13,13,13,14,14,14,13,13,13,13,13,13,14 + db 14,13,13,13,13,13,13,13,13,13,14,14,14,14,13,13 + db 14,14,14,13,13,13,13,13,14,14,14,14,14,14,14,14 + db 14,14,15,15,15,15,15,14,14,14,14,14,14,14,14,14 + db 14,15,15,15,15,15,13,13,14,14,14,14,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14 + db 14,14,14,14,14,15,15,15,15,14,14,14,13,13,13,13 + db 13,14,14,15,15,15,15,15,14,14,14,14,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,14 + db 14,14,14,14,14,13,13,13,13,14,14,14,13,13,13,13 + db 13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14 + db 14,13,13,13,13,13,13,13,13,13,12,12,12,12,12,12 + db 12,13,13,13,13,13,13,13,14,14,15,15,15,15,15,15 + db 14,14,14,14,14,14,15,15,16,16,18,16,15,15,17,18 + db 19,18,17,17,16,15,15,16,16,17,17,18,18,18,18,18 + db 19,20,20,20,20,19,19,18,18,18,18,17,17,17,16,16 + db 16,17,16,17,17,17,18,19,19,19,19,19,19,19,19,20 + db 20,20,20,19,19,18,18,17,18,19,19,19,19,18,18,17 + db 17,17,17,17,18,18,18,19,20,20,19,18,18,18,17,17 + db 18,17,17,17,17,17,18,18,18,19,19,20,20,20,20,20 + db 19,18,18,18,18,18,17,17,17,17,17,17,16,16,16,16 + db 17,17,18,18,18,19,19,19,19,18,18,18,17,17,16,16 + db 16,16,16,17,17,18,18,19,19,20,20,20,19,19,19,18 + db 18,18,18,18,18,18,18,18,18,18,18,17,17,17,17,18 + db 17,17,17,16,16,16,17,17,17,17,18,18,18,18,19,19 + db 20,20,20,19,19,18,18,18,17,17,17,17,17,17,18,18 + db 18,17,16,15,15,14,15,16,18,17,16,16,15,14,14,15 + db 16,17,15,14,14,14,13,13,12,12,12,12,12,13,13,13 + db 13,14,14,14,14,14,14,14,13,13,13,12,12,12,12,12 + db 12,12,12,12,12,12,12,13,13,13,14,14,14,14,13,14 + db 13,13,14,14,14,14,14,15,15,15,15,14,14,14,14,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,14,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,14,13,13,13,13,14,14 + db 14,13,13,13,13,13,13,14,14,14,14,13,13,14,14,14 + db 14,14,13,13,14,14,14,14,14,13,13,13,13,14,13,13 + db 12,12,12,12,12,13,13,13,13,13,13,13,13,14,14,14 + db 14,14,14,14,13,13,13,12,13,13,14,14,14,14,13,13 + db 12,12,12,13,13,13,12,12,13,13,14,14,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,13,13,12,12,12,12,13 + db 13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14 + db 14,14,14,14,14,14,13,13,13,13,13,13,13,14,14,14 + db 14,14,14,14,14,14,14,14,13,13,13,13,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,14,14,13,13,13,13,13 + db 13,14,14,15,15,15,15,15,15,14,14,14,14,14,14,14 + db 14,15,15,15,15,14,14,13,13,13,13,13,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,14,14,14,14,14,13,13 + db 14,14,14,13,13,13,13,13,14,14,14,14,14,14,14,14 + db 14,14,13,13,13,14,14,14,14,14,14,14,14,13,12,12 + db 12,13,14,13,13,13,13,13,13,13,13,13,13,13,13,13 + db 13,13,13,13,13,12,12,12,12,12,12,12,12,12,13,13 + db 13,13,13,13,14,14,14,14,14,14,14,13,13,13,13,13 + db 13,14,14,15,15,16,16,16,17,18,16,15,14,15,15,16 + db 17,18,18,18,17,17,17,17,17,17,18,18,18,19,19,20 + db 20,20,19,19,18,18,18,18,17,17,17,17,16,16,16,17 + db 17,17,18,17,17,17,17,18,18,18,18,18,18,18,18,18 + db 18,18,18,19,19,19,20,20,20,19,19,18,18,17,17,16 + db 16,16,16,16,17,17,18,18,18,19,19,19,19,18,18,18 + db 17,17,16,16,16,16,17,17,17,17,17,17,18,18,18,18 + db 18,18,17,17,17,17,16,17,17,18,18,18,18,18,19,19 + db 18,17,17,18,19,19,19,18,18,18,17,17,17,17,17,18 + db 18,19,19,18,18,17,16,18,18,18,18,18,18,18,18,18 + db 17,17,17,17,16,17,17,17,17,17,16,16,16,16,16,16 + db 16,16,16,17,17,17,17,17,17,17,17,17,17,17,18,18 + db 18,18,18,18,18,18,18,17,17,17,17,17,17,17,17,17 + db 17,17,17,17,17,17,17,17,17,17,17,17,17,17,16,16 + db 16,16,17,16,14,14,14,14,14,14,13,13,14,14,14,14 + db 14,15,15,15,14,14,14,14,14,14,14,14,14,14,14,14 + db 13,13,13,14,13,13,13,14,14,14,14,14,15,15,14,14 + db 14,14,13,13,14,15,15,14,14,14,14,14,15,15,15,15 + db 15,15,15,15,15,16,15,15,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,17,17,16,16,16,16,16 + db 16,16,16,16,16,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,14,14,14,14,14,13 + db 13,14,13,13,14,14,14,14,13,13,13,14,13,13,14,14 + db 13,13,14,13,13,13,13,12,12,12,12,12,12,12,12,12 + db 12,12,13,13,13,13,14,14,13,13,13,12,12,12,12,12 + db 12,12,12,12,12,12,12,12,12,12,13,13,13,13,14,13 + db 13,13,13,12,12,12,12,13,14,14,15,15,15,15,15,15 + db 15,15,14,13,13,14,13,13,13,13,14,14,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15 + db 15,15,15,15,15,14,14,14,14,14,14,14,14,14,14,14 + db 14,14,14,14,14,13,13,13,14,14,14,14,14,14,14,14 + db 14,14,14,14,14,13,13,13,13,13,13,14,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,13,13,13,13,13,13,13 + db 13,12,12,12,12,12,12,12,12,12,12,12,12,12,13,14 + db 14,14,14,14,14,13,13,14,14,14,13,13,13,13,14,13 + db 13,13,13,14,13,13,13,13,13,13,13,13,12,12,13,13 + db 13,13,13,13,14,14,14,14,14,13,13,13,13,14,14,14 + db 14,14,14,14,14,14,14,14,14,14,14,14,14,13,13,14 + db 14,14,14,14,14,14,13,13,13,13,13,13,13,13,14,14 + db 14,14,14,14,13,13,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,16,16,16,17,17,17,17,17,17,17,17,17,17 + db 17,17,17,17,17,17,17,17,17,17,17,18,18,18,18,18 + db 18,18,18,18,17,17,17,17,17,17,18,18,18,17,17,16 + db 16,16,16,16,16,16,16,16,17,17,17,17,17,16,17,17 + db 17,17,18,18,18,18,18,18,18,18,18,16,17,18,18,19 + db 19,18,18,17,17,17,17,17,18,18,18,19,19,19,18,17 + db 17,18,19,19,18,18,18,18,18,17,17,16,17,17,17,17 + db 18,18,19,19,19,19,19,18,18,18,19,20,20,20,20,20 + db 19,18,16,17,18,18,18,18,17,17,17,18,18,19,19,19 + db 20,20,20,19,19,18,17,17,18,17,17,17,16,16,16,16 + db 16,16,16,16,16,17,17,17,17,17,17,17,17,17,17,17 + db 17,17,16,16,16,16,17,17,17,16,16,16,16,16,17,17 + db 17,17,17,17,17,17,17,17,17,16,16,16,16,16,16,16 + db 17,17,17,17,16,16,16,16,17,17,17,17,17,17,17,17 + db 17,17,17,17,16,14,14,14,13,13,14,13,13,13,15,15 + db 15,14,14,14,14,14,14,15,15,15,14,14,14,13,13,13 + db 14,14,14,14,14,14,14,14,13,13,13,14,14,14,15,15 + db 14,13,14,14,14,14,14,15,15,15,15,14,14,15,15,15 + db 15,15,15,15,15,15,16,15,16,16,16,16,17,17,16,16 + db 17,17,17,17,17,16,17,17,17,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,15,15,15,15,15,15,15,15,15,14,14,14,14,14 + db 13,13,14,14,14,13,13,12,12,12,12,12,13,13,13,13 + db 13,13,13,13,12,12,12,12,12,12,13,13,13,14,13,13 + db 14,14,14,14,14,14,14,14,14,14,14,14,13,13,13,12 + db 12,12,12,12,12,12,13,14,13,13,14,14,14,14,14,14 + db 14,14,13,13,12,12,12,12,12,13,13,13,14,14,14,14 + db 14,13,13,14,14,13,13,14,14,14,14,14,14,15,15,15 + db 15,15,15,15,15,15,15,15,14,14,14,14,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,14 + db 14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15 + db 15,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15 + db 14,14,14,13,13,13,13,13,13,14,14,14,14,14,14,14 + db 14,14,13,13,13,12,12,12,12,13,13,13,13,13,13,13 + db 14,14,14,14,14,14,14,13,13,13,14,14,14,14,15,15 + db 15,14,14,14,14,14,14,14,13,13,12,12,13,13,13,13 + db 14,14,14,14,14,13,13,13,13,14,14,14,14,14,14,14 + db 15,15,14,14,14,13,13,14,14,14,14,14,14,14,14,14 + db 14,14,14,14,13,13,14,14,14,14,14,14,14,14,14,15 + db 15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16 + db 16,16,16,16,17,17,17,16,16,16,17,16,16,16,17,17 + db 17,17,16,16,16,16,16,16,16,17,17,17,17,17,17,17 + db 17,17,17,17,16,16,16,16,16,17,17,17,16,16,16,16 + db 17,17,17,17,17,17,17,17,17,17,17,17,17,16,16,16 + db 16,16,16,16,16,16,17,17,17,18,17,17,18,19,19,20 + db 20,20,19,19,19,18,18,17,17,17,18,18,18,18,17,16 + db 18,19,20,20,20,20,20,19,18,18,18,19,19,19,19,19 + db 18,18,18,18,18,19,19,19,19,20,20,20,21,21,21,20 + db 20,19,18,16,17,18,17,17,18,19,19,19,20,20,21,20 + db 20,19,18,18,18,18,19,18,17,18,17,17,17,16,15,15 + db 15,15,15,15,16,16,16,16,16,17,17,17,16,16,16,16 + db 16,16,17,17,17,17,17,17,17,16,16,16,16,17,17,17 + db 17,17,17,16,16,16,16,16,15,15,15,14,14,15,15,15 + db 15,15,16,16,17,17,17,16,16,16,16,16,16,16,16,16 + db 16,17,17,17,17,17,16,14,14,14,14,14,14,14,14,14 + db 13,13,13,13,15,15,15,14,14,14,13,13,13,13,13,15 + db 15,15,15,15,15,15,14,13,13,13,14,13,13,13,13,14 + db 14,13,13,13,12,12,12,13,14,14,14,14,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16 + db 16,16,16,16,16,17,17,17,17,17,17,17,17,17,17,17 + db 16,16,16,16,17,17,17,17,16,16,16,16,16,16,16,16 + db 15,15,15,15,15,14,14,14,14,14,14,15,14,14,14,14 + db 14,14,13,12,12,12,12,12,12,13,13,13,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,14,13,13,13,13,13,13 + db 13,14,14,14,14,15,15,15,14,14,14,14,14,14,14,14 + db 13,13,13,13,14,14,13,13,14,14,14,14,14,14,14,14 + db 13,12,12,12,12,13,12,13,13,12,13,13,14,14,14,13 + db 13,14,13,13,13,14,14,14,14,14,14,14,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,14,14,14,13,13,13,13 + db 13,14,14,14,14,15,15,15,14,14,14,15,15,14,14,14 + db 14,15,14,14,14,14,14,14,14,14,14,14,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14 + db 14,14,14,14,14,14,14,15,15,15,15,16,16,16,16,16 + db 15,15,15,15,14,14,14,14,14,14,14,14,14,14,14,15 + db 15,15,15,15,14,14,14,14,14,14,14,15,15,15,14,14 + db 14,14,14,14,13,13,13,13,12,12,13,13,13,14,14,14 + db 13,13,13,13,13,13,13,14,14,14,14,14,14,14,15,15 + db 14,14,14,13,13,14,14,15,15,15,15,14,14,14,14,14 + db 15,13,13,15,15,15,15,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,15,15,15,15,14,14,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,15,15,16,16 + db 15,15,15,15,15,14,14,15,15,15,16,16,16,16,16,17 + db 17,17,17,17,17,16,16,16,16,17,17,17,17,17,17,17 + db 16,16,16,16,16,16,17,17,17,16,16,16,16,16,15,15 + db 15,15,15,15,16,17,17,17,18,17,18,19,18,18,18,18 + db 19,20,20,21,20,20,19,19,19,18,17,17,18,17,16,18 + db 19,20,20,21,21,21,20,20,20,19,19,19,19,18,18,18 + db 18,18,18,19,19,20,20,20,20,20,20,20,20,20,20,19 + db 19,18,18,18,18,18,19,19,19,20,20,21,21,20,20,19 + db 19,19,19,19,19,19,19,19,18,17,18,16,16,16,16,17 + db 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17 + db 17,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,15 + db 15,15,15,14,14,15,16,16,16,16,15,15,15,15,15,16 + db 16,15,15,16,16,16,16,16,14,14,14,14,14,13,13,13 + db 14,14,14,14,14,13,13,13,13,13,14,14,14,14,14,14 + db 14,14,14,14,14,13,13,14,14,14,14,14,14,14,13,13 + db 13,14,15,15,15,14,13,12,12,12,13,13,14,14,15,15 + db 15,14,15,15,15,14,15,15,15,16,15,16,16,16,16,15 + db 15,15,15,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 17,17,17,17,16,16,16,16,16,16,16,16,16,16,16,15 + db 15,15,15,15,15,15,15,15,15,15,14,14,14,14,14,13 + db 13,12,12,12,12,13,13,13,14,14,14,15,15,15,15,15 + db 14,14,14,14,13,13,13,13,13,13,13,13,14,14,14,14 + db 14,15,15,15,15,14,14,14,14,14,14,13,13,13,13,13 + db 14,14,14,14,13,13,14,14,14,14,14,15,15,15,14,13 + db 13,14,14,14,14,13,13,14,14,14,15,15,15,14,14,14 + db 13,13,14,14,14,14,14,15,15,15,15,14,14,14,14,13 + db 13,13,13,13,13,13,12,12,12,12,12,13,13,13,13,14 + db 14,14,15,15,15,14,14,14,14,14,14,14,14,14,14,14 + db 15,14,14,13,13,13,13,13,13,13,13,13,13,13,14,14 + db 14,14,14,14,14,14,15,15,15,15,15,15,15,15,14,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,15,15,15,15,15,14 + db 14,15,15,15,15,15,15,15,14,14,14,14,14,14,14,14 + db 14,14,14,13,13,13,12,12,13,14,14,14,14,14,14,14 + db 13,13,14,13,13,14,14,14,14,14,14,14,15,15,14,14 + db 14,13,13,14,15,15,15,14,14,14,15,15,15,15,15,15 + db 16,16,16,16,16,16,16,15,15,15,15,15,15,15,15,15 + db 14,15,15,15,15,14,14,14,14,14,14,14,14,14,15,15 + db 15,15,15,15,14,14,15,15,16,16,15,15,15,14,14,15 + db 15,15,15,16,16,16,15,15,15,15,15,15,15,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17 + db 17,17,17,16,16,16,16,18,17,18,19,19,19,19,19,19 + db 19,19,19,20,20,21,21,20,20,19,19,19,18,18,18,18 + db 18,19,19,20,20,20,20,20,20,20,20,20,20,19,19,18 + db 18,19,19,18,18,18,18,17,17,17,16,16,17,17,18,18 + db 18,18,18,18,19,19,20,20,21,21,21,21,21,21,21,21 + db 21,20,20,20,20,19,19,18,18,18,17,17,17,17,17,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,15,15,15,15,15,15,15,15,14,14,15,16,16 + db 15,15,15,15,15,15,15,14,14,14,14,15,15,16,16,17 + db 17,17,17,17,16,16,16,16,16,16,16,16,16,15,16,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,14,14,14,13 + db 13,13,13,13,13,14,14,14,15,15,14,14,14,14,14,14 + db 15,15,15,14,14,14,14,14,15,15,15,14,14,14,14,14 + db 14,14,14,14,14,15,15,15,15,15,14,14,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,16,16,16,16,16 + db 16,16,16,15,15,15,15,15,16,16,16,16,16,16,15,15 + db 15,15,16,16,16,16,16,16,16,16,16,16,16,15,15,15 + db 15,15,15,15,15,14,14,14,14,14,14,14,13,12,12,13 + db 13,13,13,13,13,14,14,15,15,15,15,14,14,13,13,13 + db 13,13,13,12,12,12,12,12,13,13,13,14,14,14,15,15 + db 15,14,14,14,14,14,14,13,13,13,13,14,14,14,14,14 + db 14,14,13,13,14,14,14,15,15,15,15,14,14,14,14,14 + db 14,14,14,14,14,14,14,13,13,13,14,14,14,14,13,13 + db 14,14,14,15,15,15,15,15,15,15,15,15,14,14,14,14 + db 14,14,14,13,13,13,13,13,13,14,14,14,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,14,14,14,14,14,13,13 + db 13,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,16,16,16,16,16,15,15 + db 15,16,16,16,16,16,16,16,17,17,17,17,16,17,17,17 + db 17,17,17,17,16,15,15,16,16,16,16,15,15,15,15,15 + db 15,16,16,16,14,14,14,14,14,14,14,14,13,13,13,13 + db 14,14,13,14,14,14,14,14,14,14,15,15,15,14,14,14 + db 14,14,14,14,14,14,14,14,13,13,14,15,14,14,14,13 + db 13,14,14,14,14,14,15,15,15,15,16,16,16,16,16,16 + db 15,15,15,15,15,15,14,14,14,14,14,14,14,14,14,14 + db 14,14,14,14,13,13,14,14,15,15,15,15,15,15,15,14 + db 14,14,15,15,15,15,16,16,15,15,15,15,16,16,17,17 + db 17,17,17,16,16,15,15,14,14,14,14,15,15,15,15,15 + db 15,15,16,16,15,14,14,15,15,15,15,15,15,15,15,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,17,17,17,17,17,18,18,18,19,19,20,20,20 + db 20,21,21,21,21,21,21,21,21,21,20,20,19,19,18,18 + db 18,18,18,18,17,17,16,16,17,17,17,18,18,18,18,19 + db 19,20,20,20,20,20,20,20,20,20,19,19,18,17,17,18 + db 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18 + db 18,18,18,18,18,18,18,17,17,16,16,16,16,16,16,16 + db 15,15,15,15,14,14,14,14,15,16,16,16,15,15,15,15 + db 15,15,16,16,16,16,16,16,16,17,17,17,17,16,16,16 + db 16,16,16,16,17,17,17,17,17,17,17,17,16,16,16,15 + db 15,15,15,15,15,15,16,16,16,16,15,15,16,16,16,15 + db 15,16,16,15,15,15,15,15,15,14,14,15,15,15,14,14 + db 14,14,14,14,14,14,15,15,14,14,14,15,15,15,14,14 + db 14,14,15,15,15,15,15,15,14,14,14,14,14,14,14,15 + db 15,15,14,13,14,14,14,14,14,14,15,15,15,14,14,14 + db 14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15 + db 15,16,15,15,15,15,15,15,15,15,15,15,16,16,16,16 + db 16,16,16,16,16,16,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,14,14,14,13,13,12,12,12,12,12,13,13,14 + db 14,14,14,14,14,13,13,14,14,14,14,14,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14 + db 14,14,14,14,13,13,13,14,14,14,15,15,15,15,14,14 + db 13,13,14,14,15,15,15,15,15,15,15,14,15,15,15,15 + db 15,15,15,15,15,15,15,14,14,14,13,13,13,13,14,14 + db 14,14,15,15,15,15,15,14,14,14,15,15,15,15,15,15 + db 15,15,15,15,14,14,14,14,14,14,15,15,15,14,14,14 + db 15,15,15,15,15,15,15,13,13,13,14,14,13,13,14,14 + db 14,14,14,14,15,15,15,15,16,16,16,15,15,15,15,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,15,15,16,16 + db 16,16,17,17,17,17,17,17,17,16,16,16,17,17,17,17 + db 17,16,16,16,16,16,16,15,15,16,16,16,16,16,16,16 + db 16,16,14,14,14,15,15,15,15,14,14,14,14,14,14,14 + db 14,13,14,13,13,14,14,15,15,15,14,14,14,14,14,14 + db 14,14,14,15,15,15,14,13,14,14,14,14,14,14,14,14 + db 15,15,15,15,16,16,16,16,16,16,15,15,15,15,15,14 + db 15,15,14,14,14,14,13,13,13,13,13,14,14,15,15,14 + db 14,14,15,15,15,15,15,15,14,14,15,15,15,14,14,15 + db 15,15,15,15,16,16,15,15,15,16,16,16,15,15,15,15 + db 15,15,15,16,16,16,17,17,17,17,17,17,17,17,16,16 + db 16,16,16,16,16,17,17,17,17,16,16,16,16,16,16,16 + db 15,15,15,15,15,15,16,16,16,15,14,14,14,14,15,15 + db 15,15,16,16,16,16,16,16,16,17,17,18,18,18,18,18 + db 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18 + db 18,18,18,17,17,18,19,19,20,20,20,20,20,20,20,20 + db 20,18,18,18,18,18,18,18,18,18,18,18,18,18,17,17 + db 17,17,17,17,17,17,17,17,17,17,17,17,17,17,16,16 + db 16,16,16,15,15,14,14,14,15,15,15,15,14,14,15,16 + db 16,15,15,15,15,15,15,15,14,14,14,14,14,14,14,14 + db 14,14,15,15,15,15,15,16,16,16,15,15,15,15,14,14 + db 14,15,16,16,16,16,16,16,16,16,16,16,17,17,17,17 + db 16,16,15,15,14,14,15,15,16,16,16,16,15,15,15,16 + db 16,16,15,16,16,16,16,16,15,15,15,14,14,15,15,15 + db 15,15,15,14,15,15,14,15,15,15,15,14,15,15,15,15 + db 15,15,15,15,14,15,15,15,14,15,15,15,15,15,15,14 + db 14,14,14,14,13,14,14,14,15,15,15,15,15,15,15,15 + db 15,14,15,15,15,15,14,14,14,14,14,15,15,16,16,15 + db 15,15,15,16,15,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,14,14,14,14,14,14,14,14 + db 14,14,14,13,12,12,12,12,12,13,13,14,14,14,14,15 + db 15,15,15,15,14,14,14,13,14,14,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,14,14,14,14,14,14,15 + db 15,15,15,14,14,14,15,15,15,15,14,14,14,13,13,14 + db 14,14,15,15,15,15,14,15,15,14,14,13,14,14,15,15 + db 15,15,16,16,16,15,15,14,15,15,15,15,15,15,15,15 + db 14,15,15,15,15,15,15,15,15,15,14,14,14,15,15,15 + db 14,14,15,15,15,15,15,15,15,15,14,14,14,14,14,14 + db 14,14,14,13,13,13,13,14,14,14,13,13,13,15,15,15 + db 15,15,15,14,14,14,14,14,14,14,14,14,14,14,15,15 + db 15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16 + db 16,16,17,17,17,17,17,17,17,17,17,17,17,17,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,15,15,15,15,15 + db 15,15,15,15,15,14,14,14,14,14,14,15,15,15,15,14 + db 13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14 + db 15,15,15,14,14,14,14,14,14,14,14,14,15,15,16,16 + db 16,16,16,16,15,15,15,15,14,14,14,14,14,14,14,14 + db 14,15,14,15,15,14,14,14,14,14,14,14,14,14,15,15 + db 15,14,14,14,14,14,15,16,16,15,15,15,15,15,15,15 + db 15,14,14,14,14,13,13,14,14,15,15,14,14,14,15,15 + db 16,16,17,17,17,17,16,16,16,16,16,16,16,16,16,16 + db 15,14,14,14,15,15,15,15,16,16,16,15,15,15,15,15 + db 14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15 + db 15,16,16,15,14,14,15,15,15,15,14,14,14,15,15,16 + db 16,16,16,16,17,17,17,17,17,17,17,17,17,17,17,17 + db 17,17,17,17,18,18,18,18,18,18,18,18,18,18,18,18 + db 18,17,17,17,17,17,17,16,16,16,16,16,16,16,16,16 + db 16,16,16,17,17,17,16,16,16,16,16,16,16,16,16,16 + db 15,15,15,15,14,14,15,15,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,15,15,15,15,15,14,14,14,13,13 + db 13,14,14,14,14,14,15,15,15,15,15,16,16,16,15,15 + db 15,14,14,14,14,14,15,15,15,16,16,16,16,16,16,15 + db 15,15,15,16,16,15,14,15,15,15,15,16,16,16,15,15 + db 15,16,15,15,15,15,15,15,16,16,16,16,15,14,14,14 + db 14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + db 14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,16,14,14,15,15,15,15 + db 15,15,15,15,14,14,14,14,14,14,15,15,15,15,15,16 + db 16,15,15,15,15,15,14,14,14,15,15,16,16,16,16,15 + db 14,14,14,14,14,14,14,15,15,15,15,15,15,15,14,14 + db 14,13,12,12,12,12,13,13,14,14,15,15,15,15,15,15 + db 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14 + db 14,14,14,14,13,12,12,13,13,14,14,14,15,15,15,14 + db 14,14,14,14,14,14,15,15,14,14,14,13,13,14,14,15 + db 15,15,14,14,13,14,14,14,13,13,13,14,15,15,15,15 + db 14,15,15,15,15,15,15,15,15,15,15,16,16,15,15,15 + db 15,15,15,15,16,16,16,16,15,15,15,15,15,15,15,15 + db 15,15,15,16,16,16,16,16,16,15,15,15,14,14,14,14 + db 14,13,13,14,14,14,14,13,13,13,14,14,14,14,14,14 + db 14,14,14,14,14,14,14,15,15,15,15,15,15,15,14,14 + db 14,14,14,14,14,15,15,15,15,15,15,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,15,15,15,15,15,15,15,15,15,15,14,14,13,13 + db 13,13,13,13,14,14,14,15,15,15,15,14,14,14,13,13 + db 14,14,14,13,13,13,13,13,13,13,13,13,13,13,13,14 + db 14,14,14,14,14,14,15,15,15,15,16,16,16,16,15,15 + db 15,15,14,14,14,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,14,14,14,14,15,15,15,15,15,15,14,14 + db 13,13,14,14,15,15,16,15,14,14,15,15,15,15,14,13 + db 13,13,13,15,15,15,15,15,16,16,15,14,15,16,16,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,14,14,14,14 + db 14,15,15,15,16,16,16,15,15,15,15,15,14,14,14,14 + db 14,13,13,13,14,14,14,15,15,15,15,15,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,15,15,14,14,15,15 + db 15,15,16,16,16,16,16,16,16,16,16,16,17,17,17,16 + db 16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,17 + db 17,16,16,16,16,16,16,16,16,16,16,17,17,17,16,16 + db 16,16,16,16,16,16,17,17,17,17,16,16,16,16,16,16 + db 16,16,15,15,15,15,14,15,15,15,15,15,16,16,16,16 + db 16,17,17,17,17,17,16,16,16,15,15,15,14,14,14,15 + db 15,15,15,15,15,16,16,16,16,16,17,17,17,17,16,16 + db 16,16,15,15,14,14,13,14,14,14,15,15,15,15,14,14 + db 14,14,14,14,15,15,16,16,16,16,16,15,15,15,16,16 + db 16,15,15,15,15,14,14,13,14,14,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,16,16,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,16,16,15,15,15 + db 15,16,16,16,16,15,15,15,15,15,15,15,15,15,16,16 + db 15,15,15,15,15,15,15,15,15,15,14,14,14,14,15,15 + db 15,15,14,14,14,14,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,14,14,14,14,14,14,14,14,14,14,14,14 + db 13,13,13,13,14,14,14,15,15,15,14,14,14,13,13,13 + db 13,13,14,15,15,15,14,14,14,14,15,15,15,14,14,14 + db 14,13,13,12,12,13,13,14,14,14,14,14,14,14,13,12 + db 12,12,13,13,15,15,14,14,14,13,13,14,14,15,15,15 + db 15,15,13,13,14,14,15,15,15,15,15,15,14,14,15,15 + db 15,14,14,14,14,15,15,15,15,15,15,15,16,16,16,16 + db 15,16,16,16,15,15,14,14,14,14,14,15,15,15,16,16 + db 15,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,15,15,14,14 + db 14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15 + db 15,15,15,15,15,15,14,14,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,14,14,14,14,13,13,13,14,14,14 + db 15,15,15,15,15,15,15,14,14,14,14,14,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14 + db 14,14,14,14,15,15,16,16,16,16,15,15,15,13,13,14 + db 15,15,14,14,14,14,14,14,14,14,14,14,14,14,14,14 + db 14,15,15,15,15,15,15,15,14,14,13,13,13,13,13,13 + db 14,14,15,15,15,15,14,14,15,15,15,14,14,14,15,14 + db 14,15,15,15,15,15,16,16,16,16,15,15,15,15,14,14 + db 14,14,14,14,15,15,15,15,14,14,14,13,14,14,15,15 + db 16,16,16,16,17,17,17,17,16,16,16,16,16,15,15,15 + db 15,15,15,14,14,14,15,15,15,16,16,16,17,17,17,17 + db 17,16,16,16,16,16,15,15,15,15,15,14,15,15,15,15 + db 16,16,16,16,16,16,16,16,17,17,17,17,16,16,16,16 + db 16,16,16,16,17,17,17,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,15,15,14,14,15,16,17,17,17,18,18,18 + db 17,17,17,16,16,16,16,16,16,16,16,16,16,16,15,14 + db 15,15,15,15,14,14,14,14,14,14,14,15,15,15,15,15 + db 15,16,16,16,16,16,16,16,16,16,16,15,15,15,15,15 + db 15,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17 + db 17,17,16,16,16,16,15,15,16,16,16,16,16,16,16,16 + db 16,16,16,15,14,14,15,15,16,16,16,16,16,15,15,15 + db 16,16,16,16,15,15,15,14,13,13,13,13,14,15,15,16 + db 16,16,16,16,16,15,15,14,14,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,16,16,16,16,15,15,15,16,16 + db 16,15,15,15,15,15,15,15,15,16,16,16,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,14,14,13,12,13,14,14 + db 14,14,13,13,13,13,13,13,14,14,14,14,15,15,15,14 + db 14,14,14,14,14,14,14,14,13,13,13,13,12,12,13,13 + db 13,14,13,13,13,14,14,14,15,15,15,15,14,14,14,15 + db 15,15,15,14,15,15,15,15,15,15,15,15,15,15,15,15 + db 14,14,14,15,15,15,15,15,15,15,14,14,13,13,12,12 + db 13,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15 + db 15,13,14,14,15,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,16,16,16,15,15,15,15 + db 15,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15 + db 15,15,15,15,14,14,14,14,14,14,15,15,15,15,15,14 + db 14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15 + db 15,15,15,15,15,15,15,15,15,14,14,14,14,13,13,13 + db 13,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,16,16,16,16,16,16,16,15,15,15,15,15,15 + db 14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15 + db 14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15 + db 15,15,15,14,14,15,15,15,15,15,15,15,14,14,14,14 + db 15,15,16,16,16,16,15,15,15,14,14,14,14,14,14,14 + db 14,14,14,14,15,15,14,14,13,13,14,14,15,15,15,15 + db 15,14,14,14,14,14,14,14,14,13,14,15,15,14,14,15 + db 15,15,15,15,15,15,15,15,15,14,14,15,15,15,16,16 + db 16,15,15,15,16,16,15,15,14,15,15,15,14,14,15,16 + db 16,16,16,16,16,16,16,16,16,16,15,15,16,16,16,16 + db 17,17,17,17,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16 + db 16,15,15,15,15,15,15,14,14,14,14,14,14,14,15,15 + db 15,15,14,15,16,16,16,16,16,16,16,16,16,16,16,17 + db 17,17,18,18,18,17,17,17,16,15,14,14,15,15,16,16 + db 16,16,17,17,17,17,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,15,15,15,16,16,16,16,16,16,16,16,16,16 + db 16,16,15,15,15,15,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,17,17,17,17,17,16,16,16,16,16,16,16 + db 16,16,17,17,17,17,17,18,18,18,18,18,18,18,18,17 + db 17,17,17,15,15,15,15,15,16,16,17,17,17,17,17,17 + db 17,17,16,16,16,15,15,15,15,15,15,15,16,16,16,16 + db 15,15,15,15,16,16,16,15,15,15,15,14,13,13,13,13 + db 14,14,14,14,15,15,15,15,15,15,15,15,16,16,16,16 + db 16,15,15,15,15,16,16,15,15,15,15,16,16,15,15,15 + db 15,15,16,16,16,16,16,16,16,16,16,16,16,16,16,15 + db 15,16,16,15,15,15,15,15,15,15,15,14,14,13,13,14 + db 14,13,12,12,12,12,12,12,12,13,13,13,14,14,14,14 + db 14,14,14,13,13,13,13,13,14,13,12,12,13,14,14,14 + db 14,14,14,14,14,13,13,13,13,14,14,14,14,15,15,14 + db 14,14,15,15,15,15,15,15,15,16,16,16,16,15,15,15 + db 15,15,15,15,15,15,15,15,15,14,14,14,14,14,14,15 + db 15,15,15,15,15,15,15,15,14,14,14,14,13,13,13,13 + db 13,14,15,15,15,15,15,15,15,15,15,15,14,14,14,15 + db 15,15,15,15,14,14,14,15,15,15,15,14,14,14,14,14 + db 14,14,14,14,14,14,14,14,14,14,14,15,15,16,16,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,15,15,14,14 + db 14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,14 + db 14,13,13,13,13,13,14,14,14,14,14,14,14,14,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,14,14,14,14,14,14,13,13,13 + db 12,12,12,12,13,13,13,13,14,14,14,14,14,14,14,15 + db 15,14,14,14,14,14,14,14,13,14,14,14,15,15,16,16 + db 16,16,15,15,15,15,15,15,15,15,15,14,14,14,14,14 + db 15,15,15,15,14,14,14,14,14,14,14,14,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,14,15,14,14,15,15,15 + db 15,16,16,16,16,16,16,15,15,15,15,16,16,16,15,15 + db 15,16,15,15,15,15,14,14,15,16,15,15,15,15,15,16 + db 17,17,17,17,17,17,17,17,16,16,15,15,15,15,15,17 + db 17,17,17,18,18,18,18,18,18,18,18,17,17,17,17,17 + db 16,16,16,16,16,16,16,16,16,17,17,17,17,17,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,15,15,15,15 + db 16,16,16,16,16,16,16,16,16,16,16,16,15,15,15,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17 + db 16,16,16,16,16,16,17,17,17,17,16,16,16,16,16,16 + db 16,15,15,15,14,14,14,14,15,16,16,16,16,17,17,17 + db 17,16,16,16,16,16,16,16,16,17,17,17,17,18,18,18 + db 18,17,17,17,16,16,16,16,16,17,17,17,17,17,16,16 + db 16,16,16,16,16,16,16,16,17,17,17,17,17,16,16,16 + db 16,16,16,16,15,15,15,15,14,14,14,14,14,15,15,15 + db 16,16,16,16,16,16,16,16,16,16,16,15,15,15,15,15 + db 15,15,16,16,15,15,15,15,16,16,15,15,15,15,16,15 + db 15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16 + db 16,16,16,16,15,15,15,15,15,15,15,15,15,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,15,15,15,16,16,15,15,15,15,15,15,14 + db 15,15,14,13,13,14,15,15,15,15,14,13,13,13,13,13 + db 13,13,13,13,14,14,15,15,14,13,13,14,14,15,15,15 + db 15,15,15,15,15,15,14,14,14,14,14,14,14,15,15,15 + db 15,15,15,15,15,15,16,16,15,15,15,15,15,15,15,15 + db 16,16,16,16,15,15,15,15,15,15,15,15,15,15,14,14 + db 14,14,15,15,14,14,15,15,15,15,15,15,15,15,14,14 + db 15,15,15,15,15,15,16,16,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,16,16,16,16,16,15,15,15,15,16 + db 16,16,16,16,15,15,15,15,15,15,15,16,15,15,15,15 + db 16,16,16,16,16,16,15,15,15,16,16,15,14,15,15,15 + db 15,15,15,15,15,16,16,16,16,16,16,16,16,14,14,14 + db 14,15,15,15,15,15,16,16,15,15,15,15,14,14,14,14 + db 14,14,14,13,13,13,13,13,13,13,13,13,13,13,13,13 + db 13,14,14,14,14,14,14,14,13,13,13,13,13,13,13,13 + db 14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,14 + db 14,15,15,15,15,15,15,15,15,15,16,16,16,16,15,15 + db 14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,15 + db 14,14,15,15,15,15,15,15,15,15,16,16,16,16,16,16 + db 16,16,16,15,15,15,15,14,14,15,15,15,15,15,16,16 + db 16,16,15,15,15,15,15,16,16,16,16,15,15,14,14,15 + db 15,15,16,15,15,14,15,16,16,16,16,15,15,16,16,16 + db 16,16,15,15,15,14,14,14,14,14,15,15,15,15,15,15 + db 15,15,16,16,16,17,17,17,17,17,16,16,16,16,16,16 + db 16,16,16,16,17,17,17,17,17,16,16,16,16,16,17,17 + db 17,18,18,18,18,17,17,17,17,16,16,16,16,16,16,16 + db 16,17,17,17,17,16,16,16,16,15,14,14,14,14,15,15 + db 15,16,16,16,16,16,16,16,17,17,17,17,16,16,16,16 + db 16,16,15,15,15,15,15,16,16,16,16,16,17,17,16,16 + db 16,16,15,15,14,14,14,15,14,15,15,15,16,16,16,16 + db 17,17,17,17,17,17,16,16,16,16,16,16,16,16,16,16 + db 16,16,15,16,16,16,16,16,16,16,15,15,16,16,16,16 + db 17,17,17,16,16,15,15,15,15,16,16,16,16,16,16,16 + db 16,16,16,16,17,17,17,16,16,16,15,14,14,13,13,14 + db 14,15,15,15,15,16,16,16,16,16,15,15,15,15,15,16 + db 16,16,15,15,15,16,16,16,15,15,15,16,15,15,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,15,15,15,15,16,16,16,16,16,16,16,16,16,16,17 + db 17,17,17,16,16,16,16,15,15,15,15,15,16,16,16,16 + db 16,16,15,15,15,15,15,15,15,16,16,15,15,15,15,15 + db 15,15,14,14,13,14,14,14,14,13,12,12,13,13,14,14 + db 15,15,15,15,15,15,14,13,13,14,14,14,14,14,14,15 + db 15,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,15,15,15,15,15,15,15,14,14,14,14,14,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,15,14,15,15 + db 15,15,15,15,16,16,15,15,15,15,15,15,15,15,15,15 + db 14,14,15,15,15,15,14,14,14,15,15,15,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,15 + db 15,15,15,15,16,16,16,16,16,16,16,15,15,15,15,15 + db 15,15,15,15,16,16,15,15,15,15,15,15,15,15,15,15 + db 15,15,14,14,14,14,14,14,14,14,14,14,14,15,15,15 + db 15,15,15,15,15,15,15,15,16,16,15,15,15,15,15,15 + db 15,14,14,14,14,13,13,12,12,12,13,13,13,14,14,14 + db 14,15,15,15,15,15,15,15,15,15,15,14,14,14,14,14 + db 14,15,15,15,15,15,15,15,15,15,15,15,14,15,15,15 + db 15,15,15,15,15,15,16,16,16,16,15,15,14,14,14,14 + db 14,14,14,14,14,14,15,14,14,15,15,15,15,15,15,15 + db 15,15,14,15,16,15,15,15,15,15,15,14,14,15,15,15 + db 16,16,15,15,15,15,14,15,15,15,16,16,16,16,16,15 + db 15,15,15,15,16,16,16,16,15,14,13,14,14,15,16,16 + db 16,16,15,15,16,16,16,16,16,16,16,16,16,15,15,15 + db 15,14,14,13,13,14,14,15,16,16,16,17,17,17,16,16 + db 16,16,16,15,15,15,15,16,16,15,15,15,15,16,16,17 + db 17,17,16,16,16,16,15,15,16,16,16,16,16,16,16,15 + db 16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17 + db 17,17,16,16,16,16,15,15,15,14,15,14,14,14,15,15 + db 16,16,16,16,17,17,16,16,16,16,16,15,15,15,15,15 + db 16,16,16,16,16,16,16,16,16,16,16,16,17,17,18,18 + db 17,17,16,16,16,16,15,14,14,14,15,15,16,16,16,16 + db 16,16,16,16,17,18,17,16,16,16,16,16,16,17,16,16 + db 15,15,16,16,17,17,17,17,17,16,16,16,15,15,15,16 + db 16,16,17,17,17,16,16,16,15,14,14,15,15,16,16,16 + db 16,16,16,16,16,17,17,17,17,17,15,15,14,14,13,13 + db 13,14,14,15,15,15,15,16,16,16,16,16,16,15,15,15 + db 15,15,15,16,16,16,16,16,16,16,16,16,16,15,15,15 + db 16,16,16,16,15,15,15,15,15,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,16 + db 16,16,15,15,15,15,15,16,16,16,16,17,17,17,17,16 + db 16,16,16,16,16,16,16,15,15,15,15,15,15,15,15,14 + db 15,14,14,14,13,13,13,13,12,12,12,13,14,14,14,14 + db 14,14,14,14,14,14,13,14,14,14,14,15,15,15,15,14 + db 14,14,15,15,15,15,15,15,16,16,16,16,16,16,16,16 + db 16,16,16,15,15,15,15,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,15,15,15,15,15,15 + db 15,15,14,16,16,15,15,15,15,16,16,16,15,15,15,15 + db 15,15,16,16,15,15,15,15,15,15,15,15,16,16,16,16 + db 16,16,16,15,15,15,15,15,15,15,15,15,15,15,16,16 + db 15,15,15,16,16,16,16,16,17,17,17,17,16,16,16,16 + db 16,16,16,16,16,16,16,16,17,17,17,16,16,16,16,16 + db 16,16,16,16,15,15,15,15,15,14,14,14,14,15,15,15 + db 15,15,15,15,15,15,14,15,15,15,14,14,14,14,14,14 + db 14,14,14,15,14,14,14,14,14,14,15,15,15,16,15,14 + db 14,14,15,15,15,14,14,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,16,16,16,16,16,16,16,16,15,15 + db 15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,15 + db 15,15,15,16,16,16,15,15,15,14,14,14,14,14,14,13 + db 13,13,14,14,16,15,15,15,15,14,14,14,14,14,15,15 + db 15,15,15,14,15,16,16,15,14,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,16,15,15,15,16,16 + db 16,16,16,16,16,16,15,14,14,15,15,16,16,16,16,16 + db 16,16,16,16,16,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,17,17,17,17,17,16,16,16 + db 15,15,15,15,16,15,15,14,14,15,16,16,16,17,17,17 + db 16,16,16,15,15,15,16,16,16,17,17,17,17,17,16,16 + db 15,15,16,16,17,16,16,16,16,16,16,17,18,17,16,16 + db 16,16,16,16,16,16,15,15,14,14,14,15,16,16,16,16 + db 17,17,18,18,17,17,16,16,16,16,16,16,16,16,16,16 + db 16,17,17,17,17,17,17,17,17,17,16,16,16,16,16,16 + db 16,17,17,18,17,17,16,16,16,16,16,16,15,15,15,15 + db 16,16,16,16,17,17,18,18,18,18,17,17,17,16,16,16 + db 16,16,16,17,17,18,18,17,16,17,17,17,17,16,16,15 + db 15,16,16,16,16,16,16,16,16,16,16,16,17,17,17,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 17,17,17,16,16,16,16,16,16,17,17,17,17,16,16,16 + db 16,16,16,15,15,15,15,15,16,16,16,16,16,16,16,16 + db 15,15,15,15,16,15,15,15,15,15,15,16,16,16,16,16 + db 16,16,16,16,16,17,17,17,17,16,16,16,16,16,15,15 + db 15,15,15,15,16,16,16,17,17,17,17,16,16,16,16,16 + db 16,16,16,16,15,16,16,16,16,15,15,15,16,15,15,15 + db 15,15,15,15,14,14,15,15,15,15,15,15,15,15,15,15 + db 15,15,14,14,14,14,14,14,14,15,15,14,14,14,14,15 + db 15,15,15,15,15,16,16,16,16,15,15,15,15,16,16,16 + db 15,15,15,16,16,16,16,16,16,16,16,16,16,16,17,17 + db 16,16,16,16,16,16,16,15,15,15,15,15,15,15,15,15 + db 15,15,16,15,16,16,16,16,16,15,15,15,15,15,15,15 + db 15,15,15,15,15,16,16,16,16,16,16,16,16,15,15,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,15,15,15,15,15,15,16,16,16,17,17,17,17 + db 17,17,17,17,16,16,17,17,16,16,16,15,15,14,14,14 + db 15,15,15,16,16,16,16,16,16,16,16,16,16,16,15,15 + db 15,16,16,16,16,16,16,16,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,14,13,14,13,14,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,15,15,15,15,15,15,15,15,15,15 + db 16,16,16,16,15,15,15,14,14,14,14,13,13,13,13,15 + db 15,15,14,14,15,16,16,15,15,15,15,15,15,15,15,16 + db 16,16,15,15,15,15,15,15,15,15,14,14,14,14,15,15 + db 15,15,16,15,15,15,15,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,15,15,15,16,16,16,16,16,16,16 + db 17,17,16,15,15,16,16,16,16,16,16,16,16,16,16,17 + db 17,17,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,17,17,17,16,16,16,16,16,16,16,16,16,16 + db 16,15,15,16,16,17,17,17,17,16,17,18,18,17,17,16 + db 16,16,16,16,16,17,17,17,18,18,18,18,17,17,16,16 + db 16,16,15,15,15,15,16,16,16,16,16,16,17,17,18,17 + db 17,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17 + db 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17 + db 17,16,16,16,16,16,17,17,17,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,17,18,18,18,18,18,18,17,16,16,17,17,17,18,17 + db 17,16,16,16,17,17,17,17,16,16,16,16,16,16,16,17 + db 17,17,17,17,17,16,17,17,17,17,17,16,16,16,16,16 + db 16,16,16,17,17,17,16,16,16,16,16,16,16,17,17,17 + db 17,16,16,16,16,16,16,16,15,15,15,15,15,15,15,16 + db 16,16,16,16,16,16,16,16,16,16,16,15,15,15,15,15 + db 15,16,16,16,16,17,17,17,17,17,17,17,17,17,17,17 + db 17,16,16,15,15,15,15,15,16,16,16,16,16,16,16,15 + db 15,15,15,15,15,16,16,16,16,16,15,15,15,16,16,15 + db 15,15,14,14,14,14,14,14,13,13,13,14,14,14,15,15 + db 15,15,15,15,15,15,15,15,14,14,14,14,14,15,15,15 + db 14,16,15,15,15,15,15,15,15,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,17,17,17,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,15,15,15,15,15 + db 15,16,16,16,15,15,15,15,15,15,15,15,15,15,16,16 + db 16,16,16,16,16,16,16,16,16,16,15,15,15,16,16,16 + db 16,16,16,17,17,17,17,17,17,17,17,17,17,17,17,17 + db 17,16,16,16,16,16,16,16,16,15,15,15,16,16,16,16 + db 16,16,16,16,17,17,17,17,16,16,16,16,15,15,15,16 + db 16,16,17,17,17,17,17,17,16,16,16,16,16,16,16,16 + db 16,15,15,15,15,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,15,15,15,14,14,13,13,13,14,14,14 + db 15,15,16,16,16,16,16,15,15,15,16,15,15,15,15,15 + db 15,15,15,15,15,15,15,16,16,15,15,15,15,15,15,15 + db 15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,15,15,15,14,14,14,13,13,13,14,14,14,15,15 + db 15,15,15,15,15,14,15,15,15,15,14,14,14,15,15,15 + db 15,15,15,15,15,15,14,14,14,14,15,15,15,16,16,16 + db 15,15,15,16,16,16,16,16,16,16,16,16,15,15,15,15 + db 16,16,16,15,15,15,16,16,16,16,16,16,17,17,17,17 + db 16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,16 + db 16,16,16,16,16,16,16,17,17,17,17,17,16,17,17,17 + db 17,17,17,16,16,16,16,16,16,16,17,17,17,17,16,16 + db 16,17,17,18,17,17,17,16,16,17,18,18,18,18,18,18 + db 17,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,17,17,17,16,16,16,16 + db 16,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17 + db 17,18,18,18,17,17,17,17,17,17,18,18,18,18,18,17 + db 17,17,17,17,17,17,16,16,16,17,17,17,17,17,17,17 + db 16,16,16,16,16,16,16,16,17,16,16,16,17,17,17,17 + db 18,18,17,16,16,16,16,16,16,16,16,16,16,16,17,18 + db 18,17,18,18,18,18,18,18,17,17,17,17,17,17,18,18 + db 18,19,19,18,18,17,17,17,17,17,17,17,17,17,18,18 + db 18,17,17,17,16,16,16,16,15,15,15,15,16,16,16,16 + db 16,16,17,17,17,17,16,16,16,16,16,16,16,16,16,15 + db 15,15,15,15,15,17,17,17,17,17,17,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,17,17,17,17,17,17,16,16,16,16,16 + db 16,16,16,16,16,16,15,16,16,16,16,16,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,14,14,13,13,13,13,14 + db 14,15,15,15,14,14,13,13,13,13,14,14,15,15,15,15 + db 15,15,15,15,16,16,16,16,16,16,16,16,16,17,17,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,17,17,16,16,16,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,15,16,16,16,16 + db 16,16,16,16,16,16,16,16,15,15,16,16,16,16,16,16 + db 16,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16 + db 16,16,16,16,17,16,16,16,16,16,17,17,17,17,17,17 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17 + db 17,16,16,16,16,16,16,16,17,17,17,16,16,16,16,16 + db 16,16,16,15,15,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,17,17,16,15,15 + db 15,15,15,14,14,14,13,13,14,14,15,15,15,14,14,14 + db 14,13,13,13,13,13,13,14,14,14,14,15,15,14,14,14 + db 14,14,14,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,15,15,15,16,16,16,16 + db 16,15,15,16,16,16,16,16,16,17,17,17,16,16,16,16 + db 16,16,16,16,17,17,17,17,17,16,16,16,16,16,17,17 + db 17,18,18,18,17,17,17,17,17,17,17,17,17,18,18,19 + db 19,18,18,18,17,17,17,17,17,17,18,18,18,18,18,18 + db 17,18,18,17,16,16,16,16,16,16,16,16,16,16,16,17 + db 18,18,17,17,17,17,16,16,16,17,16,16,16,16,16,16 + db 16,16,17,17,17,17,17,17,17,16,16,16,17,17,17,17 + db 17,17,17,18,18,18,18,18,17,17,17,17,17,17,18,18 + db 18,18,18,18,18,18,18,18,18,18,19,17,17,17,17,17 + db 17,17,17,17,17,17,17,17,18,18,18,19,19,19,19,18 + db 18,18,18,18,18,17,17,17,17,17,17,17,16,16,16,17 + db 17,17,17,17,17,17,17,17,17,16,16,16,16,16,16,17 + db 17,18,18,17,17,17,17,17,17,17,16,16,16,16,16,16 + db 17,17,17,16,16,16,16,16,17,17,18,18,18,18,17,17 + db 17,17,17,17,17,17,17,16,16,16,16,16,15,15,15,15 + db 16,16,16,16,16,16,16,16,17,17,17,17,17,17,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,15,15,15,15,15 + db 15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,17 + db 17,17,17,17,17,16,16,16,17,17,17,17,17,17,17,17 + db 17,17,16,16,16,16,16,15,15,16,16,16,16,16,16,16 + db 16,16,15,15,15,15,15,15,15,15,15,15,15,15,15,14 + db 14,14,13,13,12,12,13,14,15,15,15,15,15,15,15,15 + db 16,16,16,16,16,16,16,16,16,17,17,17,17,16,16,16 + db 16,16,16,16,16,17,17,17,16,16,16,16,16,16,16,16 + db 17,17,16,16,16,16,16,15,15,15,15,15,16,16,16,16 + db 16,16,16,16,15,15,15,15,16,16,16,16,16,16,15,15 + db 15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,15,15,15,15,15,14,14,14,14,14,15,15 + db 15,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 17,17,17,17,17,17,17,17,17,17,17,17,17,16,16,16 + db 16,17,17,17,16,16,15,15,15,15,15,15,15,15,15,16 + db 16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,15,15 + db 15,15,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,17,17,17,17,16,16,16,16,16,16,16,16,16,16,15 + db 15,15,16,16,16,16,16,16,16,17,17,16,15,15,15,15 + db 14,14,14,14,13,13,13,13,13,14,14,14,15,15,14,14 + db 14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15 + db 15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,15 + db 15,16,16,16,16,15,15,14,15,16,16,16,15,15,14,14 + db 14,15,16,16,16,16,16,16,16,16,16,17,17,17,17,17 + db 17,17,17,17,18,18,18,18,17,17,16,16,16,16,16,17 + db 17,17,16,16,16,16,16,16,17,17,17,17,17,17,17,18 + db 18,17,17,16,16,16,16,16,16,17,17,17,17,17,17,17 + db 17,17,17,16,16,16,17,17,17,17,17,17,17,18,18,18 + db 18,18,18,19,19,19,19,18,18,18,17,17,17,17,17,17 + db 17,17,17,17,17,17,17,19,18,18,18,18,18,18,18,18 + db 18,18,19,19,19,20,19,19,19,19,18,18,18,18,18,18 + db 17,17,17,17,17,17,17,17,17,17,17,17,16,16,16,16 + db 17,17,17,17,17,18,18,17,17,16,16,16,16,16,16,17 + db 18,18,18,17,17,17,18,18,18,18,18,18,17,17,18,19 + db 19,19,18,17,17,16,16,16,16,16,17,17,17,17,17,17 + db 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17 + db 16,16,16,16,17,17,17,17,17,16,16,17,17,17,17,16 + db 16,16,16,16,16,16,16,16,16,15,16,16,16,16,17,17 + db 17,17,17,17,17,17,17,17,16,15,15,15,15,15,15,15 + db 16,15,16,16,16,16,16,16,17,17,17,16,16,16,17,17 + db 17,17,17,17,17,17,17,17,16,16,16,16,16,16,16,17 + db 17,17,17,17,17,17,17,16,16,15,15,16,16,16,16,15 + db 15,15,15,15,16,16,15,15,15,15,15,15,14,14,14,14 + db 14,13,13,14,15,15,15,15,15,15,15,15,15,15,16,16 + db 16,16,16,16,16,16,17,17,17,16,16,16,16,16,16,16 + db 17,17,17,17,17,16,16,16,16,16,16,16,16,17,17,17 + db 16,16,16,16,15,15,15,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,17,17,17,16,16,16,16,16,17 + db 17,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17 + db 17,17,17,17,17,17,16,16,16,16,16,17,17,17,17,17 + db 17,17,17,17,16,16,16,16,16,16,16,16,17,17,17,17 + db 17,17,17,16,17,17,17,17,17,16,16,16,16,16,16,16 + db 16,16,17,17,17,17,17,17,17,17,17,17,17,17,17,17 + db 17,17,17,17,17,16,16,16,16,16,16,15,15,15,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,16 + db 16,16,16,16,16,17,17,17,17,17,17,17,17,16,16,16 + db 16,16,15,15,15,16,17,18,17,16,15,15,15,15,14,14 + db 14,14,15,15,14,14,14,14,14,14,14,15,15,15,15,15 + db 15,14,14,14,14,15,15,15,15,15,15,15,15,15,15,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,15,14,15,16 + db 16,16,16,16,16,17,17,17,17,17,17,16,16,16,16,16 + db 17,17,16,16,16,14,14,14,15,15,16,16,16,16,16,16 + db 16,17,17,17,17,17,17,17,17,17,17,17,17,17,16,16 + db 16,16,17,17,17,17,17,17,17,17,17,17,17,17,17,17 + db 17,17,17,17,17,17,17,17,16,16,16,16,16,17,17,18 + db 19,19,19,18,17,17,18,18,18,18,18,18,17,17,17,18 + db 18,18,17,16,16,16,16,16,16,17,17,18,18,17,17,17 + db 17,17,16,16,16,16,17,17,17,17,17,17,17,17,17,17 + db 17,17,18,18,18,18,18,18,19,19,19,19,20,19,19,19 + db 18,19,19,19,18,18,18,18,18,18,18,17,17,17,18,18 + db 19,19,19,18,18,18,17,17,17,17,17,17,17,17,17,17 + db 16,16,16,16,16,17,17,18,18,18,17,17,17,17,17,17 + db 17,17,17,18,18,17,17,17,18,18,19,19,19,19,19,18 + db 18,18,17,17,17,17,17,17,17,17,17,17,17,17,17,18 + db 18,18,18,18,18,18,17,17,17,17,18,18,18,18,18,17 + db 17,17,17,17,16,16,16,16,16,16,16,16,16,16,16,17 + db 17,17,17,17,17,17,17,16,16,16,15,15,16,16,16,16 + db 16,17,17,17,17,16,16,16,17,17,17,17,17,17,16,16 + db 16,16,16,17,17,17,17,17,16,16,16,16,16,16,16,16 + db 17,17,17,17,16,16,16,16,15,15,15,15,15,15,15,15 + db 15,15,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,15,15,14,14,15,15,15,15,15,14 + db 14,14,14,14,15,15,15,15,16,16,16,15,15,15,15,15 + db 16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17 + db 16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,16 + db 16,16,16,16,16,17,17,16,16,16,17,17,17,17,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,17,17,17,17,17,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,17,17,17,17,17,17,17,17,17,16,16 + db 16,17,17,17,17,17,17,17,17,17,16,17,17,17,17,17 + db 17,17,17,17,17,17,18,18,18,18,18,17,17,17,17,17 + db 17,16,16,17,17,17,17,17,17,17,17,17,17,17,17,17 + db 17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18 + db 17,17,17,17,17,17,17,16,16,16,16,17,17,17,17,17 + db 17,17,17,17,17,17,17,17,17,17,17,16,16,16,16,16 + db 16,15,15,15,15,15,16,16,16,16,16,16,16,17,17,17 + db 17,17,16,16,17,18,17,16,15,14,14,14,14,14,13,13 + db 13,14,14,14,14,14,15,15,15,15,16,16,16,15,15,14 + db 14,15,15,16,16,16,16,16,16,16,16,16,15,15,15,16 + db 16,16,16,16,16,16,16,16,15,15,15,15,16,16,16,17 + db 17,17,17,17,17,16,16,16,16,16,16,16,16,17,17,17 + db 16,16,16,16,15,15,15,16,16,17,17,17,17,17,17,17 + db 17,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17 + db 17,17,17,18,18,18,18,18,17,17,17,17,18,18,18,18 + db 18,18,18,17,17,17,17,17,17,17,17,17,17,17,17,17 + db 18,18,18,19,19,19,19,19,18,18,17,17,17,18,18,17 + db 17,17,17,17,17,17,17,17,18,18,18,17,17,16,16,16 + db 16,16,17,17,17,17,17,17,17,17,17,17,18,18,18,19 + db 19,19,18,18,17,17,17,18,18,18,18,18,18,18,19,19 + db 19,19,18,18,19,19,20,20,20,19,19,19,18,18,19,19 + db 19,18,17,18,18,18,18,18,18,19,19,18,18,18,17,17 + db 17,17,17,17,17,17,17,17,17,17,18,18,17,17,17,17 + db 17,17,17,18,18,18,19,19,19,18,18,17,17,17,17,18 + db 18,19,19,19,19,18,18,17,18,18,18,18,18,19,19,19 + db 19,19,19,19,19,19,19,19,19,19,18,18,18,19,19,18 + db 18,17,18,18,18,17,17,17,17,17,17,17,17,17,16,16 + db 16,16,16,16,16,16,16,17,17,17,17,16,16,16,17,17 + db 17,16,16,16,15,15,15,15,15,15,15,15,16,16,16,16 + db 17,17,17,17,16,16,16,16,17,17,17,17,17,17,17,17 + db 16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,17 + db 17,17,16,16,16,16,16,16,17,17,17,16,16,16,16,16 + db 15,16,16,16,15,15,15,15,15,15,14,14,15,15,15,15 + db 15,15,15,15,15,15,15,15,15,15,15,16,16,16,16,16 + db 16,16,16,16,16,16,16,17,17,17,16,16,16,16,16,16 + db 16,16,16,17,17,17,17,17,17,17,17,16,16,16,16,16 + db 16,16,17,17,17,17,17,17,17,17,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17 + db 17,17,16,16,16,16,16,16,16,16,16,16,16,17,17,17 + db 17,17,17,17,17,16,17,17,17,17,17,17,17,17,17,17 + db 17,17,17,17,16,16,16,16,17,17,17,17,17,17,17,17 + db 17,17,18,18,18,18,17,17,17,17,17,17,17,17,17,16 + db 16,16,16,17,17,17,17,18,18,18,18,18,18,18,17,17 + db 17,18,18,18,18,18,18,18,17,17,17,17,17,17,17,17 + db 17,17,16,16,16,16,16,17,17,17,16,16,16,16,16,16 + db 16,16,17,17,17,17,16,16,16,17,17,17,17,17,16,16 + db 16,16,16,16,16,16,16,16,16,17,17,17,17,16,16,16 + db 16,16,17,18,17,16,15,15,15,15,15,15,15,14,14,15 + db 15,15,15,15,15,15,15,14,14,14,14,14,14,14,14,14 + db 15,14,14,15,15,15,15,15,15,15,15,16,16,16,16,16 + db 16,16,16,17,17,17,17,16,16,16,16,16,15,15,15,15 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,15,15,15,16,16,16,16,16,16,15,15,15,15,15,15 + db 16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18 + db 17,18,18,19,19,18,18,18,19,19,19,19,19,19,19,19 + db 19,19,19,19,19,18,18,18,18,18,17,18,18,19,19,19 + db 19,18,18,17,17,17,17,18,18,19,19,19,18,18,18,17 + db 17,17,17,17,17,17,18,18,17,17,17,17,17,17,17,17 + db 17,17,17,17,18,18,18,19,19,18,18,18,18,18,18,17 + db 18,19,19,19,18,18,19,19,19,20,20,20,19,19,18,18 + db 19,19,19,19,19,19,19,19,19,19,19,18,18,18,18,18 + db 17,17,18,18,19,18,17,17,17,18,18,19,19,18,18,18 + db 17,17,17,17,17,17,17,17,17,17,18,18,18,18,18,18 + db 17,17,17,17,17,17,17,17,17,17,18,18,19,19,19,19 + db 18,18,18,17,17,17,17,17,17,17,17,17,17,17,18,18 + db 19,19,19,18,17,17,18,19,19,19,19,19,19,19,19,19 + db 18,18,18,18,17,18,18,17,17,17,17,17,17,17,17,17 + db 17,17,17,17,17,17,17,17,17,17,17,17,16,16,16,16 + db 16,16,16,16,16,17,17,17,16,16,17,17,17,17,16,16 + db 16,16,17,17,17,17,17,17,17,17,17,17,17,17,17,17 + db 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17 + db 17,17,17,17,17,17,17,17,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,15,15,15,15,15,15,15 + db 15,15,15,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,17,17,16,16,16,16,16,16,16,16,16,16,17,17,17 + db 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17 + db 17,17,17,16,16,17,17,17,17,17,17,17,17,17,16,16 + db 16,16,16,16,16,16,17,17,17,17,17,17,16,16,16,16 + db 16,16,16,16,17,17,17,17,17,17,17,17,17,17,17,17 + db 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17 + db 17,17,17,17,17,17,17,17,17,17,17,17,17,17,18,18 + db 18,18,18,18,17,17,17,17,17,17,18,18,18,18,18,18 + db 17,17,17,17,17,17,18,18,18,17,17,17,17,18,18,18 + db 18,18,18,18,18,17,17,17,17,16,16,16,16,17,17,17 + db 17,17,17,17,17,17,17,16,16,16,16,16,16,16,16,16 + db 16,16,17,17,17,17,17,17,17,17,17,17,17,17,17,17 + db 17,17,17,17,17,17,16,16,16,16,16,16,16,17,17,17 + db 18,18,17,16,15,15,15,15,15,14,14,14,13,13,14,14 + db 14,14,14,14,15,15,15,15,15,15,14,14,14,15,15,15 + db 16,15,15,15,15,16,16,16,16,16,16,15,15,15,15,16 + db 16,16,16,16,16,16,16,16,16,15,15,15,16,16,16,16 + db 16,16,16,16,17,17,17,17,16,16,16,17,17,17,17,17 + db 17,17,17,17,17,17,16,16,16,16,16,16,16,16,17,17 + db 17,17,17,17,17,17,17,17,18,18,18,18,18,17,18,18 + db 18,18,19,19,19,19,19,19,19,19,19,18,17,17,18,19 + db 19,19,18,18,17,17,17,17,17,17,17,17,17,17,17,18 + db 18,18,19,19,19,19,18,18,17,17,17,17,17,17,17,17 + db 17,17,18,18,18,18,18,18,17,17,17,17,17,17,17,17 + db 17,17,18,18,18,19,19,18,18,17,17,17,18,19,18,18 + db 17,17,18,18,18,18,18,19,19,19,19,19,19,19,19,19 + db 19,20,20,20,20,20,19,19,19,20,20,20,19,19,19,18 + db 18,19,19,19,18,18,18,18,18,18,17,17,17,17,17,17 + db 18,18,18,18,17,17,18,18,18,18,19,19,19,19,19,19 + db 19,19,19,18,18,18,17,17,17,17,17,17,17,17,17,17 + db 17,18,18,18,19,19,19,19,18,18,18,18,18,18,18,18 + db 19,19,19,18,18,18,18,18,18,18,18,18,18,18,18,18 + db 19,19,19,19,19,19,19,18,18,18,18,18,18,18,18,18 + db 18,18,18,18,18,18,18,17,17,17,17,17,16,16,16,16 + db 17,17,17,17,17,16,16,16,16,16,16,16,16,17,17,17 + db 17,17,16,16,16,17,17,17,17,17,17,18,18,18,18,18 + db 18,17,17,17,17,17,18,18,18,18,18,17,17,17,17,17 + db 17,17,17,17,17,17,17,17,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17 + db 17,17,17,17,17,17,17,17,16,16,17,17,17,17,17,17 + db 17,17,17,18,18,18,18,18,18,18,18,18,17,17,17,17 + db 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17 + db 17,17,17,17,17,17,17,17,17,17,17,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17 + db 17,17,17,17,16,18,18,18,18,18,18,18,18,18,18,18 + db 18,18,18,18,18,18,18,18,18,18,17,17,17,17,17,17 + db 17,17,17,17,18,18,18,18,18,18,18,18,18,18,18,18 + db 18,18,17,17,17,17,17,17,17,18,18,18,18,18,18,18 + db 18,18,18,18,18,18,17,17,17,17,17,17,17,17,17,17 + db 18,18,18,17,17,17,17,17,17,17,17,17,17,17,17,18 + db 18,18,18,17,17,17,17,18,18,18,18,17,16,17,17,17 + db 17,17,18,18,18,17,17,17,17,17,17,17,17,17,18,18 + db 17,16,15,15,15,15,16,16,15,15,14,14,14,14,14,15 + db 15,15,15,15,15,15,15,15,15,16,16,16,15,15,16,16 + db 16,16,16,16,16,16,15,15,15,15,15,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,17,17,17,17,17,17,17,17,17,17,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17 + db 17,17,18,18,18,18,18,18,18,17,17,18,18,19,19,19 + db 19,19,18,18,18,18,18,18,18,18,18,18,18,18,18,19 + db 19,19,18,18,18,18,18,18,18,18,19,19,19,19,18,18 + db 18,17,17,17,17,17,17,17,17,17,17,17,18,18,18,19 + db 19,19,19,19,19,19,19,19,18,18,18,18,17,17,18,18 + db 18,18,17,17,17,17,17,17,18,18,18,18,18,18,19,19 + db 19,18,18,19,19,19,20,20,20,19,19,19,20,20,20,20 + db 20,20,20,20,20,20,20,20,20,19,19,19,19,19,20,20 + db 20,19,19,19,19,19,18,18,18,18,18,18,18,18,18,18 + db 19,19,19,18,18,18,17,17,17,17,17,17,17,17,18,18 + db 19,19,19,19,19,18,18,18,18,18,18,18,18,18,18,18 + db 18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19 + db 19,19,19,19,19,19,18,18,18,17,17,17,17,17,17,17 + db 17,17,17,18,18,19,19,19,19,19,19,19,19,19,19,19 + db 18,18,18,18,18,18,18,18,18,18,18,18,17,17,17,17 + db 17,17,17,17,17,17,17,17,16,16,17,17,17,17,17,17 + db 17,17,17,17,17,18,18,18,18,18,18,17,17,17,17,17 + db 17,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18 + db 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17 + db 17,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17 + db 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17 + db 17,17,17,17,18,18,18,18,18,18,18,17,17,17,17,17 + db 17,17,18,18,18,18,18,18,18,18,18,18,18,17,17,17 + db 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17 + db 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17 + db 17,17,17,18,18,18,18,18,18,17,17,17,17,17,17,17 + db 17,17,17,17,18,18,18,18,18,18,18,18,18,18,18,18 + db 18,18,18,18,18,18,18,18,18,18,18,17,17,17,17,17 + db 17,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18 + db 18,18,18,18,18,18,18,18,18,18,18,18,17,17,17,17 + db 17,17,17,18,18,18,18,18,18,18,18,18,18,18,18,18 + db 18,18,18,18,18,18,18,18,17,17,17,17,17,17,17,17 + db 17,18,18,18,18,18,18,18,18,18,18,18,18,18,17,16 + db 15,15,15,15,15,15,15,15,16,15,15,15,15,15,15,16 + db 16,16,16,16,16,16,16,16,15,15,15,15,16,16,16,16 + db 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 + db 16,16,16,17,17,17,17,17,17,17,17,17,17,17,16,16 + db 16,16,16,16,16,16,17,18,18,18,18,18,17,17,17,17 + db 17,17,17,17,17,17,17,17,17,17,17,18,18,18,18,18 + db 18,18,18,18,18,18,17,17,17,17,18,19,19,18,18,17 + db 17,17,17,17,17,17,17,17,17,18,18,18,19,19,19,19 + db 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19 + db 18,18,18,18,18,18,18,18,18,18,18,18,18,19,19,19 + db 19,19,18,18,17,17,17,17,17,17,17,17,18,18,18,19 + db 19,19,18,18,18,18,18,18,18,18,18,18,19,19,19,19 + db 19,20,20,20,19,19,19,19,19,20,20,20,20,20,20,20 + db 20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,-1 \ No newline at end of file diff --git a/ALKU/HOI.LBM b/ALKU/HOI.LBM new file mode 100644 index 0000000..e18f79f Binary files /dev/null and b/ALKU/HOI.LBM differ diff --git a/ALKU/HOI.U b/ALKU/HOI.U new file mode 100644 index 0000000..433f490 Binary files /dev/null and b/ALKU/HOI.U differ diff --git a/ALKU/HOIKKA.LBM b/ALKU/HOIKKA.LBM new file mode 100644 index 0000000..eaa77b0 Binary files /dev/null and b/ALKU/HOIKKA.LBM differ diff --git a/ALKU/INCBIN.EXE b/ALKU/INCBIN.EXE new file mode 100644 index 0000000..ddf3faa Binary files /dev/null and b/ALKU/INCBIN.EXE differ diff --git a/ALKU/INCLUDE.ASM b/ALKU/INCLUDE.ASM new file mode 100644 index 0000000..72b0b59 --- /dev/null +++ b/ALKU/INCLUDE.ASM @@ -0,0 +1,22 @@ + IDEAL + MODEL large + P386 + +PUBLIC C hzpic, C font + +SEGMENT kakka0 para use16 private 'FAR_DATA' +LABEL hzpic BYTE +INCLUDE 'hoi.in0' +ENDS +SEGMENT kakka1 byte use16 private 'FAR_DATA' +INCLUDE 'hoi.in1' +ENDS + +SEGMENT asdf byte use16 private 'FAR_DATA' +LABEL font byte +INCLUDE 'fona.inc' + +dw 1500*5 dup(?) + +ENDS +END diff --git a/ALKU/INCLUDE.OBJ b/ALKU/INCLUDE.OBJ new file mode 100644 index 0000000..67c35d4 Binary files /dev/null and b/ALKU/INCLUDE.OBJ differ diff --git a/ALKU/LBM2P.EXE b/ALKU/LBM2P.EXE new file mode 100644 index 0000000..7a587e1 Binary files /dev/null and b/ALKU/LBM2P.EXE differ diff --git a/ALKU/LBM2U.EXE b/ALKU/LBM2U.EXE new file mode 100644 index 0000000..e3613f6 Binary files /dev/null and b/ALKU/LBM2U.EXE differ diff --git a/ALKU/MAIN.C b/ALKU/MAIN.C new file mode 100644 index 0000000..7b6c435 --- /dev/null +++ b/ALKU/MAIN.C @@ -0,0 +1,542 @@ +#include +#include +#include +#include "tweak.h" +#include "h:\u2\dis\dis.h" + +#define SCRLF 9 + +extern init_copper(); +extern close_copper(); +extern far int frame_count; +extern far char * far cop_pal; +extern far int do_pal; +extern far int cop_start; +extern far int cop_scrl; +extern far int cop_dofade; +extern far char * far cop_fadepal; +extern far char fadepal[]; + +extern char far hzpic[]; +extern outline(char far *f, char far *t); +extern ascrolltext(int scrl, int *dtau); +char * far vmem=(char *)0x0a0000000L; +int mmask[4]={0x0102,0x0202,0x0402,0x0802}; + +char (* far vvmem)[176]; +extern char far font[31][1500]; +char rowbuf[1024]; + +char palette[768]; // pic +char palette2[768]; // pic & text + +char fade1[768]; // black +char fade2[768]; // text + +int picin[768]; +int textin[768]; +int textout[768]; + +char *fonaorder="ABCDEFGHIJKLMNOPQRSTUVWXabcdefghijklmnopqrstuvwxyz0123456789!?,.:()+-*='™"; +int fonap[256]; +int fonaw[256]; + +int far dtau[30000]; +char far tbuf[186][352]; + +int a=0,p=0,tptr=0; + +main() + { + int aa,b,c,x,y,f; + + asm mov ax, 3 + asm int 10h + + init(); + + + while(dis_sync()<1 && !dis_exit()); + + prtc(160,120,"A"); + prtc(160,160,"Future Crew"); + prtc(160,200,"Production"); + dofade(fade1,fade2); wait(300); dofade(fade2,fade1); fonapois(); + + while(dis_sync()<2 && !dis_exit()); + + prtc(160,160,"First Presented"); + prtc(160,200,"at Assembly 93"); + dofade(fade1,fade2); wait(300); dofade(fade2,fade1); fonapois(); + + while(dis_sync()<3 && !dis_exit()); + + prtc(160,120,"in"); + prtc(160,160,""); + prtc(160,179,"™"); + dofade(fade1,fade2); wait(300); dofade(fade2,fade1); fonapois(); + + while(dis_sync()<4 && !dis_exit()); + + memcpy(fadepal,fade1,768); + cop_fadepal=picin; + cop_dofade=128; + for(a=1,p=1,f=0,frame_count=0;cop_dofade!=0 && !dis_exit();) + do_scroll(2); + + for(f=60;a<320 && !dis_exit();) + { + if(f==0) { + cop_fadepal=textin; + cop_dofade=64; + f+=20; + } + else if(f==50) { + cop_fadepal=textout; + cop_dofade=64; + f++; + } + else if(f>50 && cop_dofade==0) { + cop_pal=palette; do_pal=1; f++; + memset(tbuf,0,186*320); + switch(tptr++) { + case 0: + addtext(160,50,"Graphics"); + addtext(160,90,"Marvel"); + addtext(160,130,"Pixel"); // sucks + ffonapois(); + break; + case 1: + faddtext(160,50,"Music"); + faddtext(160,90, "Purple Motion"); + faddtext(160,130, "Skaven"); + ffonapois(); + break; + case 2: + faddtext(160,30,"Code"); + faddtext(160,70, "Psi"); + faddtext(160,110, "Trug"); + faddtext(160,148, "Wildfire"); + ffonapois(); + break; + case 3: + faddtext(160,50,"Additional Design"); + faddtext(160,90, "Abyss"); +// faddtext(160,110,"Useless Design"); + faddtext(160,130, "Gore"); + ffonapois(); + break; + case 4: + ffonapois(); + break; + default: + faddtext(160,80, "BUG BUG BUG"); + faddtext(160,130, "Timing error"); + ffonapois(); + break; + } + while(((a&1) || dis_sync()<4+tptr) && !dis_exit() && a<319) + do_scroll(0); + aa=a; + if(aa<320-12) fmaketext(aa+16); + f=0; + } + else f++; + do_scroll(1); + } + if(f>63/SCRLF){ + dofade(palette2,palette); + } + fonapois(); + close_copper(); + } + +init() { + int a,b,c,x,y,p=0,f; + + dis_partstart(); + tw_opengraph(); + init_copper(); + tw_setpalette(fade1); + memcpy(palette,hzpic+16,768); + + for(a=0;a<88;a++) + { + outline(MK_FP(FP_SEG(hzpic),FP_OFF(hzpic)+a*4+784), MK_FP(0x0a000,a+176*50)); + outline(MK_FP(FP_SEG(hzpic),FP_OFF(hzpic)+a*4+784), MK_FP(0x0a000,a+176*50+88)); + } + + for(y=0;y<32;y++) + { + for(a=0;a<1500;a++) + { + switch(font[y][a]&3) + { + case 0x1 : b=0x40; break; + case 0x2 : b=0x80; break; + case 0x3 : b=0xc0; break; + default : b=0; + } + font[y][a]=b; + } + } + + for(y=0;y<768;y+=3) + { + if(y<64*3) + { + palette2[y+0]=palette[y+0]; + palette2[y+1]=palette[y+1]; + palette2[y+2]=palette[y+2]; + } + else if(y<128*3) + { + palette2[y+0]=(fade2[y+0]=palette[0x1*3+0])*63+palette[y%(64*3)+0]*(63-palette[0x1*3+0])>>6; + palette2[y+1]=(fade2[y+1]=palette[0x1*3+1])*63+palette[y%(64*3)+1]*(63-palette[0x1*3+1])>>6; + palette2[y+2]=(fade2[y+2]=palette[0x1*3+2])*63+palette[y%(64*3)+2]*(63-palette[0x1*3+2])>>6; + } + else if(y<192*3) + { + palette2[y+0]=(fade2[y+0]=palette[0x2*3+0])*63+palette[y%(64*3)+0]*(63-palette[0x2*3+0])>>6; + palette2[y+1]=(fade2[y+1]=palette[0x2*3+1])*63+palette[y%(64*3)+1]*(63-palette[0x2*3+1])>>6; + palette2[y+2]=(fade2[y+2]=palette[0x2*3+2])*63+palette[y%(64*3)+2]*(63-palette[0x2*3+2])>>6; + } + else + { + palette2[y+0]=(fade2[y+0]=palette[0x3*3+0])*63+palette[y%(64*3)+0]*(63-palette[0x3*3+0])>>6; + palette2[y+1]=(fade2[y+1]=palette[0x3*3+1])*63+palette[y%(64*3)+1]*(63-palette[0x3*3+1])>>6; + palette2[y+2]=(fade2[y+2]=palette[0x3*3+2])*63+palette[y%(64*3)+2]*(63-palette[0x3*3+2])>>6; + } + } + + for(a=192;a<768;a++) palette[a]=palette[a-192]; + + for(x=0;x<1500 && *fonaorder;) + { + while(x<1500) + { + for(y=0;y<32;y++) if(font[y][x]) break; + if(y!=32) break; + x++; + } + b=x; + while(x<1500) + { + for(y=0;y<32;y++) if(font[y][x]) break; + if(y==32) break; + x++; + } + //printf("%c: %i %i\n",*fonaorder,b,x-b); + fonap[*fonaorder]=b; + fonaw[*fonaorder]=x-b; + fonaorder++; + } + fonap[32]=1500-20; + fonaw[32]=16; + + for(a=0;a<768;a++) + { + textin[a]=(palette2[a]-palette[a])*256/64; + textout[a]=(palette[a]-palette2[a])*256/64; + picin[a]=(palette[a]-fade1[a])*256/128; + } + } + +wait(int t) + { + while(frame_count>6); + cop_pal=pal; do_pal=1; + while(frame_count<1); frame_count=0; + } + } +char fuckpal[768]; + +fdofade(char far *pal1, char far *pal2, int a) + { + int b,c; + + if(a<0 || a>64) return(0); + for(b=0;b<768;b++) fuckpal[b]=(pal1[b]*(64-a)+pal2[b]*a>>6); + cop_pal=fuckpal; do_pal=1; + } + +addtext(int tx,int ty,char *txt) + { + int a,b,c,x,y,w=0; + char *t=txt; + + while(*t) w+=fonaw[*t++]+2; + + t=txt; w/=2; + while(*t) + { + for(x=0;x +#include "..\dis\dis.h" + +#include "readp.c" + +extern char pic[]; + +char *vram=(char *)0xa0000000L; + +char pal2[768]; +char palette[768]; +char rowbuf[640]; + +main() +{ + int a,b,c,y; + dis_partstart(); + outp(0x3c4,2); + outp(0x3c5,15); + memset(vram,15,32768); + memset(vram+32768,15,32768); + //_asm mov ax,80h+13h + //_asm int 10h + for(a=0;a<32;a++) dis_waitb(); + outp(0x3c8,0); + for(a=0;a<255;a++) + { + outp(0x3c9,63); + outp(0x3c9,63); + outp(0x3c9,63); + } + outp(0x3c9,0); + outp(0x3c9,0); + outp(0x3c9,0); + inp(0x3da); + outp(0x3c0,0x11); + outp(0x3c0,255); + outp(0x3c0,0x20); + //inittwk(); + _asm + { + mov dx,3d4h + mov ax,000ch + out dx,ax + mov ax,000dh + out dx,ax + mov al,9 + out dx,al + inc dx + in al,dx + and al,not 80h + and al,not 31 + out dx,al + mov dx,3c0h + mov al,11h + out dx,al + mov al,0 + out dx,al + mov al,32 + out dx,al + } + _asm + { + mov dx,3c0h + mov al,11h + out dx,al + mov al,255 + out dx,al + mov al,20h + out dx,al + } + + readp(palette,-1,pic); + for(y=0;y<400;y++) + { + readp(rowbuf,y,pic); + lineblit(vram+(unsigned)y*80U,rowbuf); + } + + for(c=0;c<=128;c++) + { + for(a=0;a<768-3;a++) pal2[a]=((128-c)*63+palette[a]*c)/128; + dis_waitb(); + setpalarea(pal2,0,254); + } + setpalarea(palette,0,254); +} diff --git a/BEG/BEG.EXE b/BEG/BEG.EXE new file mode 100644 index 0000000..f53b4bd Binary files /dev/null and b/BEG/BEG.EXE differ diff --git a/BEG/BEG.OBJ b/BEG/BEG.OBJ new file mode 100644 index 0000000..2e35f2a Binary files /dev/null and b/BEG/BEG.OBJ differ diff --git a/BEG/DP_PREFS b/BEG/DP_PREFS new file mode 100644 index 0000000..8f0ef71 Binary files /dev/null and b/BEG/DP_PREFS differ diff --git a/BEG/MAKEFILE b/BEG/MAKEFILE new file mode 100644 index 0000000..ba4dc0b --- /dev/null +++ b/BEG/MAKEFILE @@ -0,0 +1,24 @@ +all : beg.exe + +# objects + +objs=beg.obj asm.obj + +# option flags + +asm_f = /ML /m9 /s /JJUMPS +c_f = /AL /c /W3 + +# general compile orders + +.asm.obj : + tasm $(asm_f) $< + +.c.obj : + cl /qc $(c_f) $< + +beg.exe : $(objs) + link /E $(objs)+_pic.obk+..\dis\disc.obj,beg.exe,nul; + copy beg.exe ..\main\data\beglogo.exe + + diff --git a/BEG/READP.C b/BEG/READP.C new file mode 100644 index 0000000..67cb5ef --- /dev/null +++ b/BEG/READP.C @@ -0,0 +1,64 @@ +struct st_readp +{ + int magic; + int wid; + int hig; + int cols; + int add; +}; + +void readp(char *dest,int row,char *src) +{ + int bytes,a,b; + struct st_readp *hdr; + hdr=(struct st_readp *)src; + if(row==-1) + { + memcpy(dest,src+16,hdr->cols*3); + return; + } + if(row>=hdr->hig) return; + src+=hdr->add*16; + while(row) + { + src+=*(int *)src; + src+=2; + row--; + } + bytes=*(int *)src; + src+=2; + _asm + { + push si + push ds + push di + push es + mov cx,bytes + lds si,src + add cx,si + les di,dest + l1: mov al,ds:[si] + inc si + or al,al + jns l2 + mov ah,al + and ah,7fh + mov al,ds:[si] + inc si + l4: mov es:[di],al + inc di + dec ah + jnz l4 + cmp si,cx + jb l1 + jmp l3 + l2: mov es:[di],al + inc di + cmp si,cx + jb l1 + l3: pop es + pop di + pop ds + pop si + } +} diff --git a/BEG/SRTITLE.LBM b/BEG/SRTITLE.LBM new file mode 100644 index 0000000..f54835d Binary files /dev/null and b/BEG/SRTITLE.LBM differ diff --git a/BEG/SRTITLE.UP b/BEG/SRTITLE.UP new file mode 100644 index 0000000..12fe4c8 Binary files /dev/null and b/BEG/SRTITLE.UP differ diff --git a/BEG/TMP.BBM b/BEG/TMP.BBM new file mode 100644 index 0000000..04a9f64 Binary files /dev/null and b/BEG/TMP.BBM differ diff --git a/BEG/_PIC.OBK b/BEG/_PIC.OBK new file mode 100644 index 0000000..7af933d Binary files /dev/null and b/BEG/_PIC.OBK differ diff --git a/CODE b/CODE new file mode 100644 index 0000000..7dc8839 --- /dev/null +++ b/CODE @@ -0,0 +1,98 @@ + Unreal 2 - Coders Info + ====================== + +__________________________________________________________________________ +1. General + +Nothing general so far... Except read this file! + +__________________________________________________________________________ +2. Directory structure + +See file DIRS for descriptions about current directories. + +I'm going to use this structure, hope you will too. For me [root] is +D:\S\P\U2, but it could be anything you like. I'll use \ as root +for the rest of the text for simplicity, so [root]\DIS is just \DIS. + +Refer to all files relatively. That is, if you are coding part X and +need DIS.H, refer to it as "..\DIS\DIS.H". This way our sources are +easily shared and minimum number of files lies in multiple directories. + +Don't put your own data to \MAIN\DATA, it's reserved for the loader. +The idea is that there will be a batch file etc in MAIN that will +copy all part exe's from part directories to \MAIN\DATA, and the +loader will load them from there. The makefile in MAIN will create +the combined exe to \. + +When you create part directories for your own parts, use intelligent +dir names like GLENZ, not something like PART1. + +__________________________________________________________________________ +3. Coding concerns + +The current suggested memory limit is about 450K, so it'd be great +if your part would run in it. No need to start counting memory +usage just yet, but keep this in mind, so no this-requires-620K-of- +free-mem-routines. Note also that you must use the DIS routines, +see later section. + +__________________________________________________________________________ +4. Music + +Music will most probably be loaded to EMS, so it doesn't use main +memory. There will be equpointer information etc available from +DIS so using equs etc will be possible. + +__________________________________________________________________________ +5. Demo Interrupt Server (DIS) + +This is an unreal style interrupt server through which certain +demo operations should be performed. + +Mainly, exit status (any key pressed) and waitborder should be +processesd through DIS. DIS will also provide internal copper +routine for general copper needs and poll the music. There will +also be an option for you to use the DIS copper for simple +call this procedure once per frame operations. If your part +requires hi resolution copper, you must include it to your +code. There will be an option to temporarily shut down the +DIS copper. If that is done you'll also need to poll the music +etc, but more on that when special coppers are needed. + +More exact information on DIS from the \DIS directory (source +& documentation included). Once again, don't modify the source, +since if you do, our copies will be out of sync. + +There is a resident DIS server in \DIS, which can be used to +test the parts before including them to the actual demo. The +demo will have the DIS built in. With this resident utility, +all parts should be ready-for-demo, which will make compiling +the demo easier and reduce the bugs otherwise generated in +the progress. + +The basic structure of a part using DIS: +1. Initialize dis (actually tell it of a new part) + dis_version() /* will return 0 if no dis, in mem, then exit to dos */ + or dis_partstart() /* checks & exits automatically */ + +2. Do the demo effect, remember to wait for borders with + dis_waitb() + +3. Repeat 2 until dis_exit() returns 1. + +Note, that you can use dis_indemo() to determine if you are actually +running inside the demo, since inside the demo you generally don't +reset video mode etc for smooth transitions. If dis_indemo returns +0, you are running from dos, and should set/reset video on startup +and exit. + +__________________________________________________________________________ +6. Part packaging + +Every part should be combined to a single exe file. Convert +data files to object files and link. If you need (like me) +a paragraph starting segment (offset=0, segment para), use +\UTIL\DOOBJ. + +The EXE should run on it's own with DIS on the background. diff --git a/COMAN/ASM b/COMAN/ASM new file mode 100644 index 0000000..62b6f6d --- /dev/null +++ b/COMAN/ASM @@ -0,0 +1,158 @@ +PUBLIC _docol,_docolset + +PUBLIC _docol_mapc,_docol_maph,_docol_ycd +PUBLIC _docol_hig,_docol_higr,_docol_higrr,_docol_higrrr +PUBLIC _docol_bailout,_docol_debug +PUBLIC _docol_avg + +BAILOUT equ 256 + +ALIGN 16 +_docol_hig dd 256 dup(0) +_docol_higr dd 256 dup(0) +_docol_higrr dd 256 dup(0) +_docol_higrrr dd 256 dup(0) +_docol_ycd dd 200 dup(0) +_docol_bailout dw BAILOUT +_docol_mapc dw 0,0 +_docol_maph dw 0,0 +_docol_avg dw 0,0 +_docol_debug dd 0 + +_docolset PROC FAR + CBEG + movpar ax,0 + mov cx,(slf1-slf0)/BAILOUT + mul cx + add ax,OFFSET slf0 + mov bx,ax + movpar ax,1 + movpar dx,2 + mov cs:[bx+10+2],ax + mov cs:[bx+10+4],dx + CEND +_docolset ENDP + +public _doavg +_doavg PROC FAR + CBEG + mov ax,SEG _vbuf + mov es,ax + mov ds,cs:_docol_avg[2] + movpar di,0 + + add di,80*320 + mov cx,200-80 +@@1: mov bl,es:[di] + diadd=2 + REPT 159 + mov bh,es:[di+diadd] + mov al,ds:[bx] + mov bl,bh + mov es:[di+diadd-1],al + diadd=diadd+2 + ENDM + add di,320 + dec cx + jz @@2 + jmp @@1 +@@2: + CEND +_doavg ENDP + +_docol PROC FAR + CBEG + mov ax,cs + mov ds,ax + + push bp ;store C parameter start + + mov fs,ds:_docol_maph[2] + mov gs,ds:_docol_mapc[2] + + movpar ax,1 + shl ax,7 + movpar si,0 + movzx esi,si + add si,ax ;basepos + + xor ebx,ebx + ;movpar ax,3 ;screen pos + ;and ax,3 + ;mov bh,al ;scatterer + + movpar dx,2 + movsx edx,dx + shl edx,7 + rol edx,16 + mov bp,dx + add bp,-128 ;baseadd + xor dx,dx + + ;selfmod: vram/pos, docol_ycd/pos + ;eax - - + ;ebx indexer-tmp (+scatterpos) + ;ecx - - + ;edx xaddl 0 + ;esi xl x + ;edi - - + ;ebp - xaddh + ;ds code + ;es - + ;fs maph + ;gs mapc + diadd=OFFSET slf0 + REPT BAILOUT + and si,16383 + mov bl,fs:[si] + mov eax,ds:_docol_hig[ebx*4] + mov dword ptr ds:[diadd+0+2],eax ;set compare + add esi,edx + mov al,gs:[si] + mov byte ptr ds:[diadd+8+1],al ;set color + adc si,bp + diadd=diadd+(slf1-slf0)/BAILOUT + ENDM + + jmp @@flsh +@@flsh: pop bp ;restore C parameter start + + mov ax,SEG _vbuf + mov es,ax + movpar ax,3 + mov bp,ax + mov di,OFFSET _docol_ycd+199*4 + mov ecx,ds:[di] + xor eax,eax + + ;selfmod: vram/pos, docol_ycd/pos + ;eax yc ycl + ;ebx - - + ;ecx ycaddh ycaddl + ;edx - - + ;esi - - + ;edi - offset to ycd + ;ebp - offset to vram + ;ds code + ;es vram + + int 3 + +slf0: siadd=0 + REPT BAILOUT + local l1,l2,l3 +l3: cmp eax,12345678h ;@0 compare ray / scene + jge short l1 ;@6 hit? + mov cl,12h ;@8 load color +l2: sub eax,12345678h ;@10 adjust next ray pos + mov es:[bp+0],cl ; store color + sub di,4 ; adjust raytable pointer + sub bp,320 ; next screen pos + cmp dword ptr ds:l3[2],eax ; next ray hits too? + jge short l2 ; yup. + mov ecx,ds:[di] ; next ray direction +l1: add eax,ecx ; on we go in Z + siadd=siadd+4 + ENDM +slf1: CEND +_docol ENDP diff --git a/COMAN/ASM.ASM b/COMAN/ASM.ASM new file mode 100644 index 0000000..d20ebe8 --- /dev/null +++ b/COMAN/ASM.ASM @@ -0,0 +1,239 @@ +EXTRN theloop:far + +code SEGMENT para public 'CODE' +ASSUME cs:code +.386 +LOCALS + +PUBLIC _wave1,_wave2,_vbuf,_cameralevel +_wave1 dw 0,0 +_wave2 dw 0,0 +_vbuf dw 0,0 +_cameralevel dw 0 + +PUBLIC _sin1024 +include sin1024.inc + +PUBLIC _combguse +_combguse db 90*160 dup(0) + +PUBLIC _setborder +_setborder PROC FAR + push bp + mov bp,sp + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,11h+32 + out dx,al + mov al,[bp+6] + out dx,al + pop bp + ret +_setborder ENDP + +PUBLIC _inittwk +_inittwk PROC FAR + push bp + mov bp,sp + push si + push di + push ds + ;clear palette + mov dx,3c8h + xor al,al + out dx,al + inc dx + mov cx,768 +@@1: out dx,al + loop @@1 + mov dx,3d4h + ;400 rows + ;mov ax,00009h + ;out dx,ax + ;tweak + mov ax,00014h + out dx,ax + mov ax,0e317h + out dx,ax + mov dx,3c4h + mov ax,0604h + out dx,ax + ; + mov dx,3c4h + mov ax,0f02h + out dx,ax + mov ax,0a000h + mov es,ax + xor di,di + mov cx,32768 + xor ax,ax + rep stosw + ; + pop ds + pop di + pop si + pop bp + ret +_inittwk ENDP + +PUBLIC _setpalarea +_setpalarea PROC FAR + push bp + mov bp,sp + push si + push di + push ds + lds si,[bp+6] + mov ax,[bp+10] + mov dx,3c8h + out dx,al + mov cx,[bp+12] + mov ax,cx + shl cx,1 + add cx,ax + inc dx + rep outsb + sti + pop ds + pop di + pop si + pop bp + ret +_setpalarea ENDP + +PUBLIC _docol +_docol PROC FAR + push bp + mov bp,sp + push si + push di + push ds + mov es,cs:_vbuf[2] + mov fs,cs:_wave1[2] + mov gs,cs:_wave2[2] + mov ax,not 1 + mov si,[bp+6] + and si,ax + mov di,[bp+8] + and di,ax + mov cx,[bp+10] + and cx,ax + mov dx,[bp+12] + and dx,ax + mov bp,[bp+14] + mov ax,cs:_cameralevel + call theloop + pop ds + pop di + pop si + pop bp + ret +_docol ENDP + +PUBLIC _docopy +_docopy PROC FAR + push bp + mov bp,sp + push si + push di + push ds + mov es,[bp+6] + +IFDEF PXLSUX + mov ax,cs + mov ds,ax + mov si,OFFSET _combguse + mov di,0 + mov cx,60 + ; +@@7: mov dx,3c4h + mov ax,0302h + out dx,ax + zzz=0 + REPT 20 + mov eax,ds:[si+zzz] + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + mov dx,3c4h + mov ax,0C02h + out dx,ax + zzz=0 + REPT 20 + mov eax,ds:[si+zzz+80] + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + add si,160 + add di,80 + dec cx + jnz @@7 +ENDIF + mov dx,3c4h + mov ax,0f02h + out dx,ax + mov es,[bp+6] + mov ds,cs:_vbuf[2] + mov si,60*160 + mov di,52*80 + mov cx,18*80/4 + xor eax,eax + rep stosd + mov cx,140 + mov bl,255 + mov bh,bl + mov ax,bx + shl ebx,16 + mov bx,ax + ; +@@1: mov dx,3c4h + mov ax,0302h + out dx,ax + zzz=0 + REPT 20 + mov eax,ds:[si+zzz] + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + mov dx,3c4h + mov ax,0C02h + out dx,ax + zzz=0 + REPT 20 + mov eax,ds:[si+zzz+80] + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + add si,160 + add di,80 + dec cx + jnz @@1 + +; mov ax,cs +; mov ds,ax +; mov si,OFFSET _combguse+60*160 + xor eax,eax + mov es,cs:_vbuf[2] + mov di,68*160 + mov cx,30*160/4/4 +@@cl1: mov es:[di],eax + add di,4 + mov es:[di],eax + add di,4 + mov es:[di],eax + add di,4 + mov es:[di],eax + add di,4 + dec cx + jnz @@cl1 + + pop ds + pop di + pop si + pop bp + ret +_docopy ENDP + +code ENDS +END \ No newline at end of file diff --git a/COMAN/ASM.OBJ b/COMAN/ASM.OBJ new file mode 100644 index 0000000..4b597d5 Binary files /dev/null and b/COMAN/ASM.OBJ differ diff --git a/COMAN/ASM1.ASM b/COMAN/ASM1.ASM new file mode 100644 index 0000000..5ca619c --- /dev/null +++ b/COMAN/ASM1.ASM @@ -0,0 +1,207 @@ +EXTRN theloop:far + +code SEGMENT para public 'CODE' +ASSUME cs:code +.386 +LOCALS + +PUBLIC _wave1,_wave2,_vbuf,_cameralevel +_wave1 dw 0,0 +_wave2 dw 0,0 +_vbuf dw 0,0 +_cameralevel dw 0 + +PUBLIC _sin1024 +include sin1024.inc + +PUBLIC _setborder +_setborder PROC FAR + push bp + mov bp,sp + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,11h+32 + out dx,al + mov al,[bp+6] + out dx,al + pop bp + ret +_setborder ENDP + +PUBLIC _inittwk +_inittwk PROC FAR + push bp + mov bp,sp + push si + push di + push ds + ;clear palette + mov dx,3c8h + xor al,al + out dx,al + inc dx + mov cx,768 +@@1: out dx,al + loop @@1 + mov dx,3d4h + ;400 rows + ;mov ax,00009h + ;out dx,ax + ;tweak + mov ax,00014h + out dx,ax + mov ax,0e317h + out dx,ax + mov dx,3c4h + mov ax,0604h + out dx,ax + ; + mov dx,3c4h + mov ax,0f02h + out dx,ax + mov ax,0a000h + mov es,ax + xor di,di + mov cx,32768 + xor ax,ax + rep stosw + ; + pop ds + pop di + pop si + pop bp + ret +_inittwk ENDP + +PUBLIC _setpalarea +_setpalarea PROC FAR + push bp + mov bp,sp + push si + push di + push ds + lds si,[bp+6] + mov ax,[bp+10] + mov dx,3c8h + out dx,al + mov cx,[bp+12] + mov ax,cx + shl cx,1 + add cx,ax + inc dx + rep outsb + sti + pop ds + pop di + pop si + pop bp + ret +_setpalarea ENDP + +PUBLIC _docol +_docol PROC FAR + push bp + mov bp,sp + push si + push di + push ds + mov es,cs:_vbuf[2] + mov fs,cs:_wave1[2] + mov gs,cs:_wave2[2] + mov si,[bp+6] + mov di,[bp+8] + mov cx,[bp+10] + add cx,cx + mov dx,[bp+12] + add dx,dx + mov bp,[bp+14] + mov ax,cs:_cameralevel + int 3 + call theloop + pop ds + pop di + pop si + pop bp + ret +_docol ENDP + +PUBLIC _docopy +_docopy PROC FAR + push bp + mov bp,sp + push si + push di + push ds + mov es,[bp+6] + mov ds,cs:_vbuf[2] + mov si,50*160 + mov di,50*80 + mov cx,150 + mov bl,255 + mov bh,bl + mov ax,bx + shl ebx,16 + mov bx,ax +@@1: cmp cx,100 + jge @@2 + mov dx,3c4h + mov ax,0302h + out dx,ax + zzz=0 + REPT 20 + mov eax,ds:[si+zzz] + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + mov dx,3c4h + mov ax,0C02h + out dx,ax + zzz=0 + REPT 20 + mov eax,ds:[si+zzz+80] + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + add si,160 + add di,80 + dec cx + jnz @@1 + pop ds + pop di + pop si + pop bp + ret +@@2: ;this loop also clears + mov dx,3c4h + mov ax,0302h + out dx,ax + zzz=0 + REPT 20 + mov eax,ds:[si+zzz] + mov ds:[si+zzz],ebx + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + mov dx,3c4h + mov ax,0C02h + out dx,ax + zzz=0 + REPT 20 + mov eax,ds:[si+zzz+80] + mov ds:[si+zzz+80],ebx + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + sub ebx,01010101h + cmp bl,192 + jge @@3 + mov ebx,0c0c0c0c0h +@@3: add si,160 + add di,80 + dec cx + jmp @@1 +_docopy ENDP + +code ENDS +END \ No newline at end of file diff --git a/COMAN/C.EXE b/COMAN/C.EXE new file mode 100644 index 0000000..8e855cd Binary files /dev/null and b/COMAN/C.EXE differ diff --git a/COMAN/COMBG.LBM b/COMAN/COMBG.LBM new file mode 100644 index 0000000..69c867a Binary files /dev/null and b/COMAN/COMBG.LBM differ diff --git a/COMAN/COMBG.UH b/COMAN/COMBG.UH new file mode 100644 index 0000000..c564d9d Binary files /dev/null and b/COMAN/COMBG.UH differ diff --git a/COMAN/COMBG.X b/COMAN/COMBG.X new file mode 100644 index 0000000..82fc288 Binary files /dev/null and b/COMAN/COMBG.X differ diff --git a/COMAN/DOLOOP.1 b/COMAN/DOLOOP.1 new file mode 100644 index 0000000..07289a0 --- /dev/null +++ b/COMAN/DOLOOP.1 @@ -0,0 +1,129 @@ +#include +#include +#include + +int depth=2; +int bail=150; +int group=3; + +FILE *f1; + +void P(char *str,...) +{ + char out[256]; + va_list argp; + va_start(argp,str); + vsprintf(out,str,argp); + fprintf(f1,"%s\n",out); + va_end(argp); +} + +long weirdflip(unsigned long l) +{ + long m,lo,hi; + lo=l&0xffff; + hi=l>>16; + m=(lo<<16)+hi; + return(m); +} + +main() +{ + int i,j,jm,y,a; + long l; + f1=fopen("theloop.inc","wt"); + + P(";Register usage: "); + P(";eax low... ray heigth "); + P(";ebx - p->screen "); + P(";ecx low... ray direction (always negative)"); + P(";edx - scenary heigth "); + P(";esi - xsin "); + P(";edi - ysin "); + P(";ebp - p->ray_dir_table"); + P(";ds ->codesegment"); + P(";es ->screenbuffer"); + P(";fs ->wavetable"); + P(";gs -"); + P(""); + P("ALIGN 16 ;following should stay in cache"); + P("theloop_waveseg dw 0"); + P("theloop_xsina dw 0"); + P("theloop_ysina dw 0"); + P("theloop_heigth dw 0"); + P("theloop_raydir LABEL DWORD"); + for(y=0;y<200;y++) + { + a=(199-y)-100; + l=-(long)a*10L*256L*depth; + l=weirdflip(l); + P("dd 0%08lXh",l); + } + P(""); + P(";entry: es=videbuf"); + P("; bp=pointer to bottom of current column in videbuf"); + P("; fs=waveXsegment"); + P("; gs=waveYsegment"); + P("; si=waveXpos"); + P("; di=waveYpos"); + P("; cx=waveXadd"); + P("; dx=waveYadd"); + P("; ax=camera heigth adder"); + P("theloop PROC FAR"); + P("mov bx,bp"); + P("mov cs:theloop_xsina,cx"); + P("mov cs:theloop_ysina,dx"); + P("mov cs:theloop_heigth,ax"); + P("mov bp,OFFSET theloop_raydir"); + P("mov ax,cs"); + P("mov ds,ax"); + P("xor eax,eax"); + P("mov ecx,ds:[bp]"); + P("add bp,4"); + for(i=0;ibail) jm=bail; + for(j=i;j=bail) + { + P("_@seek%i:",bail); + P("_@seekr%i:",bail); + P("ret"); + } + else P("jmp _@seek%i",jm); + for(j=i;j +#include +#include +#include + +int horizony=70; +int bailstart=0; // must be divisible by 2 +int bail=192; +int bailhalve=64; +int group=500; +int zwave[1024]; + +FILE *f1; + +void P(char *str,...) +{ + char out[256]; + va_list argp; + va_start(argp,str); + vsprintf(out,str,argp); + fprintf(f1,"%s\n",out); + va_end(argp); +} + +long wflip(unsigned long l) +{ + long m,lo,hi; + lo=l&0xffff; + hi=l>>16; + m=(lo<<16)+hi; + return(m); +} + +main() +{ + int i,j,jm,y,a; + int sina=1; + long l,firstraydir; + f1=fopen("theloop.inc","wt"); + + for(i=0;iscreen "); + P(";ds ->codesegment"); + P(";es ->screenbuffer"); + P(";fs ->wavetablex"); + P(";gs ->wavetabley"); + P(""); + P("ALIGN 16 ;following should stay in cache"); + P("theloop_waveseg dw 0"); + P("theloop_xsina1 dw 0"); + P("theloop_ysina1 dw 0"); + P("theloop_xsina2 dw 0"); + P("theloop_ysina2 dw 0"); + P("theloop_heigth dw 0"); + firstraydir=-(200-horizony)*2560L; + P(""); + P(";entry: es=videbuf"); + P("; bp=pointer to bottom of current column in videbuf"); + P("; fs=waveXsegment"); + P("; gs=waveYsegment"); + P("; si=waveXpos"); + P("; di=waveYpos"); + P("; cx=waveXadd"); + P("; dx=waveYadd"); + P("; ax=camera heigth adder"); + P("theloop PROC FAR"); + P("mov cs:theloop_xsina1,cx"); + P("mov cs:theloop_ysina1,dx"); + P("add cx,cx"); + P("mov cs:theloop_xsina2,cx"); + P("add dx,dx"); + P("mov cs:theloop_ysina2,dx"); + P("mov cs:theloop_heigth,ax"); + P("mov ax,cs"); + P("mov ds,ax"); + P("xor eax,eax"); + P("mov ecx,0%08lXh",wflip(firstraydir)); + for(i=bailstart;ibail) jm=bail; + for(j=i;j=bail) + { + P("_@seek%i:",bail); + P("_@seekr%i:",bail); + P("ret"); + } + else P("jmp _@seek%i",jm); + } + P("theloop ENDP"); + printf(" \r",i); + + fclose(f1); +} diff --git a/COMAN/DOLOOP.EXE b/COMAN/DOLOOP.EXE new file mode 100644 index 0000000..c3beb1e Binary files /dev/null and b/COMAN/DOLOOP.EXE differ diff --git a/COMAN/DOLOOP.OBJ b/COMAN/DOLOOP.OBJ new file mode 100644 index 0000000..786b8d9 Binary files /dev/null and b/COMAN/DOLOOP.OBJ differ diff --git a/COMAN/DOLOOP.OK b/COMAN/DOLOOP.OK new file mode 100644 index 0000000..0015350 --- /dev/null +++ b/COMAN/DOLOOP.OK @@ -0,0 +1,155 @@ +#include +#include +#include + +int depth=2; +int bail=150; +int group=150; + +FILE *f1; + +void P(char *str,...) +{ + char out[256]; + va_list argp; + va_start(argp,str); + vsprintf(out,str,argp); + fprintf(f1,"%s\n",out); + va_end(argp); +} + +long weirdflip(unsigned long l) +{ + long m,lo,hi; + lo=l&0xffff; + hi=l>>16; + m=(lo<<16)+hi; + return(m); +} + +main() +{ + int i,j,jm,y,a; + long l; + f1=fopen("theloop.inc","wt"); + + P(";Register usage: "); + P(";eax low... ray heigth "); + P(";ebx - p->screen "); + P(";ecx low... ray direction (always negative)"); + P(";edx - scenary heigth "); + P(";esi - xsin "); + P(";edi - ysin "); + P(";ebp - p->ray_dir_table"); + P(";ds ->codesegment"); + P(";es ->screenbuffer"); + P(";fs ->wavetable"); + P(";gs -"); + P(""); + P("ALIGN 16 ;following should stay in cache"); + P("theloop_waveseg dw 0"); + P("theloop_xsina dw 0"); + P("theloop_ysina dw 0"); + P("theloop_heigth dw 0"); + P("theloop_raydir LABEL DWORD"); + for(y=0;y<200;y++) + { + a=(199-y)-100; + l=-(long)a*10L*256L*depth; + l=weirdflip(l); + P("dd 0%08lXh",l); + } + P(""); + P(";entry: es=videbuf"); + P("; bp=pointer to bottom of current column in videbuf"); + P("; fs=waveXsegment"); + P("; gs=waveYsegment"); + P("; si=waveXpos"); + P("; di=waveYpos"); + P("; cx=waveXadd"); + P("; dx=waveYadd"); + P("; ax=camera heigth adder"); + P("theloop PROC FAR"); + P("mov bx,bp"); + P("mov cs:theloop_xsina,cx"); + P("mov cs:theloop_ysina,dx"); + P("mov cs:theloop_heigth,ax"); + P("mov bp,OFFSET theloop_raydir"); + P("mov ax,cs"); + P("mov ds,ax"); + P("xor eax,eax"); + P("mov ecx,ds:[bp]"); + P("add bp,4"); + for(i=0;ibail) jm=bail; + for(j=i;j=bail) + { + P("_@seek%i:",bail); + P("_@seekr%i:",bail); + P("ret"); + } + else P("jmp _@seek%i",jm); + } + P("theloop ENDP"); + printf(" \r",i); + + fclose(f1); +} diff --git a/COMAN/DOLOOP1.C b/COMAN/DOLOOP1.C new file mode 100644 index 0000000..58ec1e9 --- /dev/null +++ b/COMAN/DOLOOP1.C @@ -0,0 +1,185 @@ +#include +#include +#include +#include + +int horizony=70; +int bailstart=0; // must be divisible by 2 +int bail=192; +int bailhalve=64; +int group=150; +int zwave[1024]; + +FILE *f1; + +void P(char *str,...) +{ + char out[256]; + va_list argp; + va_start(argp,str); + vsprintf(out,str,argp); + fprintf(f1,"%s\n",out); + va_end(argp); +} + +long wflip(unsigned long l) +{ + long m,lo,hi; + lo=l&0xffff; + hi=l>>16; + m=(lo<<16)+hi; + return(m); +} + +main() +{ + int i,j,jm,y,a; + int sina=1; + long l,firstraydir; + f1=fopen("theloop.inc","wt"); + + for(i=0;iscreen "); + P(";ecx low... ray direction (always negative)"); + P(";edx - scenary heigth "); + P(";esi - xsin "); + P(";edi - ysin "); + P(";ebp - - "); + P(";ds ->codesegment"); + P(";es ->screenbuffer"); + P(";fs ->wavetablex"); + P(";gs ->wavetabley"); + P(""); + P("ALIGN 16 ;following should stay in cache"); + P("theloop_waveseg dw 0"); + P("theloop_xsina1 dw 0"); + P("theloop_ysina1 dw 0"); + P("theloop_xsina2 dw 0"); + P("theloop_ysina2 dw 0"); + P("theloop_heigth dw 0"); + firstraydir=-(200-horizony)*2560L; + P(""); + P(";entry: es=videbuf"); + P("; bp=pointer to bottom of current column in videbuf"); + P("; fs=waveXsegment"); + P("; gs=waveYsegment"); + P("; si=waveXpos"); + P("; di=waveYpos"); + P("; cx=waveXadd"); + P("; dx=waveYadd"); + P("; ax=camera heigth adder"); + P("theloop PROC FAR"); + P("mov bx,bp"); + P("mov cs:theloop_xsina1,cx"); + P("mov cs:theloop_ysina1,dx"); + P("add cx,cx"); + P("mov cs:theloop_xsina2,cx"); + P("add dx,dx"); + P("mov cs:theloop_ysina2,dx"); + P("mov cs:theloop_heigth,ax"); + //P("mov bp,OFFSET theloop_raydir"); + P("mov ax,cs"); + P("mov ds,ax"); + P("xor eax,eax"); + P("mov ecx,0%08lXh",wflip(firstraydir)); + for(i=0;ibail) jm=bail; + for(j=i;j=bail) + { + P("_@seek%i:",bail); + P("_@seekr%i:",bail); + P("ret"); + } + else P("jmp _@seek%i",jm); + } + P("theloop ENDP"); + printf(" \r",i); + + fclose(f1); +} diff --git a/COMAN/DOLOOP2.C b/COMAN/DOLOOP2.C new file mode 100644 index 0000000..84fc892 --- /dev/null +++ b/COMAN/DOLOOP2.C @@ -0,0 +1,131 @@ +#include +#include +#include +#include + +int horizony=70; +int bail=192; +int bailhalve=64; +int group=150; +int zwave[1024]; + +FILE *f1; + +void P(char *str,...) +{ + char out[256]; + va_list argp; + va_start(argp,str); + vsprintf(out,str,argp); + fprintf(f1,"%s\n",out); + va_end(argp); +} + +long wflip(unsigned long l) +{ + long m,lo,hi; + lo=l&0xffff; + hi=l>>16; + m=(lo<<16)+hi; + return(m); +} + +main() +{ + int i,j,k,jm,y,a; + int sina=1; + long l,firstraydir; + f1=fopen("theloop.inc","wt"); + + for(i=0;iscreen "); + P(";ds ->codesegment"); + P(";es ->screenbuffer"); + P(";fs ->wavetablex"); + P(";gs ->wavetabley"); + P(""); + P("ALIGN 16 ;following should stay in cache"); + P("theloop_waveseg dw 0"); + P("theloop_xsina1 dw 0"); + P("theloop_ysina1 dw 0"); + P("theloop_xsina2 dw 0"); + P("theloop_ysina2 dw 0"); + P("theloop_heigth dw 0"); + firstraydir=-(200-horizony)*2560L; + P(""); + P(";entry: es=videbuf"); + P("; bp=pointer to bottom of current column in videbuf"); + P("; fs=waveXsegment"); + P("; gs=waveYsegment"); + P("; si=waveXpos"); + P("; di=waveYpos"); + P("; cx=waveXadd"); + P("; dx=waveYadd"); + P("; ax=camera heigth adder"); + P("theloop PROC FAR"); + P("mov cs:theloop_xsina1,cx"); + P("mov cs:theloop_ysina1,dx"); + P("add cx,cx"); + P("mov cs:theloop_xsina2,cx"); + P("add dx,dx"); + P("mov cs:theloop_ysina2,dx"); + P("mov cs:theloop_heigth,ax"); + P("mov bx,cs:theloop_xsina1"); + //P("mov bp,OFFSET theloop_raydir"); + P("mov ax,cs"); + P("mov ds,ax"); + P("mov edx,10000h*(%i/3)",-bail); + P("xor eax,eax"); + P("xor ecx,ecx"); + for(i=199;i>=horizony;i--) + { + j=i; + printf("%i \r",j); + + // seek until scene hits row i + P("_@seek%i:",j); + for(k=0;k<3;k++) + { + P("add si,ds:theloop_xsina1"); + P("mov dx,fs:[si]"); + P("add di,ds:theloop_ysina1"); + P("add dx,gs:[di]"); + P("add dx,%i",-100); + l=(i-horizony)*2560L; + P("add ecx,0%08lXh",wflip(2560L)); + P("adc cx,0"); + P("sub eax,0%08lXh",wflip(l)); + P("sbb ax,0"); + P("cmp ax,dx"); + P("jl short _@seek%im",j); + } + P("add edx,00010000h"); + P("jnc _@seek%i",j); + P("ret"); + + // hit, draw pixel & advance rays + P("_@seek%im:",j); + P("mov es:[bp+%i],dl",-(199-j)*160); + P("add eax,ecx"); + P("adc ax,0"); + P("cmp ax,dx"); + P("jl short _@seek%im",j-1); + } + P("_@seek%im:",j-1); + P("ret"); + P("theloop ENDP"); + printf(" \r",i); + + fclose(f1); +} diff --git a/COMAN/DOOBJS.BAT b/COMAN/DOOBJS.BAT new file mode 100644 index 0000000..17d383b --- /dev/null +++ b/COMAN/DOOBJS.BAT @@ -0,0 +1,12 @@ +getslice w1dta.bin 0 32768 w1dta1.bin +getslice w1dta.bin 32768 32768 w1dta2.bin +doobj w1dta1.bin _w1dta _w1dta1.obj +doobj w1dta2.bin _w1dta_ _w1dta2.obj +del w1dta1.bin +del w1dta2.bin +getslice w2dta.bin 0 32768 w2dta1.bin +getslice w2dta.bin 32768 32768 w2dta2.bin +doobj w2dta1.bin _w2dta _w2dta1.obj +doobj w2dta2.bin _w2dta_ _w2dta2.obj +del w2dta1.bin +del w2dta2.bin diff --git a/COMAN/DOPIC.BAT b/COMAN/DOPIC.BAT new file mode 100644 index 0000000..f22b52d --- /dev/null +++ b/COMAN/DOPIC.BAT @@ -0,0 +1,2 @@ +lbm2u combg.lbm combg.uh +doobj combg.uh _combg _combg.obk \ No newline at end of file diff --git a/COMAN/DP.BAT b/COMAN/DP.BAT new file mode 100644 index 0000000..cc59bd6 --- /dev/null +++ b/COMAN/DP.BAT @@ -0,0 +1 @@ +c:\others\dp\del_pain \ No newline at end of file diff --git a/COMAN/DP_PREFS b/COMAN/DP_PREFS new file mode 100644 index 0000000..63d6f4e Binary files /dev/null and b/COMAN/DP_PREFS differ diff --git a/COMAN/KOE.C b/COMAN/KOE.C new file mode 100644 index 0000000..b9c3751 --- /dev/null +++ b/COMAN/KOE.C @@ -0,0 +1,38 @@ +#include +#include + +int table[1024]; + +char *vram=(char *)0xa0000000L; + +main() +{ + int x,y; + double f,g; + _asm mov ax,13h + _asm int 10h + for(x=0;x<1024;x++) + { + f=(double)x*3.1415926535*3.0/1024.0; + f=sin(f); + g=(double)x/700; + if(g>1) g=2-g; + f=f*g*g; + y=(int)(f*400.0); + table[x]=y; + vram[x/4+(y/4+100)*320]=9; + } + getch(); + _asm mov ax,3h + _asm int 10h + for(x=0;x<1024;x++) + { + if(!x) printf("{%i",table[x]); + else printf(",%i",table[x]); + if(!(x&15)) + { + printf(" \\\n"); + } + } + printf("};\n"); +} diff --git a/COMAN/MAIN.C b/COMAN/MAIN.C new file mode 100644 index 0000000..c2b1b29 --- /dev/null +++ b/COMAN/MAIN.C @@ -0,0 +1,228 @@ +#include +#include +#include +#include "..\dis\dis.h" + +#define noCALCW12 + +char combg[16]; + +#ifndef CALCW12 +extern int w1dta[]; +extern int w2dta[]; +#endif + +extern char combg[]; +extern char combguse[]; + +int flip; + +int wavesin[]= +#include "wave.h" + +extern int *wave1; +extern int *wave2; +extern unsigned char *vbuf; +extern int cameralevel; + +char far *vram=(char far *)0xa0000000L; +char far *vram2=(char far *)0xa8000000L; + +extern int sin1024[]; + +char palette[768]; + +char *shiftstatus=(char *)0x0417; +int waitb() +{ + //if(*shiftstatus&16) setborder(0); + while(!(inp(0x3da)&8)); + while((inp(0x3da)&8)); + //if(*shiftstatus&16) setborder(127); + return(1); +} + +void doit(void) +{ + unsigned int u,v,uc; + int startrise=160,frepeat=1; + int a,b,x,y,xa,ya,j,xw,yw,d,r; + int rot2=0,rot=0,rsin,rcos,xwav=0,ywav=0,zwav=0; + int rsin2,rcos2; + int frame=0; + rot=0; rot2=0; + cameralevel=-270; + dis_waitb(); + while(!dis_exit() && dis_musplus()<0); + while(!dis_exit() && frame<4444) + { + a=dis_musplus(); + if(a>-8 && a<0) break; + while(frepeat--) + { + if(a>-30 && a<0) + { + if(startrise<160) startrise+=1; + } + if(frame<400 && startrise>0) + { + if(frame==4) + { + dis_waitb(); + setpalarea(palette,0,256); + } + if(startrise>0) startrise-=1; + } + } + rot2+=4; + rot+=(sin1024[rot2&1023])/15; + r=rot>>3; + rsin=sin1024[r&1023]; + rcos=sin1024[(r+256)&1023]; + rsin2=sin1024[(r+177)&1023]; + rcos2=sin1024[(r+177+256)&1023]; + xw=xwav; yw=ywav; + for(a=0;a<160;a++) + { + x=(a-80); + y=160; + xa=(int)(((long)x*(long)rcos+(long)y*(long)rsin)/256L); + ya=(int)(((long)y*(long)rcos2-(long)x*(long)rsin2)/256L); + b=(a&1)*80+(a>>1)+199*160; + docol(xw,yw,xa,ya,b); + if(a==80) + { + xwav+=xa*4; + ywav+=ya*4; + } + } + flip++; if(flip>1) flip=0; + switch(flip) + { + case 0 : + outp(0x3d4,0x0c); + outp(0x3d5,0x80); + frame+=(frepeat=dis_waitb()); + docopy(0xa000+5*startrise); + break; + case 1 : + outp(0x3d4,0x0c); + outp(0x3d5,0x00); + frame+=(frepeat=dis_waitb()); + docopy(0xa800+5*startrise); + break; + } + } +} + +main() +{ + unsigned int u,v,uc; + int a,b,x,y,xa,ya,j,k,xw,yw; + int rot=0,rsin,rcos,xwav=0,ywav=0; + dis_partstart(); + _asm mov ax,13h + _asm int 10h + + for(a=0;a<256;a++) + { + uc=(223-a*22/26)*3; + b=(230-a)/4; + b+=sin1024[a*4&1023]/32; + if(b<0) b=0; + if(b>63) b=63; + palette[uc+1]=b; + b=(255-a)/3; + if(b>63) b=63; + palette[uc+2]=b; + b=a-220; if(b<0) b=-b; + if(b>40) b=40; + b=40-b; + palette[uc+0]=b/3; + //if(!dis_indemo()) vram[a+640]=a; + } + for(a=0;a<768-16*3;a++) + { + b=palette[a]; + b=b*9/6; if(b>63) b=63; + palette[a]=b; + } + for(a=0;a<24;a++) + { + uc=(255-a)*3; + b=a-4; if(b<0) b=0; + palette[uc+0]=b/2; + palette[uc+1]=0; + palette[uc+2]=0; + } + palette[0]=0; + palette[1]=0; + palette[2]=0; + for(x=(256-16)*3;x<768;x++) + { + palette[x]=combg[16+x]; + } + vbuf=halloc(16384,4); + for(y=0;y<90;y++) + { + for(x=0;x<80;x++) + { + combguse[x+y*160]=combg[x*4+y*320+768+16]; + } + for(x=0;x<80;x++) + { + combguse[x+80+y*160]=combg[x*4+y*320+2+768+16]; + } + } + dis_waitb(); + setpalarea(palette,0,256); + #ifdef CALCW12 + wave1=halloc(16384,4); + wave2=halloc(16384,4); + for(b=u=v=0;b<128;b++) + { + for(a=0;a<256;a++) + { + k=((long)u*1024L*7L)>>15; + j=wavesin[k&1023]/8; + k=((long)u*1024L*3L)>>15; + j+=wavesin[k&1023]/7+((rand()&7)*a/256); + wave1[u]=j*5/9; + k=((long)u*1024L*5L)>>15; + j=wavesin[k&1023]/5; + k=((long)u*1024L*2L)>>15; + j+=wavesin[k&1023]/6; + wave2[u]=j*7/9; + u++; + } + if(!dis_indemo()) vram[b*2]=127; + } + { + FILE *f1; + f1=fopen("w1dta.bin","wb"); + fwrite(wave1,2,16384,f1); + fwrite(wave1+16384,2,16384,f1); + fclose(f1); + f1=fopen("w2dta.bin","wb"); + fwrite(wave2,2,16384,f1); + fwrite(wave2+16384,2,16384,f1); + fclose(f1); + } + #else + wave1=w1dta; + wave2=w2dta; + #endif + inittwk(); + memset(vram,0,64000); + dis_waitb(); + setpalarea(palette,0,256); + + doit(); + + if(!dis_indemo()) + { + _asm mov ax,3h + _asm int 10h + } +} + diff --git a/COMAN/MAIN.OBJ b/COMAN/MAIN.OBJ new file mode 100644 index 0000000..d63016c Binary files /dev/null and b/COMAN/MAIN.OBJ differ diff --git a/COMAN/MAIN1.C b/COMAN/MAIN1.C new file mode 100644 index 0000000..3c81297 --- /dev/null +++ b/COMAN/MAIN1.C @@ -0,0 +1,161 @@ +#include +#include +#include +#include "..\dis\dis.h" + +int flip; + +int wavesin[]= +#include "wave.h" + +extern unsigned char *wave1; +extern unsigned char *wave2; +extern unsigned char *vbuf; +extern int cameralevel; + +char far *vram=(char far *)0xa0000000L; +char far *vram2=(char far *)0xa8000000L; + +extern int sin1024[]; + +char palette[768]; + +char *shiftstatus=(char *)0x0417; +int waitb() +{ + if(*shiftstatus&16) setborder(0); + while(!(inp(0x3da)&8)); + while((inp(0x3da)&8)); + if(*shiftstatus&16) setborder(127); + return(1); +} + +void doit(void) +{ + unsigned int u,v,uc; + int startrise=160; + int a,b,x,y,xa,ya,j,xw,yw,d; + int rot2=0,rot=0,rsin,rcos,xwav=0,ywav=0,zwav=0; + int rsin2,rcos2; + int frame=0; + rot=200; rot2=0; + cameralevel=-270; + while(!kbhit() && frame<444) + { + if(frame<50) + { + if(frame==4) + { + setpalarea(palette,0,256); + } + if(startrise>0) startrise-=4; + } + rsin=sin1024[rot&1023]; + rcos=sin1024[(rot+256)&1023]; + rsin2=sin1024[(rot+177)&1023]; + rcos2=sin1024[(rot+177+256)&1023]; + zwav+=1; + rot2+=2; + rot+=3*(sin1024[rot2&1023]+64)/256; + xw=xwav; yw=ywav; + for(a=0;a<160;a++) + { + x=(a-80); + y=160; + xa=(int)(((long)x*(long)rcos+(long)y*(long)rsin)/256L); + ya=(int)(((long)y*(long)rcos2-(long)x*(long)rsin2)/256L); + b=(a&1)*80+(a>>1)+199*160; + docol(xw,yw,xa,ya,b); + if(a==80) + { + xwav+=xa*4+ya/2; + ywav+=ya*4; + } + } + flip++; if(flip>1) flip=0; + switch(flip) + { + case 0 : + outp(0x3d4,0x0c); + outp(0x3d5,0x80); + frame+=waitb(); + docopy(0xa000+5*startrise); + break; + case 1 : + outp(0x3d4,0x0c); + outp(0x3d5,0x00); + frame+=waitb(); + docopy(0xa800+5*startrise); + break; + } + } +} + +main() +{ + unsigned int u,v,uc; + int a,b,x,y,xa,ya,j,k,xw,yw; + int rot=0,rsin,rcos,xwav=0,ywav=0; + dis_partstart(); + _asm mov ax,13h + _asm int 10h + if(!dis_indemo()) printf("\nShaded 3D sinusfield < Lanscape?\n"); + for(a=0;a<256;a++) + { + uc=(223-a*22/26)*3; + b=(230-a)/4; + if(b<0) b=0; + if(b>63) b=63; + palette[uc+1]=b; + b=(255-a)/4; + if(b>63) b=63; + palette[uc+2]=b; + palette[uc+0]=0; + vram[a+640]=a; + } + for(a=0;a<32;a++) + { + uc=(255-a)*3; + palette[uc+0]=a; + palette[uc+1]=0; + palette[uc+2]=0; + } + palette[0]=0; + palette[1]=0; + palette[2]=0; + wave1=halloc(16384,4); + wave2=halloc(16384,4); + vbuf=halloc(16384,4); + setpalarea(palette,0,256); + for(b=u=v=0;b<256;b++) + { + for(a=0;a<256;a++) + { + k=((long)u*1024L*7L)/65536L; + j=wavesin[k&1023]/8; + k=((long)u*1024L*3L)/65536L; + j+=wavesin[k&1023]/7; + wave1[u]=(j/3)+120/2; + k=((long)u*1024L*5L)/65536L; + j=wavesin[k&1023]/6; + k=((long)u*1024L*2L)/65536L; + j+=wavesin[k&1023]/5; + wave2[u]=(j/3)+120/2; + u++; + } + if(!dis_indemo()) vram[b]=127; + } + inittwk(); + memset(vram,0,64000); + setpalarea(palette,0,256); + + doit(); + if(kbhit()) getch(); + + if(!dis_indemo()) + { + _asm mov ax,3h + _asm int 10h + } +} + diff --git a/COMAN/MAKEFILE b/COMAN/MAKEFILE new file mode 100644 index 0000000..05275c5 --- /dev/null +++ b/COMAN/MAKEFILE @@ -0,0 +1,24 @@ +all : doloop.exe c.exe + +objs=main.obj asm.obj theloop.obj ..\dis\disc.obj +dobjs=_w1dta1.obj _w1dta2.obj _w2dta1.obj _w2dta2.obj + +asm_f = /ML /m2 /s /JJUMPS +#c_f = /AL /c /W1 /qc +c_f = /AL /c /W1 /Oxaz + +.asm.obj : + tasm $(asm_f) $< + +.c.obj : + cl $(c_f) $< + +c.exe : $(objs) + link /E $(objs)+$(dobjs),c.exe,nul; + copy c.exe ..\main\data\3dsinfld.exe + +doloop.exe : doloop.c + mkc doloop + doloop + +theloop.asm : theloop.inc diff --git a/COMAN/SIN1024.INC b/COMAN/SIN1024.INC new file mode 100644 index 0000000..6614fbe --- /dev/null +++ b/COMAN/SIN1024.INC @@ -0,0 +1,33 @@ +_sin1024 LABEL WORD +dw 0,1,3,4,6,7,9,10,12,14,15,17,18,20,21,23,25,26,28,29,31,32,34,36,37,39,40,42,43,45,46,48 +dw 49,51,53,54,56,57,59,60,62,63,65,66,68,69,71,72,74,75,77,78,80,81,83,84,86,87,89,90,92,93,95,96 +dw 97,99,100,102,103,105,106,108,109,110,112,113,115,116,117,119,120,122,123,124,126,127,128,130,131,132,134,135,136,138,139,140 +dw 142,143,144,146,147,148,149,151,152,153,155,156,157,158,159,161,162,163,164,166,167,168,169,170,171,173,174,175,176,177,178,179 +dw 181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,211 +dw 212,213,214,215,216,217,217,218,219,220,221,221,222,223,224,225,225,226,227,227,228,229,230,230,231,232,232,233,234,234,235,235 +dw 236,237,237,238,238,239,239,240,241,241,242,242,243,243,244,244,244,245,245,246,246,247,247,247,248,248,249,249,249,250,250,250 +dw 251,251,251,251,252,252,252,252,253,253,253,253,254,254,254,254,254,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255 +dw 256,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,254,254,254,254,253,253,253,253,252,252,252,252,251,251,251 +dw 251,250,250,250,249,249,249,248,248,247,247,247,246,246,245,245,244,244,244,243,243,242,242,241,241,240,239,239,238,238,237,237 +dw 236,235,235,234,234,233,232,232,231,230,230,229,228,227,227,226,225,225,224,223,222,221,221,220,219,218,217,217,216,215,214,213 +dw 212,211,211,210,209,208,207,206,205,204,203,202,201,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182 +dw 181,179,178,177,176,175,174,173,171,170,169,168,167,166,164,163,162,161,159,158,157,156,155,153,152,151,149,148,147,146,144,143 +dw 142,140,139,138,136,135,134,132,131,130,128,127,126,124,123,122,120,119,117,116,115,113,112,110,109,108,106,105,103,102,100,99 +dw 97,96,95,93,92,90,89,87,86,84,83,81,80,78,77,75,74,72,71,69,68,66,65,63,62,60,59,57,56,54,53,51 +dw 49,48,46,45,43,42,40,39,37,36,34,32,31,29,28,26,25,23,21,20,18,17,15,14,12,10,9,7,6,4,3,1 +dw 0,-1,-3,-4,-6,-7,-9,-10,-12,-14,-15,-17,-18,-20,-21,-23,-25,-26,-28,-29,-31,-32,-34,-36,-37,-39,-40,-42,-43,-45,-46,-48 +dw -49,-51,-53,-54,-56,-57,-59,-60,-62,-63,-65,-66,-68,-69,-71,-72,-74,-75,-77,-78,-80,-81,-83,-84,-86,-87,-89,-90,-92,-93,-95,-96 +dw -97,-99,-100,-102,-103,-105,-106,-108,-109,-110,-112,-113,-115,-116,-117,-119,-120,-122,-123,-124,-126,-127,-128,-130,-131,-132,-134,-135,-136,-138,-139,-140 +dw -142,-143,-144,-146,-147,-148,-149,-151,-152,-153,-155,-156,-157,-158,-159,-161,-162,-163,-164,-166,-167,-168,-169,-170,-171,-173,-174,-175,-176,-177,-178,-179 +dw -181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,-192,-193,-194,-195,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-211 +dw -212,-213,-214,-215,-216,-217,-217,-218,-219,-220,-221,-221,-222,-223,-224,-225,-225,-226,-227,-227,-228,-229,-230,-230,-231,-232,-232,-233,-234,-234,-235,-235 +dw -236,-237,-237,-238,-238,-239,-239,-240,-241,-241,-242,-242,-243,-243,-244,-244,-244,-245,-245,-246,-246,-247,-247,-247,-248,-248,-249,-249,-249,-250,-250,-250 +dw -251,-251,-251,-251,-252,-252,-252,-252,-253,-253,-253,-253,-254,-254,-254,-254,-254,-254,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255 +dw -256,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-254,-254,-254,-254,-254,-254,-253,-253,-253,-253,-252,-252,-252,-252,-251,-251,-251 +dw -251,-250,-250,-250,-249,-249,-249,-248,-248,-247,-247,-247,-246,-246,-245,-245,-244,-244,-244,-243,-243,-242,-242,-241,-241,-240,-239,-239,-238,-238,-237,-237 +dw -236,-235,-235,-234,-234,-233,-232,-232,-231,-230,-230,-229,-228,-227,-227,-226,-225,-225,-224,-223,-222,-221,-221,-220,-219,-218,-217,-217,-216,-215,-214,-213 +dw -212,-211,-211,-210,-209,-208,-207,-206,-205,-204,-203,-202,-201,-200,-199,-198,-197,-196,-195,-194,-193,-192,-191,-190,-189,-188,-187,-186,-185,-184,-183,-182 +dw -181,-179,-178,-177,-176,-175,-174,-173,-171,-170,-169,-168,-167,-166,-164,-163,-162,-161,-159,-158,-157,-156,-155,-153,-152,-151,-149,-148,-147,-146,-144,-143 +dw -142,-140,-139,-138,-136,-135,-134,-132,-131,-130,-128,-127,-126,-124,-123,-122,-120,-119,-117,-116,-115,-113,-112,-110,-109,-108,-106,-105,-103,-102,-100,-99 +dw -97,-96,-95,-93,-92,-90,-89,-87,-86,-84,-83,-81,-80,-78,-77,-75,-74,-72,-71,-69,-68,-66,-65,-63,-62,-60,-59,-57,-56,-54,-53,-51 +dw -49,-48,-46,-45,-43,-42,-40,-39,-37,-36,-34,-32,-31,-29,-28,-26,-25,-23,-21,-20,-18,-17,-15,-14,-12,-10,-9,-7,-6,-4,-3,-1 diff --git a/COMAN/THELOOP.ASM b/COMAN/THELOOP.ASM new file mode 100644 index 0000000..e2b38ce --- /dev/null +++ b/COMAN/THELOOP.ASM @@ -0,0 +1,11 @@ +thecode SEGMENT para public 'CODE' +ASSUME cs:thecode +.386 +LOCALS +NOJUMPS + +PUBLIC theloop +include theloop.inc + +thecode ENDS +END diff --git a/COMAN/THELOOP.INC b/COMAN/THELOOP.INC new file mode 100644 index 0000000..1e0e5ec --- /dev/null +++ b/COMAN/THELOOP.INC @@ -0,0 +1,5230 @@ +;Register usage: +;eax low... ray heigth +;ebx - scenary heigth +;ecx low... ray direction (always negative) +;edx - tmp +;esi - xsin +;edi - ysin +;ebp - p->screen +;ds ->codesegment +;es ->screenbuffer +;fs ->wavetablex +;gs ->wavetabley + +ALIGN 16 ;following should stay in cache +theloop_waveseg dw 0 +theloop_xsina1 dw 0 +theloop_ysina1 dw 0 +theloop_xsina2 dw 0 +theloop_ysina2 dw 0 +theloop_heigth dw 0 + +;entry: es=videbuf +; bp=pointer to bottom of current column in videbuf +; fs=waveXsegment +; gs=waveYsegment +; si=waveXpos +; di=waveYpos +; cx=waveXadd +; dx=waveYadd +; ax=camera heigth adder +theloop PROC FAR +mov cs:theloop_xsina1,cx +mov cs:theloop_ysina1,dx +add cx,cx +mov cs:theloop_xsina2,cx +add dx,dx +mov cs:theloop_ysina2,dx +mov cs:theloop_heigth,ax +mov ax,cs +mov ds,ax +xor eax,eax +mov ecx,0EC00FFFAh +_@seek0: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-240 +cmp ax,bx +jge short _@seeko0 +lea dx,[bx+140] +shr dl,1 +_@hit0: +add eax,000000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a0 +add eax,000000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a0 +add eax,000000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko0 +jmp _@hit0 +_@seek2a0: +sub bp,160 +add ecx,00A000000h +_@seek1a0: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko0: +add eax,ecx +adc ax,-1 +_@seek1: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-239 +cmp ax,bx +jge short _@seeko1 +lea dx,[bx+140] +shr dl,1 +_@hit1: +add eax,00A000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a1 +add eax,00A000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a1 +add eax,00A000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko1 +jmp _@hit1 +_@seek2a1: +sub bp,160 +add ecx,00A000000h +_@seek1a1: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko1: +add eax,ecx +adc ax,-1 +_@seek2: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-237 +cmp ax,bx +jge short _@seeko2 +lea dx,[bx+140] +shr dl,1 +_@hit2: +add eax,014000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a2 +add eax,014000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a2 +add eax,014000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko2 +jmp _@hit2 +_@seek2a2: +sub bp,160 +add ecx,00A000000h +_@seek1a2: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko2: +add eax,ecx +adc ax,-1 +_@seek3: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-236 +cmp ax,bx +jge short _@seeko3 +lea dx,[bx+140] +shr dl,1 +_@hit3: +add eax,01E000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a3 +add eax,01E000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a3 +add eax,01E000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko3 +jmp _@hit3 +_@seek2a3: +sub bp,160 +add ecx,00A000000h +_@seek1a3: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko3: +add eax,ecx +adc ax,-1 +_@seek4: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-234 +cmp ax,bx +jge short _@seeko4 +lea dx,[bx+140] +shr dl,1 +_@hit4: +add eax,028000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a4 +add eax,028000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a4 +add eax,028000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko4 +jmp _@hit4 +_@seek2a4: +sub bp,160 +add ecx,00A000000h +_@seek1a4: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko4: +add eax,ecx +adc ax,-1 +_@seek5: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-233 +cmp ax,bx +jge short _@seeko5 +lea dx,[bx+140] +shr dl,1 +_@hit5: +add eax,032000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a5 +add eax,032000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a5 +add eax,032000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko5 +jmp _@hit5 +_@seek2a5: +sub bp,160 +add ecx,00A000000h +_@seek1a5: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko5: +add eax,ecx +adc ax,-1 +_@seek6: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-232 +cmp ax,bx +jge short _@seeko6 +lea dx,[bx+140] +shr dl,1 +_@hit6: +add eax,03C000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a6 +add eax,03C000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a6 +add eax,03C000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko6 +jmp _@hit6 +_@seek2a6: +sub bp,160 +add ecx,00A000000h +_@seek1a6: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko6: +add eax,ecx +adc ax,-1 +_@seek7: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-230 +cmp ax,bx +jge short _@seeko7 +lea dx,[bx+140] +shr dl,1 +_@hit7: +add eax,046000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a7 +add eax,046000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a7 +add eax,046000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko7 +jmp _@hit7 +_@seek2a7: +sub bp,160 +add ecx,00A000000h +_@seek1a7: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko7: +add eax,ecx +adc ax,-1 +_@seek8: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-229 +cmp ax,bx +jge short _@seeko8 +lea dx,[bx+139] +shr dl,1 +_@hit8: +add eax,050000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a8 +add eax,050000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a8 +add eax,050000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko8 +jmp _@hit8 +_@seek2a8: +sub bp,160 +add ecx,00A000000h +_@seek1a8: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko8: +add eax,ecx +adc ax,-1 +_@seek9: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-228 +cmp ax,bx +jge short _@seeko9 +lea dx,[bx+139] +shr dl,1 +_@hit9: +add eax,05A000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a9 +add eax,05A000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a9 +add eax,05A000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko9 +jmp _@hit9 +_@seek2a9: +sub bp,160 +add ecx,00A000000h +_@seek1a9: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko9: +add eax,ecx +adc ax,-1 +_@seek10: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-227 +cmp ax,bx +jge short _@seeko10 +lea dx,[bx+139] +shr dl,1 +_@hit10: +add eax,064000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a10 +add eax,064000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a10 +add eax,064000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko10 +jmp _@hit10 +_@seek2a10: +sub bp,160 +add ecx,00A000000h +_@seek1a10: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko10: +add eax,ecx +adc ax,-1 +_@seek11: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-226 +cmp ax,bx +jge short _@seeko11 +lea dx,[bx+139] +shr dl,1 +_@hit11: +add eax,06E000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a11 +add eax,06E000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a11 +add eax,06E000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko11 +jmp _@hit11 +_@seek2a11: +sub bp,160 +add ecx,00A000000h +_@seek1a11: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko11: +add eax,ecx +adc ax,-1 +_@seek12: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-226 +cmp ax,bx +jge short _@seeko12 +lea dx,[bx+139] +shr dl,1 +_@hit12: +add eax,078000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a12 +add eax,078000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a12 +add eax,078000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko12 +jmp _@hit12 +_@seek2a12: +sub bp,160 +add ecx,00A000000h +_@seek1a12: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko12: +add eax,ecx +adc ax,-1 +_@seek13: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-225 +cmp ax,bx +jge short _@seeko13 +lea dx,[bx+139] +shr dl,1 +_@hit13: +add eax,082000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a13 +add eax,082000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a13 +add eax,082000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko13 +jmp _@hit13 +_@seek2a13: +sub bp,160 +add ecx,00A000000h +_@seek1a13: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko13: +add eax,ecx +adc ax,-1 +_@seek14: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-225 +cmp ax,bx +jge short _@seeko14 +lea dx,[bx+139] +shr dl,1 +_@hit14: +add eax,08C000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a14 +add eax,08C000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a14 +add eax,08C000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko14 +jmp _@hit14 +_@seek2a14: +sub bp,160 +add ecx,00A000000h +_@seek1a14: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko14: +add eax,ecx +adc ax,-1 +_@seek15: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-225 +cmp ax,bx +jge short _@seeko15 +lea dx,[bx+139] +shr dl,1 +_@hit15: +add eax,096000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a15 +add eax,096000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a15 +add eax,096000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko15 +jmp _@hit15 +_@seek2a15: +sub bp,160 +add ecx,00A000000h +_@seek1a15: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko15: +add eax,ecx +adc ax,-1 +_@seek16: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-224 +cmp ax,bx +jge short _@seeko16 +lea dx,[bx+138] +shr dl,1 +_@hit16: +add eax,0A0000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a16 +add eax,0A0000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a16 +add eax,0A0000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko16 +jmp _@hit16 +_@seek2a16: +sub bp,160 +add ecx,00A000000h +_@seek1a16: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko16: +add eax,ecx +adc ax,-1 +_@seek17: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-225 +cmp ax,bx +jge short _@seeko17 +lea dx,[bx+138] +shr dl,1 +_@hit17: +add eax,0AA000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a17 +add eax,0AA000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a17 +add eax,0AA000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko17 +jmp _@hit17 +_@seek2a17: +sub bp,160 +add ecx,00A000000h +_@seek1a17: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko17: +add eax,ecx +adc ax,-1 +_@seek18: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-225 +cmp ax,bx +jge short _@seeko18 +lea dx,[bx+138] +shr dl,1 +_@hit18: +add eax,0B4000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a18 +add eax,0B4000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a18 +add eax,0B4000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko18 +jmp _@hit18 +_@seek2a18: +sub bp,160 +add ecx,00A000000h +_@seek1a18: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko18: +add eax,ecx +adc ax,-1 +_@seek19: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-225 +cmp ax,bx +jge short _@seeko19 +lea dx,[bx+138] +shr dl,1 +_@hit19: +add eax,0BE000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a19 +add eax,0BE000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a19 +add eax,0BE000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko19 +jmp _@hit19 +_@seek2a19: +sub bp,160 +add ecx,00A000000h +_@seek1a19: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko19: +add eax,ecx +adc ax,-1 +_@seek20: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-226 +cmp ax,bx +jge short _@seeko20 +lea dx,[bx+138] +shr dl,1 +_@hit20: +add eax,0C8000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a20 +add eax,0C8000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a20 +add eax,0C8000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko20 +jmp _@hit20 +_@seek2a20: +sub bp,160 +add ecx,00A000000h +_@seek1a20: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko20: +add eax,ecx +adc ax,-1 +_@seek21: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-226 +cmp ax,bx +jge short _@seeko21 +lea dx,[bx+138] +shr dl,1 +_@hit21: +add eax,0D2000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a21 +add eax,0D2000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a21 +add eax,0D2000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko21 +jmp _@hit21 +_@seek2a21: +sub bp,160 +add ecx,00A000000h +_@seek1a21: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko21: +add eax,ecx +adc ax,-1 +_@seek22: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-227 +cmp ax,bx +jge short _@seeko22 +lea dx,[bx+138] +shr dl,1 +_@hit22: +add eax,0DC000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a22 +add eax,0DC000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a22 +add eax,0DC000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko22 +jmp _@hit22 +_@seek2a22: +sub bp,160 +add ecx,00A000000h +_@seek1a22: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko22: +add eax,ecx +adc ax,-1 +_@seek23: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-228 +cmp ax,bx +jge short _@seeko23 +lea dx,[bx+138] +shr dl,1 +_@hit23: +add eax,0E6000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a23 +add eax,0E6000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a23 +add eax,0E6000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko23 +jmp _@hit23 +_@seek2a23: +sub bp,160 +add ecx,00A000000h +_@seek1a23: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko23: +add eax,ecx +adc ax,-1 +_@seek24: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-229 +cmp ax,bx +jge short _@seeko24 +lea dx,[bx+137] +shr dl,1 +_@hit24: +add eax,0F0000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a24 +add eax,0F0000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a24 +add eax,0F0000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko24 +jmp _@hit24 +_@seek2a24: +sub bp,160 +add ecx,00A000000h +_@seek1a24: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko24: +add eax,ecx +adc ax,-1 +_@seek25: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-230 +cmp ax,bx +jge short _@seeko25 +lea dx,[bx+137] +shr dl,1 +_@hit25: +add eax,0FA000000h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a25 +add eax,0FA000000h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a25 +add eax,0FA000000h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko25 +jmp _@hit25 +_@seek2a25: +sub bp,160 +add ecx,00A000000h +_@seek1a25: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko25: +add eax,ecx +adc ax,-1 +_@seek26: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-232 +cmp ax,bx +jge short _@seeko26 +lea dx,[bx+137] +shr dl,1 +_@hit26: +add eax,004000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a26 +add eax,004000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a26 +add eax,004000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko26 +jmp _@hit26 +_@seek2a26: +sub bp,160 +add ecx,00A000000h +_@seek1a26: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko26: +add eax,ecx +adc ax,-1 +_@seek27: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-233 +cmp ax,bx +jge short _@seeko27 +lea dx,[bx+137] +shr dl,1 +_@hit27: +add eax,00E000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a27 +add eax,00E000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a27 +add eax,00E000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko27 +jmp _@hit27 +_@seek2a27: +sub bp,160 +add ecx,00A000000h +_@seek1a27: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko27: +add eax,ecx +adc ax,-1 +_@seek28: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-234 +cmp ax,bx +jge short _@seeko28 +lea dx,[bx+137] +shr dl,1 +_@hit28: +add eax,018000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a28 +add eax,018000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a28 +add eax,018000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko28 +jmp _@hit28 +_@seek2a28: +sub bp,160 +add ecx,00A000000h +_@seek1a28: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko28: +add eax,ecx +adc ax,-1 +_@seek29: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-236 +cmp ax,bx +jge short _@seeko29 +lea dx,[bx+137] +shr dl,1 +_@hit29: +add eax,022000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a29 +add eax,022000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a29 +add eax,022000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko29 +jmp _@hit29 +_@seek2a29: +sub bp,160 +add ecx,00A000000h +_@seek1a29: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko29: +add eax,ecx +adc ax,-1 +_@seek30: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-237 +cmp ax,bx +jge short _@seeko30 +lea dx,[bx+137] +shr dl,1 +_@hit30: +add eax,02C000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a30 +add eax,02C000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a30 +add eax,02C000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko30 +jmp _@hit30 +_@seek2a30: +sub bp,160 +add ecx,00A000000h +_@seek1a30: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko30: +add eax,ecx +adc ax,-1 +_@seek31: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-239 +cmp ax,bx +jge short _@seeko31 +lea dx,[bx+137] +shr dl,1 +_@hit31: +add eax,036000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a31 +add eax,036000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a31 +add eax,036000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko31 +jmp _@hit31 +_@seek2a31: +sub bp,160 +add ecx,00A000000h +_@seek1a31: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko31: +add eax,ecx +adc ax,-1 +_@seek32: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-240 +cmp ax,bx +jge short _@seeko32 +lea dx,[bx+136] +shr dl,1 +_@hit32: +add eax,040000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a32 +add eax,040000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a32 +add eax,040000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko32 +jmp _@hit32 +_@seek2a32: +sub bp,160 +add ecx,00A000000h +_@seek1a32: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko32: +add eax,ecx +adc ax,-1 +_@seek33: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-241 +cmp ax,bx +jge short _@seeko33 +lea dx,[bx+136] +shr dl,1 +_@hit33: +add eax,04A000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a33 +add eax,04A000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a33 +add eax,04A000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko33 +jmp _@hit33 +_@seek2a33: +sub bp,160 +add ecx,00A000000h +_@seek1a33: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko33: +add eax,ecx +adc ax,-1 +_@seek34: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-243 +cmp ax,bx +jge short _@seeko34 +lea dx,[bx+136] +shr dl,1 +_@hit34: +add eax,054000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a34 +add eax,054000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a34 +add eax,054000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko34 +jmp _@hit34 +_@seek2a34: +sub bp,160 +add ecx,00A000000h +_@seek1a34: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko34: +add eax,ecx +adc ax,-1 +_@seek35: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-244 +cmp ax,bx +jge short _@seeko35 +lea dx,[bx+136] +shr dl,1 +_@hit35: +add eax,05E000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a35 +add eax,05E000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a35 +add eax,05E000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko35 +jmp _@hit35 +_@seek2a35: +sub bp,160 +add ecx,00A000000h +_@seek1a35: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko35: +add eax,ecx +adc ax,-1 +_@seek36: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-246 +cmp ax,bx +jge short _@seeko36 +lea dx,[bx+136] +shr dl,1 +_@hit36: +add eax,068000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a36 +add eax,068000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a36 +add eax,068000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko36 +jmp _@hit36 +_@seek2a36: +sub bp,160 +add ecx,00A000000h +_@seek1a36: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko36: +add eax,ecx +adc ax,-1 +_@seek37: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-247 +cmp ax,bx +jge short _@seeko37 +lea dx,[bx+136] +shr dl,1 +_@hit37: +add eax,072000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a37 +add eax,072000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a37 +add eax,072000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko37 +jmp _@hit37 +_@seek2a37: +sub bp,160 +add ecx,00A000000h +_@seek1a37: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko37: +add eax,ecx +adc ax,-1 +_@seek38: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-248 +cmp ax,bx +jge short _@seeko38 +lea dx,[bx+136] +shr dl,1 +_@hit38: +add eax,07C000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a38 +add eax,07C000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a38 +add eax,07C000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko38 +jmp _@hit38 +_@seek2a38: +sub bp,160 +add ecx,00A000000h +_@seek1a38: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko38: +add eax,ecx +adc ax,-1 +_@seek39: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-250 +cmp ax,bx +jge short _@seeko39 +lea dx,[bx+136] +shr dl,1 +_@hit39: +add eax,086000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a39 +add eax,086000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a39 +add eax,086000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko39 +jmp _@hit39 +_@seek2a39: +sub bp,160 +add ecx,00A000000h +_@seek1a39: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko39: +add eax,ecx +adc ax,-1 +_@seek40: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-251 +cmp ax,bx +jge short _@seeko40 +lea dx,[bx+135] +shr dl,1 +_@hit40: +add eax,090000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a40 +add eax,090000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a40 +add eax,090000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko40 +jmp _@hit40 +_@seek2a40: +sub bp,160 +add ecx,00A000000h +_@seek1a40: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko40: +add eax,ecx +adc ax,-1 +_@seek41: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-252 +cmp ax,bx +jge short _@seeko41 +lea dx,[bx+135] +shr dl,1 +_@hit41: +add eax,09A000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a41 +add eax,09A000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a41 +add eax,09A000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko41 +jmp _@hit41 +_@seek2a41: +sub bp,160 +add ecx,00A000000h +_@seek1a41: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko41: +add eax,ecx +adc ax,-1 +_@seek42: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-253 +cmp ax,bx +jge short _@seeko42 +lea dx,[bx+135] +shr dl,1 +_@hit42: +add eax,0A4000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a42 +add eax,0A4000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a42 +add eax,0A4000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko42 +jmp _@hit42 +_@seek2a42: +sub bp,160 +add ecx,00A000000h +_@seek1a42: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko42: +add eax,ecx +adc ax,-1 +_@seek43: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-254 +cmp ax,bx +jge short _@seeko43 +lea dx,[bx+135] +shr dl,1 +_@hit43: +add eax,0AE000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a43 +add eax,0AE000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a43 +add eax,0AE000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko43 +jmp _@hit43 +_@seek2a43: +sub bp,160 +add ecx,00A000000h +_@seek1a43: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko43: +add eax,ecx +adc ax,-1 +_@seek44: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-254 +cmp ax,bx +jge short _@seeko44 +lea dx,[bx+135] +shr dl,1 +_@hit44: +add eax,0B8000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a44 +add eax,0B8000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a44 +add eax,0B8000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko44 +jmp _@hit44 +_@seek2a44: +sub bp,160 +add ecx,00A000000h +_@seek1a44: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko44: +add eax,ecx +adc ax,-1 +_@seek45: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-255 +cmp ax,bx +jge short _@seeko45 +lea dx,[bx+135] +shr dl,1 +_@hit45: +add eax,0C2000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a45 +add eax,0C2000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a45 +add eax,0C2000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko45 +jmp _@hit45 +_@seek2a45: +sub bp,160 +add ecx,00A000000h +_@seek1a45: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko45: +add eax,ecx +adc ax,-1 +_@seek46: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-255 +cmp ax,bx +jge short _@seeko46 +lea dx,[bx+135] +shr dl,1 +_@hit46: +add eax,0CC000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a46 +add eax,0CC000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a46 +add eax,0CC000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko46 +jmp _@hit46 +_@seek2a46: +sub bp,160 +add ecx,00A000000h +_@seek1a46: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko46: +add eax,ecx +adc ax,-1 +_@seek47: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-255 +cmp ax,bx +jge short _@seeko47 +lea dx,[bx+135] +shr dl,1 +_@hit47: +add eax,0D6000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a47 +add eax,0D6000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a47 +add eax,0D6000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko47 +jmp _@hit47 +_@seek2a47: +sub bp,160 +add ecx,00A000000h +_@seek1a47: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko47: +add eax,ecx +adc ax,-1 +_@seek48: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-256 +cmp ax,bx +jge short _@seeko48 +lea dx,[bx+134] +shr dl,1 +_@hit48: +add eax,0E0000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a48 +add eax,0E0000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a48 +add eax,0E0000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko48 +jmp _@hit48 +_@seek2a48: +sub bp,160 +add ecx,00A000000h +_@seek1a48: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko48: +add eax,ecx +adc ax,-1 +_@seek49: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-255 +cmp ax,bx +jge short _@seeko49 +lea dx,[bx+134] +shr dl,1 +_@hit49: +add eax,0EA000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a49 +add eax,0EA000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a49 +add eax,0EA000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko49 +jmp _@hit49 +_@seek2a49: +sub bp,160 +add ecx,00A000000h +_@seek1a49: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko49: +add eax,ecx +adc ax,-1 +_@seek50: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-255 +cmp ax,bx +jge short _@seeko50 +lea dx,[bx+134] +shr dl,1 +_@hit50: +add eax,0F4000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a50 +add eax,0F4000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a50 +add eax,0F4000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko50 +jmp _@hit50 +_@seek2a50: +sub bp,160 +add ecx,00A000000h +_@seek1a50: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko50: +add eax,ecx +adc ax,-1 +_@seek51: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-255 +cmp ax,bx +jge short _@seeko51 +lea dx,[bx+134] +shr dl,1 +_@hit51: +add eax,0FE000001h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a51 +add eax,0FE000001h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a51 +add eax,0FE000001h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko51 +jmp _@hit51 +_@seek2a51: +sub bp,160 +add ecx,00A000000h +_@seek1a51: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko51: +add eax,ecx +adc ax,-1 +_@seek52: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-254 +cmp ax,bx +jge short _@seeko52 +lea dx,[bx+134] +shr dl,1 +_@hit52: +add eax,008000002h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a52 +add eax,008000002h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a52 +add eax,008000002h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko52 +jmp _@hit52 +_@seek2a52: +sub bp,160 +add ecx,00A000000h +_@seek1a52: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko52: +add eax,ecx +adc ax,-1 +_@seek53: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-254 +cmp ax,bx +jge short _@seeko53 +lea dx,[bx+134] +shr dl,1 +_@hit53: +add eax,012000002h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a53 +add eax,012000002h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a53 +add eax,012000002h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko53 +jmp _@hit53 +_@seek2a53: +sub bp,160 +add ecx,00A000000h +_@seek1a53: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko53: +add eax,ecx +adc ax,-1 +_@seek54: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-253 +cmp ax,bx +jge short _@seeko54 +lea dx,[bx+134] +shr dl,1 +_@hit54: +add eax,01C000002h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a54 +add eax,01C000002h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a54 +add eax,01C000002h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko54 +jmp _@hit54 +_@seek2a54: +sub bp,160 +add ecx,00A000000h +_@seek1a54: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko54: +add eax,ecx +adc ax,-1 +_@seek55: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-252 +cmp ax,bx +jge short _@seeko55 +lea dx,[bx+134] +shr dl,1 +_@hit55: +add eax,026000002h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a55 +add eax,026000002h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a55 +add eax,026000002h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko55 +jmp _@hit55 +_@seek2a55: +sub bp,160 +add ecx,00A000000h +_@seek1a55: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko55: +add eax,ecx +adc ax,-1 +_@seek56: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-251 +cmp ax,bx +jge short _@seeko56 +lea dx,[bx+133] +shr dl,1 +_@hit56: +add eax,030000002h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a56 +add eax,030000002h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a56 +add eax,030000002h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko56 +jmp _@hit56 +_@seek2a56: +sub bp,160 +add ecx,00A000000h +_@seek1a56: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko56: +add eax,ecx +adc ax,-1 +_@seek57: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-250 +cmp ax,bx +jge short _@seeko57 +lea dx,[bx+133] +shr dl,1 +_@hit57: +add eax,03A000002h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a57 +add eax,03A000002h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a57 +add eax,03A000002h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko57 +jmp _@hit57 +_@seek2a57: +sub bp,160 +add ecx,00A000000h +_@seek1a57: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko57: +add eax,ecx +adc ax,-1 +_@seek58: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-248 +cmp ax,bx +jge short _@seeko58 +lea dx,[bx+133] +shr dl,1 +_@hit58: +add eax,044000002h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a58 +add eax,044000002h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a58 +add eax,044000002h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko58 +jmp _@hit58 +_@seek2a58: +sub bp,160 +add ecx,00A000000h +_@seek1a58: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko58: +add eax,ecx +adc ax,-1 +_@seek59: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-247 +cmp ax,bx +jge short _@seeko59 +lea dx,[bx+133] +shr dl,1 +_@hit59: +add eax,04E000002h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a59 +add eax,04E000002h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a59 +add eax,04E000002h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko59 +jmp _@hit59 +_@seek2a59: +sub bp,160 +add ecx,00A000000h +_@seek1a59: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko59: +add eax,ecx +adc ax,-1 +_@seek60: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-246 +cmp ax,bx +jge short _@seeko60 +lea dx,[bx+133] +shr dl,1 +_@hit60: +add eax,058000002h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a60 +add eax,058000002h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a60 +add eax,058000002h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko60 +jmp _@hit60 +_@seek2a60: +sub bp,160 +add ecx,00A000000h +_@seek1a60: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko60: +add eax,ecx +adc ax,-1 +_@seek61: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-244 +cmp ax,bx +jge short _@seeko61 +lea dx,[bx+133] +shr dl,1 +_@hit61: +add eax,062000002h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a61 +add eax,062000002h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a61 +add eax,062000002h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko61 +jmp _@hit61 +_@seek2a61: +sub bp,160 +add ecx,00A000000h +_@seek1a61: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko61: +add eax,ecx +adc ax,-1 +_@seek62: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-243 +cmp ax,bx +jge short _@seeko62 +lea dx,[bx+133] +shr dl,1 +_@hit62: +add eax,06C000002h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a62 +add eax,06C000002h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a62 +add eax,06C000002h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko62 +jmp _@hit62 +_@seek2a62: +sub bp,160 +add ecx,00A000000h +_@seek1a62: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko62: +add eax,ecx +adc ax,-1 +_@seek63: +add si,ds:theloop_xsina1 +mov bx,fs:[si] +add di,ds:theloop_ysina1 +add bx,gs:[di] +add bx,-241 +cmp ax,bx +jge short _@seeko63 +lea dx,[bx+133] +shr dl,1 +_@hit63: +add eax,076000002h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a63 +add eax,076000002h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a63 +add eax,076000002h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko63 +jmp _@hit63 +_@seek2a63: +sub bp,160 +add ecx,00A000000h +_@seek1a63: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko63: +add eax,ecx +adc ax,-1 +_@seek64: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-240 +cmp ax,bx +jge short _@seeko64 +lea dx,[bx+132] +shr dl,1 +_@hit64: +add eax,080000002h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a64 +add eax,080000002h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a64 +add eax,080000002h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko64 +jmp _@hit64 +_@seek2a64: +sub bp,160 +add ecx,00A000000h +_@seek1a64: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko64: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek66: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-237 +cmp ax,bx +jge short _@seeko66 +lea dx,[bx+132] +shr dl,1 +_@hit66: +add eax,094000002h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a66 +add eax,094000002h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a66 +add eax,094000002h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko66 +jmp _@hit66 +_@seek2a66: +sub bp,160 +add ecx,00A000000h +_@seek1a66: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko66: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek68: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-234 +cmp ax,bx +jge short _@seeko68 +lea dx,[bx+132] +shr dl,1 +_@hit68: +add eax,0A8000002h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a68 +add eax,0A8000002h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a68 +add eax,0A8000002h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko68 +jmp _@hit68 +_@seek2a68: +sub bp,160 +add ecx,00A000000h +_@seek1a68: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko68: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek70: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-232 +cmp ax,bx +jge short _@seeko70 +lea dx,[bx+132] +shr dl,1 +_@hit70: +add eax,0BC000002h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a70 +add eax,0BC000002h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a70 +add eax,0BC000002h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko70 +jmp _@hit70 +_@seek2a70: +sub bp,160 +add ecx,00A000000h +_@seek1a70: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko70: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek72: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-229 +cmp ax,bx +jge short _@seeko72 +lea dx,[bx+131] +shr dl,1 +_@hit72: +add eax,0D0000002h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a72 +add eax,0D0000002h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a72 +add eax,0D0000002h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko72 +jmp _@hit72 +_@seek2a72: +sub bp,160 +add ecx,00A000000h +_@seek1a72: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko72: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek74: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-227 +cmp ax,bx +jge short _@seeko74 +lea dx,[bx+131] +shr dl,1 +_@hit74: +add eax,0E4000002h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a74 +add eax,0E4000002h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a74 +add eax,0E4000002h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko74 +jmp _@hit74 +_@seek2a74: +sub bp,160 +add ecx,00A000000h +_@seek1a74: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko74: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek76: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-226 +cmp ax,bx +jge short _@seeko76 +lea dx,[bx+131] +shr dl,1 +_@hit76: +add eax,0F8000002h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a76 +add eax,0F8000002h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a76 +add eax,0F8000002h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko76 +jmp _@hit76 +_@seek2a76: +sub bp,160 +add ecx,00A000000h +_@seek1a76: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko76: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek78: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-225 +cmp ax,bx +jge short _@seeko78 +lea dx,[bx+131] +shr dl,1 +_@hit78: +add eax,00C000003h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a78 +add eax,00C000003h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a78 +add eax,00C000003h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko78 +jmp _@hit78 +_@seek2a78: +sub bp,160 +add ecx,00A000000h +_@seek1a78: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko78: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek80: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-224 +cmp ax,bx +jge short _@seeko80 +lea dx,[bx+130] +shr dl,1 +_@hit80: +add eax,020000003h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a80 +add eax,020000003h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a80 +add eax,020000003h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko80 +jmp _@hit80 +_@seek2a80: +sub bp,160 +add ecx,00A000000h +_@seek1a80: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko80: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek82: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-225 +cmp ax,bx +jge short _@seeko82 +lea dx,[bx+130] +shr dl,1 +_@hit82: +add eax,034000003h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a82 +add eax,034000003h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a82 +add eax,034000003h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko82 +jmp _@hit82 +_@seek2a82: +sub bp,160 +add ecx,00A000000h +_@seek1a82: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko82: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek84: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-226 +cmp ax,bx +jge short _@seeko84 +lea dx,[bx+130] +shr dl,1 +_@hit84: +add eax,048000003h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a84 +add eax,048000003h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a84 +add eax,048000003h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko84 +jmp _@hit84 +_@seek2a84: +sub bp,160 +add ecx,00A000000h +_@seek1a84: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko84: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek86: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-227 +cmp ax,bx +jge short _@seeko86 +lea dx,[bx+130] +shr dl,1 +_@hit86: +add eax,05C000003h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a86 +add eax,05C000003h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a86 +add eax,05C000003h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko86 +jmp _@hit86 +_@seek2a86: +sub bp,160 +add ecx,00A000000h +_@seek1a86: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko86: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek88: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-229 +cmp ax,bx +jge short _@seeko88 +lea dx,[bx+129] +shr dl,1 +_@hit88: +add eax,070000003h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a88 +add eax,070000003h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a88 +add eax,070000003h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko88 +jmp _@hit88 +_@seek2a88: +sub bp,160 +add ecx,00A000000h +_@seek1a88: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko88: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek90: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-232 +cmp ax,bx +jge short _@seeko90 +lea dx,[bx+129] +shr dl,1 +_@hit90: +add eax,084000003h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a90 +add eax,084000003h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a90 +add eax,084000003h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko90 +jmp _@hit90 +_@seek2a90: +sub bp,160 +add ecx,00A000000h +_@seek1a90: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko90: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek92: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-234 +cmp ax,bx +jge short _@seeko92 +lea dx,[bx+129] +shr dl,1 +_@hit92: +add eax,098000003h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a92 +add eax,098000003h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a92 +add eax,098000003h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko92 +jmp _@hit92 +_@seek2a92: +sub bp,160 +add ecx,00A000000h +_@seek1a92: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko92: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek94: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-237 +cmp ax,bx +jge short _@seeko94 +lea dx,[bx+129] +shr dl,1 +_@hit94: +add eax,0AC000003h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a94 +add eax,0AC000003h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a94 +add eax,0AC000003h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko94 +jmp _@hit94 +_@seek2a94: +sub bp,160 +add ecx,00A000000h +_@seek1a94: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko94: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek96: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-240 +cmp ax,bx +jge short _@seeko96 +lea dx,[bx+128] +shr dl,1 +_@hit96: +add eax,0C0000003h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a96 +add eax,0C0000003h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a96 +add eax,0C0000003h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko96 +jmp _@hit96 +_@seek2a96: +sub bp,160 +add ecx,00A000000h +_@seek1a96: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko96: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek98: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-243 +cmp ax,bx +jge short _@seeko98 +lea dx,[bx+128] +shr dl,1 +_@hit98: +add eax,0D4000003h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a98 +add eax,0D4000003h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a98 +add eax,0D4000003h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko98 +jmp _@hit98 +_@seek2a98: +sub bp,160 +add ecx,00A000000h +_@seek1a98: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko98: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek100: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-246 +cmp ax,bx +jge short _@seeko100 +lea dx,[bx+128] +shr dl,1 +_@hit100: +add eax,0E8000003h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a100 +add eax,0E8000003h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a100 +add eax,0E8000003h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko100 +jmp _@hit100 +_@seek2a100: +sub bp,160 +add ecx,00A000000h +_@seek1a100: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko100: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek102: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-248 +cmp ax,bx +jge short _@seeko102 +lea dx,[bx+128] +shr dl,1 +_@hit102: +add eax,0FC000003h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a102 +add eax,0FC000003h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a102 +add eax,0FC000003h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko102 +jmp _@hit102 +_@seek2a102: +sub bp,160 +add ecx,00A000000h +_@seek1a102: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko102: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek104: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-251 +cmp ax,bx +jge short _@seeko104 +lea dx,[bx+127] +shr dl,1 +_@hit104: +add eax,010000004h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a104 +add eax,010000004h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a104 +add eax,010000004h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko104 +jmp _@hit104 +_@seek2a104: +sub bp,160 +add ecx,00A000000h +_@seek1a104: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko104: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek106: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-253 +cmp ax,bx +jge short _@seeko106 +lea dx,[bx+127] +shr dl,1 +_@hit106: +add eax,024000004h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a106 +add eax,024000004h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a106 +add eax,024000004h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko106 +jmp _@hit106 +_@seek2a106: +sub bp,160 +add ecx,00A000000h +_@seek1a106: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko106: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek108: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-254 +cmp ax,bx +jge short _@seeko108 +lea dx,[bx+127] +shr dl,1 +_@hit108: +add eax,038000004h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a108 +add eax,038000004h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a108 +add eax,038000004h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko108 +jmp _@hit108 +_@seek2a108: +sub bp,160 +add ecx,00A000000h +_@seek1a108: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko108: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek110: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-255 +cmp ax,bx +jge short _@seeko110 +lea dx,[bx+127] +shr dl,1 +_@hit110: +add eax,04C000004h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a110 +add eax,04C000004h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a110 +add eax,04C000004h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko110 +jmp _@hit110 +_@seek2a110: +sub bp,160 +add ecx,00A000000h +_@seek1a110: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko110: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek112: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-256 +cmp ax,bx +jge short _@seeko112 +lea dx,[bx+126] +shr dl,1 +_@hit112: +add eax,060000004h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a112 +add eax,060000004h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a112 +add eax,060000004h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko112 +jmp _@hit112 +_@seek2a112: +sub bp,160 +add ecx,00A000000h +_@seek1a112: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko112: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek114: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-255 +cmp ax,bx +jge short _@seeko114 +lea dx,[bx+126] +shr dl,1 +_@hit114: +add eax,074000004h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a114 +add eax,074000004h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a114 +add eax,074000004h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko114 +jmp _@hit114 +_@seek2a114: +sub bp,160 +add ecx,00A000000h +_@seek1a114: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko114: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek116: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-254 +cmp ax,bx +jge short _@seeko116 +lea dx,[bx+126] +shr dl,1 +_@hit116: +add eax,088000004h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a116 +add eax,088000004h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a116 +add eax,088000004h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko116 +jmp _@hit116 +_@seek2a116: +sub bp,160 +add ecx,00A000000h +_@seek1a116: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko116: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek118: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-253 +cmp ax,bx +jge short _@seeko118 +lea dx,[bx+126] +shr dl,1 +_@hit118: +add eax,09C000004h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a118 +add eax,09C000004h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a118 +add eax,09C000004h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko118 +jmp _@hit118 +_@seek2a118: +sub bp,160 +add ecx,00A000000h +_@seek1a118: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko118: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek120: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-251 +cmp ax,bx +jge short _@seeko120 +lea dx,[bx+125] +shr dl,1 +_@hit120: +add eax,0B0000004h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a120 +add eax,0B0000004h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a120 +add eax,0B0000004h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko120 +jmp _@hit120 +_@seek2a120: +sub bp,160 +add ecx,00A000000h +_@seek1a120: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko120: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek122: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-248 +cmp ax,bx +jge short _@seeko122 +lea dx,[bx+125] +shr dl,1 +_@hit122: +add eax,0C4000004h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a122 +add eax,0C4000004h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a122 +add eax,0C4000004h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko122 +jmp _@hit122 +_@seek2a122: +sub bp,160 +add ecx,00A000000h +_@seek1a122: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko122: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek124: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-246 +cmp ax,bx +jge short _@seeko124 +lea dx,[bx+125] +shr dl,1 +_@hit124: +add eax,0D8000004h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a124 +add eax,0D8000004h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a124 +add eax,0D8000004h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko124 +jmp _@hit124 +_@seek2a124: +sub bp,160 +add ecx,00A000000h +_@seek1a124: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko124: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek126: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-243 +cmp ax,bx +jge short _@seeko126 +lea dx,[bx+125] +shr dl,1 +_@hit126: +add eax,0EC000004h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a126 +add eax,0EC000004h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a126 +add eax,0EC000004h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko126 +jmp _@hit126 +_@seek2a126: +sub bp,160 +add ecx,00A000000h +_@seek1a126: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko126: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek128: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-240 +cmp ax,bx +jge short _@seeko128 +lea dx,[bx+124] +shr dl,1 +_@hit128: +add eax,000000005h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a128 +add eax,000000005h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a128 +add eax,000000005h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko128 +jmp _@hit128 +_@seek2a128: +sub bp,160 +add ecx,00A000000h +_@seek1a128: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko128: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek130: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-237 +cmp ax,bx +jge short _@seeko130 +lea dx,[bx+124] +shr dl,1 +_@hit130: +add eax,014000005h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a130 +add eax,014000005h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a130 +add eax,014000005h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko130 +jmp _@hit130 +_@seek2a130: +sub bp,160 +add ecx,00A000000h +_@seek1a130: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko130: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek132: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-234 +cmp ax,bx +jge short _@seeko132 +lea dx,[bx+124] +shr dl,1 +_@hit132: +add eax,028000005h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a132 +add eax,028000005h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a132 +add eax,028000005h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko132 +jmp _@hit132 +_@seek2a132: +sub bp,160 +add ecx,00A000000h +_@seek1a132: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko132: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek134: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-232 +cmp ax,bx +jge short _@seeko134 +lea dx,[bx+124] +shr dl,1 +_@hit134: +add eax,03C000005h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a134 +add eax,03C000005h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a134 +add eax,03C000005h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko134 +jmp _@hit134 +_@seek2a134: +sub bp,160 +add ecx,00A000000h +_@seek1a134: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko134: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek136: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-229 +cmp ax,bx +jge short _@seeko136 +lea dx,[bx+123] +shr dl,1 +_@hit136: +add eax,050000005h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a136 +add eax,050000005h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a136 +add eax,050000005h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko136 +jmp _@hit136 +_@seek2a136: +sub bp,160 +add ecx,00A000000h +_@seek1a136: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko136: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek138: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-227 +cmp ax,bx +jge short _@seeko138 +lea dx,[bx+123] +shr dl,1 +_@hit138: +add eax,064000005h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a138 +add eax,064000005h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a138 +add eax,064000005h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko138 +jmp _@hit138 +_@seek2a138: +sub bp,160 +add ecx,00A000000h +_@seek1a138: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko138: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek140: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-226 +cmp ax,bx +jge short _@seeko140 +lea dx,[bx+123] +shr dl,1 +_@hit140: +add eax,078000005h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a140 +add eax,078000005h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a140 +add eax,078000005h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko140 +jmp _@hit140 +_@seek2a140: +sub bp,160 +add ecx,00A000000h +_@seek1a140: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko140: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek142: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-225 +cmp ax,bx +jge short _@seeko142 +lea dx,[bx+123] +shr dl,1 +_@hit142: +add eax,08C000005h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a142 +add eax,08C000005h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a142 +add eax,08C000005h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko142 +jmp _@hit142 +_@seek2a142: +sub bp,160 +add ecx,00A000000h +_@seek1a142: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko142: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek144: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-224 +cmp ax,bx +jge short _@seeko144 +lea dx,[bx+122] +shr dl,1 +_@hit144: +add eax,0A0000005h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a144 +add eax,0A0000005h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a144 +add eax,0A0000005h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko144 +jmp _@hit144 +_@seek2a144: +sub bp,160 +add ecx,00A000000h +_@seek1a144: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko144: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek146: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-225 +cmp ax,bx +jge short _@seeko146 +lea dx,[bx+122] +shr dl,1 +_@hit146: +add eax,0B4000005h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a146 +add eax,0B4000005h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a146 +add eax,0B4000005h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko146 +jmp _@hit146 +_@seek2a146: +sub bp,160 +add ecx,00A000000h +_@seek1a146: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko146: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek148: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-226 +cmp ax,bx +jge short _@seeko148 +lea dx,[bx+122] +shr dl,1 +_@hit148: +add eax,0C8000005h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a148 +add eax,0C8000005h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a148 +add eax,0C8000005h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko148 +jmp _@hit148 +_@seek2a148: +sub bp,160 +add ecx,00A000000h +_@seek1a148: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko148: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek150: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-227 +cmp ax,bx +jge short _@seeko150 +lea dx,[bx+122] +shr dl,1 +_@hit150: +add eax,0DC000005h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a150 +add eax,0DC000005h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a150 +add eax,0DC000005h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko150 +jmp _@hit150 +_@seek2a150: +sub bp,160 +add ecx,00A000000h +_@seek1a150: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko150: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek152: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-229 +cmp ax,bx +jge short _@seeko152 +lea dx,[bx+121] +shr dl,1 +_@hit152: +add eax,0F0000005h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a152 +add eax,0F0000005h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a152 +add eax,0F0000005h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko152 +jmp _@hit152 +_@seek2a152: +sub bp,160 +add ecx,00A000000h +_@seek1a152: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko152: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek154: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-232 +cmp ax,bx +jge short _@seeko154 +lea dx,[bx+121] +shr dl,1 +_@hit154: +add eax,004000006h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a154 +add eax,004000006h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a154 +add eax,004000006h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko154 +jmp _@hit154 +_@seek2a154: +sub bp,160 +add ecx,00A000000h +_@seek1a154: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko154: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek156: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-234 +cmp ax,bx +jge short _@seeko156 +lea dx,[bx+121] +shr dl,1 +_@hit156: +add eax,018000006h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a156 +add eax,018000006h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a156 +add eax,018000006h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko156 +jmp _@hit156 +_@seek2a156: +sub bp,160 +add ecx,00A000000h +_@seek1a156: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko156: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek158: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-237 +cmp ax,bx +jge short _@seeko158 +lea dx,[bx+121] +shr dl,1 +_@hit158: +add eax,02C000006h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a158 +add eax,02C000006h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a158 +add eax,02C000006h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko158 +jmp _@hit158 +_@seek2a158: +sub bp,160 +add ecx,00A000000h +_@seek1a158: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko158: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek160: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-240 +cmp ax,bx +jge short _@seeko160 +lea dx,[bx+120] +shr dl,1 +_@hit160: +add eax,040000006h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a160 +add eax,040000006h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a160 +add eax,040000006h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko160 +jmp _@hit160 +_@seek2a160: +sub bp,160 +add ecx,00A000000h +_@seek1a160: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko160: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek162: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-243 +cmp ax,bx +jge short _@seeko162 +lea dx,[bx+120] +shr dl,1 +_@hit162: +add eax,054000006h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a162 +add eax,054000006h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a162 +add eax,054000006h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko162 +jmp _@hit162 +_@seek2a162: +sub bp,160 +add ecx,00A000000h +_@seek1a162: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko162: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek164: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-246 +cmp ax,bx +jge short _@seeko164 +lea dx,[bx+120] +shr dl,1 +_@hit164: +add eax,068000006h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a164 +add eax,068000006h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a164 +add eax,068000006h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko164 +jmp _@hit164 +_@seek2a164: +sub bp,160 +add ecx,00A000000h +_@seek1a164: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko164: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek166: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-248 +cmp ax,bx +jge short _@seeko166 +lea dx,[bx+120] +shr dl,1 +_@hit166: +add eax,07C000006h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a166 +add eax,07C000006h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a166 +add eax,07C000006h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko166 +jmp _@hit166 +_@seek2a166: +sub bp,160 +add ecx,00A000000h +_@seek1a166: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko166: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek168: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-251 +cmp ax,bx +jge short _@seeko168 +lea dx,[bx+119] +shr dl,1 +_@hit168: +add eax,090000006h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a168 +add eax,090000006h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a168 +add eax,090000006h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko168 +jmp _@hit168 +_@seek2a168: +sub bp,160 +add ecx,00A000000h +_@seek1a168: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko168: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek170: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-253 +cmp ax,bx +jge short _@seeko170 +lea dx,[bx+119] +shr dl,1 +_@hit170: +add eax,0A4000006h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a170 +add eax,0A4000006h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a170 +add eax,0A4000006h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko170 +jmp _@hit170 +_@seek2a170: +sub bp,160 +add ecx,00A000000h +_@seek1a170: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko170: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek172: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-254 +cmp ax,bx +jge short _@seeko172 +lea dx,[bx+119] +shr dl,1 +_@hit172: +add eax,0B8000006h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a172 +add eax,0B8000006h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a172 +add eax,0B8000006h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko172 +jmp _@hit172 +_@seek2a172: +sub bp,160 +add ecx,00A000000h +_@seek1a172: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko172: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek174: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-255 +cmp ax,bx +jge short _@seeko174 +lea dx,[bx+119] +shr dl,1 +_@hit174: +add eax,0CC000006h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a174 +add eax,0CC000006h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a174 +add eax,0CC000006h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko174 +jmp _@hit174 +_@seek2a174: +sub bp,160 +add ecx,00A000000h +_@seek1a174: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko174: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek176: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-256 +cmp ax,bx +jge short _@seeko176 +lea dx,[bx+118] +shr dl,1 +_@hit176: +add eax,0E0000006h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a176 +add eax,0E0000006h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a176 +add eax,0E0000006h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko176 +jmp _@hit176 +_@seek2a176: +sub bp,160 +add ecx,00A000000h +_@seek1a176: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko176: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek178: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-255 +cmp ax,bx +jge short _@seeko178 +lea dx,[bx+118] +shr dl,1 +_@hit178: +add eax,0F4000006h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a178 +add eax,0F4000006h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a178 +add eax,0F4000006h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko178 +jmp _@hit178 +_@seek2a178: +sub bp,160 +add ecx,00A000000h +_@seek1a178: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko178: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek180: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-254 +cmp ax,bx +jge short _@seeko180 +lea dx,[bx+118] +shr dl,1 +_@hit180: +add eax,008000007h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a180 +add eax,008000007h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a180 +add eax,008000007h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko180 +jmp _@hit180 +_@seek2a180: +sub bp,160 +add ecx,00A000000h +_@seek1a180: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko180: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek182: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-253 +cmp ax,bx +jge short _@seeko182 +lea dx,[bx+118] +shr dl,1 +_@hit182: +add eax,01C000007h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a182 +add eax,01C000007h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a182 +add eax,01C000007h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko182 +jmp _@hit182 +_@seek2a182: +sub bp,160 +add ecx,00A000000h +_@seek1a182: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko182: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek184: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-251 +cmp ax,bx +jge short _@seeko184 +lea dx,[bx+117] +shr dl,1 +_@hit184: +add eax,030000007h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a184 +add eax,030000007h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a184 +add eax,030000007h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko184 +jmp _@hit184 +_@seek2a184: +sub bp,160 +add ecx,00A000000h +_@seek1a184: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko184: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek186: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-248 +cmp ax,bx +jge short _@seeko186 +lea dx,[bx+117] +shr dl,1 +_@hit186: +add eax,044000007h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a186 +add eax,044000007h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a186 +add eax,044000007h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko186 +jmp _@hit186 +_@seek2a186: +sub bp,160 +add ecx,00A000000h +_@seek1a186: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko186: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek188: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-246 +cmp ax,bx +jge short _@seeko188 +lea dx,[bx+117] +shr dl,1 +_@hit188: +add eax,058000007h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a188 +add eax,058000007h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a188 +add eax,058000007h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko188 +jmp _@hit188 +_@seek2a188: +sub bp,160 +add ecx,00A000000h +_@seek1a188: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko188: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek190: +add si,ds:theloop_xsina2 +mov bx,fs:[si] +add di,ds:theloop_ysina2 +add bx,gs:[di] +add bx,-243 +cmp ax,bx +jge short _@seeko190 +lea dx,[bx+117] +shr dl,1 +_@hit190: +add eax,06C000007h +adc ax,0 +mov es:[bp],dl +cmp ax,bx +jge short _@seek1a190 +add eax,06C000007h +adc ax,0 +mov es:[bp-160],dl +cmp ax,bx +jge short _@seek2a190 +add eax,06C000007h +adc ax,0 +mov es:[bp-320],dl +add ecx,01E000000h +adc cx,0 +sub bp,160*3 +cmp ax,bx +jge short _@seeko190 +jmp _@hit190 +_@seek2a190: +sub bp,160 +add ecx,00A000000h +_@seek1a190: +adc ecx,00A000000h +adc cx,0 +sub bp,160 +_@seeko190: +add eax,ecx +adc eax,ecx +adc ax,-1 +_@seek192: +_@seekr192: +ret +theloop ENDP diff --git a/COMAN/THELOOP.OBJ b/COMAN/THELOOP.OBJ new file mode 100644 index 0000000..ffdc654 Binary files /dev/null and b/COMAN/THELOOP.OBJ differ diff --git a/COMAN/TMP b/COMAN/TMP new file mode 100644 index 0000000..95ce3b1 --- /dev/null +++ b/COMAN/TMP @@ -0,0 +1,29 @@ +@@2: ;this loop also clears + mov dx,3c4h + mov ax,0302h + out dx,ax + zzz=0 + REPT 20 + mov eax,ds:[si+zzz] + mov ds:[si+zzz],ebx + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + mov dx,3c4h + mov ax,0C02h + out dx,ax + zzz=0 + REPT 20 + mov eax,ds:[si+zzz+80] + mov ds:[si+zzz+80],ebx + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + sub ebx,01010101h + cmp bl,256-31 + jae @@3 + mov ebx,0e1e1e1e1h +@@3: add si,160 + add di,80 + dec cx + jmp @@1 diff --git a/COMAN/W1DTA.BIN b/COMAN/W1DTA.BIN new file mode 100644 index 0000000..540a1b0 Binary files /dev/null and b/COMAN/W1DTA.BIN differ diff --git a/COMAN/W2DTA.BIN b/COMAN/W2DTA.BIN new file mode 100644 index 0000000..ba535ec Binary files /dev/null and b/COMAN/W2DTA.BIN differ diff --git a/COMAN/WAVE.H b/COMAN/WAVE.H new file mode 100644 index 0000000..f4ca030 --- /dev/null +++ b/COMAN/WAVE.H @@ -0,0 +1,65 @@ +{0 \ +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \ +,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1 \ +,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3 \ +,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5 \ +,5,6,6,6,6,6,7,7,7,7,7,7,8,8,8,8 \ +,8,9,9,9,9,10,10,10,10,10,11,11,11,11,12,12 \ +,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16 \ +,16,16,17,17,17,18,18,18,18,19,19,19,19,20,20,20 \ +,21,21,21,21,22,22,22,23,23,23,23,24,24,24,24,25 \ +,25,25,26,26,26,26,27,27,27,27,28,28,28,29,29,29 \ +,29,30,30,30,30,30,31,31,31,31,32,32,32,32,33,33 \ +,33,33,33,34,34,34,34,34,34,35,35,35,35,35,35,36 \ +,36,36,36,36,36,36,37,37,37,37,37,37,37,37,37,37 \ +,37,37,37,37,37,37,38,38,38,38,38,37,37,37,37,37 \ +,37,37,37,37,37,37,37,37,37,36,36,36,36,36,36,35 \ +,35,35,35,35,34,34,34,34,33,33,33,33,32,32,32,31 \ +,31,31,30,30,30,29,29,28,28,28,27,27,26,26,25,25 \ +,24,24,23,23,22,22,21,21,20,20,19,18,18,17,16,16 \ +,15,14,14,13,12,12,11,10,10,9,8,7,6,6,5,4 \ +,3,2,2,1,0,0,-1,-2,-3,-4,-5,-6,-7,-7,-8,-9 \ +,-10,-11,-12,-13,-14,-15,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26 \ +,-27,-29,-30,-31,-32,-33,-35,-36,-37,-38,-39,-41,-42,-43,-44,-46 \ +,-47,-48,-49,-51,-52,-53,-55,-56,-57,-59,-60,-61,-63,-64,-65,-67 \ +,-68,-69,-71,-72,-74,-75,-76,-78,-79,-81,-82,-83,-85,-86,-88,-89 \ +,-91,-92,-93,-95,-96,-98,-99,-101,-102,-104,-105,-107,-108,-109,-111,-112 \ +,-114,-115,-117,-118,-120,-121,-123,-124,-126,-127,-128,-130,-131,-133,-134,-136 \ +,-137,-139,-140,-141,-143,-144,-146,-147,-149,-150,-151,-153,-154,-156,-157,-158 \ +,-160,-161,-162,-164,-165,-167,-168,-169,-170,-172,-173,-174,-176,-177,-178,-179 \ +,-181,-182,-183,-184,-186,-187,-188,-189,-190,-191,-193,-194,-195,-196,-197,-198 \ +,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-212,-213,-213 \ +,-214,-215,-216,-217,-217,-218,-219,-220,-220,-221,-222,-222,-223,-223,-224,-225 \ +,-225,-226,-226,-227,-227,-228,-228,-228,-229,-229,-229,-230,-230,-230,-230,-231 \ +,-231,-231,-231,-231,-231,-231,-232,-232,-232,-232,-232,-231,-231,-231,-231,-231 \ +,-231,-231,-230,-230,-230,-229,-229,-229,-228,-228,-227,-227,-226,-226,-225,-225 \ +,-224,-223,-223,-222,-221,-221,-220,-219,-218,-217,-216,-215,-215,-214,-213,-211 \ +,-210,-209,-208,-207,-206,-205,-203,-202,-201,-200,-198,-197,-195,-194,-192,-191 \ +,-189,-188,-186,-185,-183,-181,-180,-178,-176,-174,-172,-171,-169,-167,-165,-163 \ +,-161,-159,-157,-155,-153,-150,-148,-146,-144,-142,-139,-137,-135,-132,-130,-127 \ +,-125,-123,-120,-117,-115,-112,-110,-107,-104,-102,-99,-96,-93,-91,-88,-85 \ +,-82,-79,-76,-73,-70,-67,-64,-61,-58,-55,-52,-49,-45,-42,-39,-36 \ +,-32,-29,-26,-22,-19,-16,-12,-9,-5,-2,1,4,8,11,15,18 \ +,22,26,29,33,37,40,44,48,52,55,59,63,66,70,73,77 \ +,80,83,87,90,93,96,99,103,106,109,112,115,118,121,124,127 \ +,130,132,135,138,141,144,146,149,152,154,157,159,162,164,167,169 \ +,172,174,176,179,181,183,185,187,190,192,194,196,198,200,202,204 \ +,206,207,209,211,213,215,216,218,220,221,223,224,226,227,229,230 \ +,231,233,234,235,237,238,239,240,241,242,243,244,245,246,247,248 \ +,249,250,251,252,252,253,254,254,255,256,256,257,257,258,258,259 \ +,259,259,260,260,260,261,261,261,261,261,261,262,262,262,262,262 \ +,262,262,261,261,261,261,261,261,260,260,260,259,259,259,258,258 \ +,257,257,256,256,255,255,254,254,253,252,252,251,250,249,249,248 \ +,247,246,245,245,244,243,242,241,240,239,238,237,236,235,234,233 \ +,232,231,230,228,227,226,225,224,223,221,220,219,218,216,215,214 \ +,212,211,210,208,207,205,204,203,201,200,198,197,196,194,193,191 \ +,190,188,187,185,184,182,180,179,177,176,174,173,171,169,168,166 \ +,165,163,161,160,158,157,155,153,152,150,148,147,145,143,142,140 \ +,138,137,135,133,132,130,128,127,125,123,122,120,118,117,115,113 \ +,112,110,109,107,105,104,102,100,99,97,95,94,92,91,89,87 \ +,86,84,82,81,79,78,76,75,73,71,70,68,67,65,64,62 \ +,61,59,58,56,55,53,52,50,49,47,46,45,43,42,40,39 \ +,38,36,35,33,32,31,29,28,27,26,24,23,22,20,19,18 \ +,17,15,14,13,12,11,10,8,7,6,5,4,3,2,1}; diff --git a/COMAN/_COMBG.OBK b/COMAN/_COMBG.OBK new file mode 100644 index 0000000..7357094 Binary files /dev/null and b/COMAN/_COMBG.OBK differ diff --git a/COMAN/_W1DTA.OBJ b/COMAN/_W1DTA.OBJ new file mode 100644 index 0000000..be2c971 Binary files /dev/null and b/COMAN/_W1DTA.OBJ differ diff --git a/COMAN/_W1DTA1.OBJ b/COMAN/_W1DTA1.OBJ new file mode 100644 index 0000000..f5ca6d1 Binary files /dev/null and b/COMAN/_W1DTA1.OBJ differ diff --git a/COMAN/_W1DTA2.OBJ b/COMAN/_W1DTA2.OBJ new file mode 100644 index 0000000..9d2d335 Binary files /dev/null and b/COMAN/_W1DTA2.OBJ differ diff --git a/COMAN/_W2DTA.OBJ b/COMAN/_W2DTA.OBJ new file mode 100644 index 0000000..e8bcf5d Binary files /dev/null and b/COMAN/_W2DTA.OBJ differ diff --git a/COMAN/_W2DTA1.OBJ b/COMAN/_W2DTA1.OBJ new file mode 100644 index 0000000..5102f9c Binary files /dev/null and b/COMAN/_W2DTA1.OBJ differ diff --git a/COMAN/_W2DTA2.OBJ b/COMAN/_W2DTA2.OBJ new file mode 100644 index 0000000..cc549b5 Binary files /dev/null and b/COMAN/_W2DTA2.OBJ differ diff --git a/CREDITS/CRED.DSK b/CREDITS/CRED.DSK new file mode 100644 index 0000000..173f277 Binary files /dev/null and b/CREDITS/CRED.DSK differ diff --git a/CREDITS/CRED.PRJ b/CREDITS/CRED.PRJ new file mode 100644 index 0000000..5123765 Binary files /dev/null and b/CREDITS/CRED.PRJ differ diff --git a/CREDITS/FONA.INC b/CREDITS/FONA.INC new file mode 100644 index 0000000..c45d032 --- /dev/null +++ b/CREDITS/FONA.INC @@ -0,0 +1,3751 @@ + db 0,0,0,0,0,0,0,0,0,0,0,4,9,4,0 + db 0,0,0,0,9,9,9,9,9,9,8,5,2,0,0,0 + db 0,0,2,5,8,9,8,5,2,0,0,0,9,9,9,9 + db 9,9,8,5,2,0,0,0,9,9,9,9,9,9,9,9 + db 9,9,9,0,9,9,9,9,9,9,9,9,9,9,9,0 + db 0,0,2,5,8,9,8,5,2,0,0,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,0,0,0,0,0,0,7,9,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,0 + db 0,7,9,0,9,8,2,0,0,0,0,0,0,9,9,0 + db 0,0,2,5,8,9,8,5,2,0,0,0,9,9,9,9 + db 9,9,8,5,2,0,0,0,0,0,2,5,8,9,8,5 + db 2,0,0,0,9,9,9,9,9,9,8,5,2,0,0,0 + db 0,0,2,5,8,9,8,5,2,0,0,0,9,9,9,9 + db 9,9,9,9,9,9,0,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,8,2,0,0,0,0,0,2,8,9,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,6,0,0 + db 0,0,0,0,0,6,9,0,9,6,0,0,0,0,0,0 + db 0,6,9,0,9,9,9,9,9,9,9,9,9,9,9,0 + db 0,0,2,5,8,9,8,5,2,0,0,0,0,0,1,9 + db 9,0,0,0,0,0,2,5,8,9,8,5,2,0,0,0 + db 0,0,2,5,8,9,8,5,2,0,0,0,0,0,0,0 + db 4,9,8,0,9,9,0,0,9,9,9,9,9,9,9,9 + db 9,9,9,0,0,0,2,5,8,9,8,5,2,0,0,0 + db 9,9,9,9,9,9,9,9,9,9,9,0,0,0,2,5 + db 8,9,8,5,2,0,0,0,0,0,2,5,8,9,8,5 + db 2,0,0,0,0,0,0,0,0,0,0,0,0,6,9,0 + db 0,0,2,5,8,9,8,5,2,0,0,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,9,1,9,0,0,0,0,0,0,0,0 + db 0,0,0,2,5,8,9,9,0,0,0,0,0,9,9,8 + db 5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,5,9,5,0,0,0,0,0 + db 9,9,9,9,9,9,9,9,6,3,0,0,0,3,6,9 + db 9,9,9,9,6,3,0,0,9,9,9,9,9,9,9,9 + db 6,3,0,0,9,9,9,9,9,9,9,9,9,9,9,0 + db 9,9,9,9,9,9,9,9,9,9,9,0,0,3,6,9 + db 9,9,9,9,6,3,0,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,9,9,0,9,9,0,0 + db 0,0,0,0,4,9,9,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,4,0,0,0,0,0,4,9,9,0 + db 9,9,4,0,0,0,0,0,0,9,9,0,0,3,6,9 + db 9,9,9,9,6,3,0,0,9,9,9,9,9,9,9,9 + db 6,3,0,0,0,3,6,9,9,9,9,9,6,3,0,0 + db 9,9,9,9,9,9,9,9,6,3,0,0,0,3,6,9 + db 9,9,9,9,6,3,0,0,9,9,9,9,9,9,9,9 + db 9,9,0,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 8,9,3,0,0,0,0,0,3,9,8,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,8,2,0,0,0,0,0 + db 2,8,9,0,9,8,2,0,0,0,0,0,2,8,9,0 + db 9,9,9,9,9,9,9,9,9,9,9,0,0,3,6,9 + db 9,9,9,9,6,3,0,0,0,0,4,9,9,0,0,0 + db 0,3,6,9,9,9,9,9,6,3,0,0,0,3,6,9 + db 9,9,9,9,6,3,0,0,0,0,0,0,6,9,6,0 + db 9,9,0,0,9,9,9,9,9,9,9,9,9,9,9,0 + db 0,3,6,9,9,9,9,9,6,3,0,0,9,9,9,9 + db 9,9,9,9,9,9,9,0,0,3,6,9,9,9,9,9 + db 6,3,0,0,0,3,6,9,9,9,9,9,6,3,0,0 + db 0,0,0,0,0,0,0,0,2,8,9,0,0,3,6,9 + db 9,9,9,9,6,3,0,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,7,0,7,0,0,0,0,0,0,0,0,0,0,3,6 + db 9,9,9,9,0,0,0,0,0,9,9,9,9,6,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,6,9,6,0,0,0,0,0,9,9,9,9 + db 9,9,9,9,9,5,2,0,2,5,9,9,9,9,9,9 + db 9,5,2,0,9,9,9,9,9,9,9,9,9,5,2,0 + db 9,9,9,9,9,9,9,9,9,9,9,0,9,9,9,9 + db 9,9,9,9,9,9,9,0,2,5,9,9,9,9,9,9 + db 9,5,2,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,0,0,0 + db 7,9,9,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,7,0,0,0,0,0,7,9,9,0,9,9,6,0 + db 0,0,0,0,0,9,9,0,2,5,9,9,9,9,9,9 + db 9,5,2,0,9,9,9,9,9,9,9,9,9,5,2,0 + db 2,5,9,9,9,9,9,9,9,5,2,0,9,9,9,9 + db 9,9,9,9,9,5,2,0,2,5,9,9,9,9,9,9 + db 9,5,2,0,9,9,9,9,9,9,9,9,9,9,0,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,7,9,4,0 + db 0,0,0,0,4,9,7,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,4,0,0,0,0,0,4,9,9,0 + db 9,9,4,0,0,0,0,0,4,9,9,0,9,9,9,9 + db 9,9,9,9,9,9,9,0,2,5,9,9,9,9,9,9 + db 9,5,2,0,1,4,7,9,9,0,0,0,2,5,9,9 + db 9,9,9,9,9,5,2,0,2,5,9,9,9,9,9,9 + db 9,5,2,0,0,0,0,2,8,9,4,0,9,9,0,0 + db 9,9,9,9,9,9,9,9,9,9,9,0,2,5,9,9 + db 9,9,9,9,9,5,2,0,9,9,9,9,9,9,9,9 + db 9,9,9,0,2,5,9,9,9,9,9,9,9,5,2,0 + db 2,5,9,9,9,9,9,9,9,5,2,0,0,0,0,0 + db 0,0,0,0,4,9,9,0,2,5,9,9,9,9,9,9 + db 9,5,2,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5 + db 0,0,0,0,0,0,0,0,0,2,5,9,9,9,9,9 + db 0,0,0,0,0,9,9,9,9,9,5,2,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 + db 7,9,7,1,0,0,0,0,9,9,0,0,0,3,6,8 + db 9,8,4,0,4,8,9,8,6,3,6,8,9,8,4,0 + db 9,9,0,0,0,3,6,8,9,8,4,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,4,8,9,8,6,3,6,8,9,8,4,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,0,0,0,0,4,9,9,7,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,9,9,9,4 + db 0,0,0,4,9,9,9,0,9,9,8,2,0,0,0,0 + db 0,9,9,0,4,8,9,8,6,3,6,8,9,8,4,0 + db 9,9,0,0,0,3,6,8,9,8,4,0,4,8,9,8 + db 6,3,6,8,9,8,4,0,9,9,0,0,0,3,6,8 + db 9,8,4,0,4,8,9,8,6,3,6,8,9,8,4,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,6,9,5,0,0,0,0,0 + db 5,9,6,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 8,9,6,0,0,0,0,0,6,9,8,0,8,9,6,0 + db 0,0,0,0,6,9,8,0,0,0,0,0,0,0,0,0 + db 6,9,8,0,4,8,9,8,6,3,6,8,9,8,4,0 + db 9,9,9,9,9,0,0,0,4,8,9,8,6,3,6,8 + db 9,8,4,0,4,8,9,8,6,3,6,8,9,8,4,0 + db 0,0,0,4,9,8,2,0,9,9,0,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,4,8,9,8,6,3,6,8 + db 9,8,4,0,0,0,0,0,0,0,0,0,0,9,9,0 + db 4,8,9,8,6,3,6,8,9,8,4,0,4,8,9,8 + db 6,3,6,8,9,8,4,0,0,0,0,0,0,0,0,0 + db 6,9,8,0,4,8,9,8,6,3,6,8,9,8,4,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0 + db 0,0,0,0,0,4,8,9,8,6,3,0,0,0,0,0 + db 0,0,3,6,8,9,8,4,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,2,8,9,8,2 + db 0,0,0,0,9,9,0,0,0,0,1,5,8,9,6,0 + db 6,9,8,5,1,0,1,5,8,9,6,0,9,9,0,0 + db 0,0,1,5,8,9,6,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 6,9,8,5,1,0,1,5,8,9,6,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,0,0,0,0,7,9,9,4,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,9,9,9,7,0,0,0,7 + db 9,9,9,0,9,9,9,4,0,0,0,0,0,9,9,0 + db 6,9,8,5,1,0,1,5,8,9,6,0,9,9,0,0 + db 0,0,1,5,8,9,6,0,6,9,8,5,1,0,1,5 + db 8,9,6,0,9,9,0,0,0,0,1,5,8,9,6,0 + db 6,9,8,5,1,0,1,5,8,9,6,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,5,9,6,0,0,0,0,0,6,9,5,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,6,9,8,2 + db 0,0,0,2,8,9,6,0,6,9,8,2,0,0,0,2 + db 8,9,6,0,0,0,0,0,0,0,0,2,8,9,6,0 + db 6,9,8,5,1,0,1,5,8,9,6,0,9,9,9,9 + db 9,0,0,0,6,9,8,5,1,0,1,5,8,9,6,0 + db 6,9,8,5,1,0,1,5,8,9,6,0,0,0,0,6 + db 9,6,0,0,9,9,0,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,6,9,8,5,1,0,1,5,8,9,6,0 + db 0,0,0,0,0,0,0,0,2,9,9,0,6,9,8,5 + db 1,0,1,5,8,9,6,0,6,9,8,5,1,0,1,5 + db 8,9,6,0,0,0,0,0,0,0,0,2,8,9,6,0 + db 6,9,8,5,1,0,1,5,8,9,6,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,6,9,8,5,1,0,0,0,0,0,0,0,0,0,1 + db 5,8,9,6,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,3,9,8,9,3,0,0,0,0 + db 9,9,0,0,0,0,0,1,6,9,8,0,8,9,6,1 + db 0,0,0,1,6,9,8,0,9,9,0,0,0,0,0,1 + db 6,9,8,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,8,9,6,1 + db 0,0,0,1,6,9,8,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,9,9,0,9,9,0,0 + db 0,0,4,9,9,7,0,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,9,9,4,0,4,9,9,9,9,0 + db 9,9,9,6,0,0,0,0,0,9,9,0,8,9,6,1 + db 0,0,0,1,6,9,8,0,9,9,0,0,0,0,0,1 + db 6,9,8,0,8,9,6,1,0,0,0,1,6,9,8,0 + db 9,9,0,0,0,0,0,1,6,9,8,0,8,9,6,1 + db 0,0,0,1,6,9,8,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 4,9,7,1,0,0,0,1,7,9,4,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,4,9,9,4,0,0,0,4 + db 9,9,4,0,4,9,9,4,0,0,0,4,9,9,4,0 + db 0,0,0,0,0,0,0,4,9,9,4,0,8,9,6,1 + db 0,0,0,1,6,9,8,0,0,0,0,9,9,0,0,0 + db 8,9,6,1,0,0,0,1,6,9,8,0,8,9,6,1 + db 0,0,0,1,6,9,8,0,0,0,2,8,9,4,0,0 + db 9,9,0,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 8,9,6,1,0,0,0,1,6,9,8,0,0,0,0,0 + db 0,0,0,0,4,9,9,0,8,9,6,1,0,0,0,1 + db 6,9,8,0,8,9,6,1,0,0,0,1,6,9,8,0 + db 0,0,0,0,0,0,0,4,9,9,4,0,8,9,6,1 + db 0,0,0,1,6,9,8,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,8,9,6 + db 1,0,0,0,0,0,0,0,0,0,0,0,1,6,9,8 + db 0,0,0,0,0,0,0,0,0,9,9,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,4,9,7,9,4,0,0,0,0,9,9,0,0 + db 0,0,0,0,4,9,9,0,9,9,4,0,0,0,0,0 + db 4,9,9,0,9,9,0,0,0,0,0,0,4,9,9,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,9,9,4,0,0,0,0,0 + db 4,9,9,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,0,7,9 + db 9,4,0,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,7,9,7,0,7,9,7,9,9,0,9,9,9,8 + db 2,0,0,0,0,9,9,0,9,9,4,0,0,0,0,0 + db 4,9,9,0,9,9,0,0,0,0,0,0,4,9,9,0 + db 9,9,4,0,0,0,0,0,4,9,9,0,9,9,0,0 + db 0,0,0,0,4,9,9,0,9,9,4,0,0,0,0,0 + db 4,9,9,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,3,9,8,2 + db 0,0,0,2,8,9,3,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,2,8,9,6,0,0,0,6,9,8,2,0 + db 2,8,9,6,0,0,0,6,9,8,2,0,0,0,0,0 + db 0,0,0,6,9,8,2,0,9,9,4,0,0,0,0,0 + db 4,9,9,0,0,0,0,9,9,0,0,0,9,9,4,0 + db 0,0,0,0,4,9,9,0,9,9,4,0,0,0,0,0 + db 4,9,9,0,0,0,4,9,8,2,0,0,9,9,0,0 + db 9,9,1,0,0,0,0,0,0,0,0,0,9,9,4,0 + db 0,0,0,0,4,9,9,0,0,0,0,0,0,0,0,0 + db 6,9,8,0,9,9,4,0,0,0,0,0,4,9,9,0 + db 9,9,4,0,0,0,0,0,4,9,9,0,0,0,0,0 + db 0,0,0,6,9,8,2,0,9,9,4,0,0,0,0,0 + db 4,9,9,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,9,9,4,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,4,9,9,0,0,0,0 + db 0,0,0,0,0,9,9,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5 + db 9,6,9,5,0,0,0,0,9,9,0,0,0,0,0,0 + db 3,9,9,0,9,9,3,0,0,0,0,0,2,9,9,0 + db 9,9,0,0,0,0,0,0,2,9,9,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,2,0,0,0,0,0,2,9,9,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,0,0,4,9,9,7,0,0,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,9,9,4,9 + db 9,4,9,9,4,9,9,0,9,9,9,9,4,0,0,0 + db 0,9,9,0,9,9,3,0,0,0,0,0,3,9,9,0 + db 9,9,0,0,0,0,0,0,3,9,9,0,9,9,3,0 + db 0,0,0,0,3,9,9,0,9,9,0,0,0,0,0,0 + db 3,9,9,0,9,9,2,0,0,0,0,0,2,9,9,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,2,8,9,3,0,0,0,3 + db 9,8,2,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 0,6,9,8,2,0,2,8,9,6,0,0,0,6,9,8 + db 2,0,2,8,9,6,0,0,0,0,0,0,0,0,2,8 + db 9,6,0,0,9,9,3,0,0,0,0,0,3,9,9,0 + db 0,0,0,9,9,0,0,0,9,9,2,0,0,0,0,0 + db 2,9,9,0,9,9,2,0,0,0,0,0,3,9,9,0 + db 0,0,6,9,6,0,0,0,9,9,0,0,9,9,2,0 + db 0,0,0,0,0,0,0,0,9,9,3,0,0,0,0,0 + db 2,9,9,0,0,0,0,0,0,0,0,2,8,9,6,0 + db 9,9,3,0,0,0,0,0,3,9,9,0,9,9,2,0 + db 0,0,0,0,3,9,9,0,0,0,0,0,0,0,2,8 + db 9,6,0,0,9,9,2,0,0,0,0,0,2,9,9,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,9,9,2,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,2,9,9,0,0,0,0,0,0,0,0 + db 0,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,6,9,5,9,6 + db 0,0,0,0,9,9,0,0,0,0,0,0,2,9,9,0 + db 9,9,2,0,0,0,0,0,1,9,9,0,9,9,0,0 + db 0,0,0,0,1,9,9,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,1,0,0,0,0,0,1,9,9,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,0,0,7,9,9,4,0,0,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,9,9,0,7,9,7,9,7 + db 0,9,9,0,9,9,8,9,6,0,0,0,0,9,9,0 + db 9,9,2,0,0,0,0,0,2,9,9,0,9,9,0,0 + db 0,0,0,0,2,9,9,0,9,9,2,0,0,0,0,0 + db 2,9,9,0,9,9,0,0,0,0,0,0,2,9,9,0 + db 9,9,2,0,0,0,0,0,1,9,9,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,1,7,9,4,0,0,0,4,9,7,1,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,0,4,9,9 + db 4,0,4,9,9,4,0,0,0,4,9,9,4,0,4,9 + db 9,4,0,0,0,0,0,0,0,0,4,9,9,4,0,0 + db 9,9,2,0,0,0,0,0,2,9,9,0,0,0,0,9 + db 9,0,0,0,9,9,1,0,0,0,0,0,1,9,9,0 + db 9,9,1,0,0,0,0,0,4,9,9,0,0,2,8,9 + db 4,0,0,0,9,9,0,0,9,9,4,0,0,0,0,0 + db 0,0,0,0,9,9,2,0,0,0,0,0,1,9,9,0 + db 0,0,0,0,0,0,0,4,9,9,4,0,9,9,4,0 + db 0,0,0,0,4,9,9,0,9,9,1,0,0,0,0,0 + db 2,9,9,0,0,0,0,0,0,0,4,9,9,4,0,0 + db 9,9,1,0,0,0,0,0,1,9,9,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,5,7,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,9,9,1,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,1,9,9,0,0,0,0,0,0,0,0,0,9,9,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,1,7,9,4,9,7,1,0,0,0 + db 9,9,0,0,0,0,0,0,3,9,9,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,9,9,0,9,9,0,0 + db 4,9,9,7,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,0,4,9,9,9,4,0,9,9,0 + db 9,9,6,9,8,2,0,0,0,9,9,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,0,0,0 + db 3,9,9,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,0,0,0,0,0,3,9,9,0,9,9,4,0 + db 0,0,0,0,0,9,9,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 0,6,9,5,0,0,0,5,9,6,0,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,0,2,8,9,6,0,6,9 + db 8,2,0,0,0,2,8,9,6,0,6,9,8,2,0,0 + db 0,0,0,0,0,0,6,9,8,2,0,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,0,0,0,9,9,0,0,0 + db 9,9,0,0,0,0,0,0,1,9,9,0,9,9,0,0 + db 0,0,0,0,6,9,9,0,0,4,9,8,2,0,0,0 + db 9,9,0,0,8,9,6,1,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,0,0,0,0 + db 0,0,0,6,9,8,2,0,9,9,6,0,0,0,0,0 + db 6,9,9,0,9,9,2,0,0,0,0,0,0,9,9,0 + db 0,0,0,0,0,0,6,9,8,2,0,0,9,9,0,0 + db 0,0,0,0,1,9,9,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,8,9,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9 + db 0,0,0,0,0,0,0,0,0,9,9,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,2,8,9,3,9,8,2,0,0,0,9,9,0,0 + db 0,0,0,0,4,9,9,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,7,9,9,4 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,7,9,7,0,0,9,9,0,9,9,4,9 + db 9,4,0,0,0,9,9,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,0,0,0,0,0,4,9,9,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,0,0 + db 0,0,0,0,4,9,9,0,8,9,6,1,0,0,0,0 + db 0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,0,5,9,6 + db 0,0,0,6,9,5,0,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,0,0,6,9,8,2,8,9,6,0,0,0 + db 0,0,6,9,8,2,8,9,6,0,0,0,0,0,0,0 + db 0,2,8,9,6,0,0,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,0,0,0,9,9,0,0,0,0,0,0,0 + db 0,0,0,0,2,9,9,0,0,0,0,0,0,0,0,1 + db 8,9,8,0,0,6,9,6,0,0,0,0,9,9,0,0 + db 6,9,8,5,1,0,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,8 + db 9,6,0,0,8,9,8,1,0,0,0,1,8,9,8,0 + db 9,9,4,0,0,0,0,0,0,9,9,0,0,0,0,0 + db 0,2,8,9,6,0,0,0,0,0,0,0,0,0,0,0 + db 2,9,9,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 6,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,9,9,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0 + db 0,0,0,0,0,9,9,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,9 + db 8,2,8,9,3,0,0,0,9,9,0,0,0,0,0,1 + db 6,9,8,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,4,9,9,7,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,9,9,0,0 + db 4,9,4,0,0,9,9,0,9,9,2,8,9,6,0,0 + db 0,9,9,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,0,0,0,0,1,6,9,8,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,0,0,1 + db 6,9,8,0,6,9,8,5,1,0,0,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,0,4,9,7,1,0,1,7 + db 9,4,0,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 0,0,4,9,9,4,9,9,4,0,0,0,0,0,4,9 + db 9,4,9,9,4,0,0,0,0,0,0,0,0,4,9,9 + db 4,0,0,0,9,9,0,0,0,1,0,0,0,9,9,0 + db 0,0,0,9,9,0,0,0,0,0,0,0,0,0,0,0 + db 4,9,9,0,0,0,0,0,0,0,1,5,9,9,6,0 + db 2,8,9,4,0,0,0,0,9,9,0,0,4,8,9,8 + db 6,3,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,4,9,9,4,0,0 + db 6,9,9,5,1,0,1,5,9,9,6,0,8,9,6,1 + db 0,0,0,0,0,9,9,0,0,0,0,0,0,4,9,9 + db 4,0,0,0,0,0,0,0,0,0,0,0,4,9,9,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,9,9,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,9,9,0,0,0,0,0,0,0,0 + db 0,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,4,9,7,1,7,9 + db 4,0,0,0,9,9,0,0,0,0,1,5,8,9,6,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,7,9,9,4,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,9,9,0,0,0,7,0,0 + db 0,9,9,0,9,9,0,6,9,8,2,0,0,9,9,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,0,0 + db 0,0,1,5,8,9,6,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,0,0,0,1,5,8,9,6,0 + db 4,8,9,8,6,3,0,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,0,3,9,8,2,0,2,8,9,3,0,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,0,0,2,8 + db 9,6,9,8,2,0,0,0,0,0,2,8,9,6,9,8 + db 2,0,0,0,0,0,0,0,0,6,9,8,2,0,0,0 + db 9,9,0,0,1,4,1,0,0,9,9,0,0,0,0,9 + db 9,0,0,0,0,0,0,0,0,0,0,1,6,9,8,0 + db 0,0,0,0,1,3,6,9,9,8,4,0,4,9,8,2 + db 0,0,0,0,9,9,0,0,2,5,9,9,9,7,4,1 + db 0,0,0,0,9,9,9,9,9,9,8,5,2,0,0,0 + db 0,0,0,0,0,0,6,9,8,2,0,0,4,8,9,9 + db 6,3,6,9,9,8,4,0,6,9,8,5,1,0,0,0 + db 0,9,9,0,0,0,0,0,0,6,9,8,2,0,0,0 + db 0,0,0,0,0,0,0,1,6,9,8,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,9,9,0,0,0,0,0,9,9,9,9,9,9,9 + db 9,9,9,0,0,9,9,9,9,9,9,9,9,9,9,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,5,9,6,0,6,9,5,0,0,0 + db 9,9,0,0,0,3,6,9,9,8,4,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,9,9,9,9,9,9,9,9,0,0 + db 9,9,9,9,9,9,9,9,9,9,0,0,9,9,0,0 + db 9,9,9,9,9,9,9,0,9,9,9,9,9,9,9,9 + db 9,9,9,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,9,9,0,9,9,7,9 + db 9,7,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,4,0,0,0,9,9,0 + db 9,9,0,4,9,9,4,0,0,9,9,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,3,6,8 + db 9,8,4,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,0,0,3,6,8,9,8,4,0,2,5,9,9 + db 9,7,4,1,0,0,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 0,2,8,9,3,0,3,9,8,2,0,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,0,0,0,6,9,8,9,6 + db 0,0,0,0,0,0,0,6,9,8,9,6,0,0,0,0 + db 0,0,0,0,2,8,9,6,0,0,0,0,9,9,0,0 + db 2,7,2,0,0,9,9,0,0,0,0,9,9,0,0,0 + db 0,0,0,0,0,0,1,5,8,9,6,0,0,0,0,0 + db 9,9,9,9,9,5,2,0,6,9,9,9,9,9,9,9 + db 9,9,9,0,0,3,6,9,9,9,8,5,2,0,0,0 + db 9,9,9,9,9,9,9,9,6,3,0,0,0,0,0,0 + db 0,0,8,9,6,0,0,0,2,5,9,9,9,9,9,9 + db 9,5,2,0,4,8,9,8,6,3,1,0,0,9,9,0 + db 0,0,0,0,2,8,9,6,0,0,0,0,0,0,0,0 + db 0,0,1,4,8,9,6,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9 + db 0,0,0,0,0,9,9,9,9,9,9,9,9,9,9,0 + db 0,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,6,9,5,0,5,9,6,0,0,0,9,9,9,9 + db 9,9,9,9,9,5,2,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 9,9,9,9,9,9,9,9,9,9,0,0,9,9,9,9 + db 9,9,9,9,9,9,0,0,9,9,0,0,9,9,9,9 + db 9,9,9,0,9,9,9,9,9,9,9,9,9,9,9,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,9,9,0,9,9,9,9,9,4,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,0,2 + db 8,9,6,0,0,9,9,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,9,9,9,9,9,9,9,5,2,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,9,9 + db 9,9,9,9,9,5,2,0,0,3,6,9,9,9,8,5 + db 2,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,0,1,7,9 + db 4,0,4,9,7,1,0,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,0,0,0,4,9,9,9,4,0,0,0,0 + db 0,0,0,4,9,9,9,4,0,0,0,0,0,0,0,0 + db 4,9,9,4,0,0,0,0,9,9,0,0,3,9,3,0 + db 0,9,9,0,0,0,0,9,9,0,0,0,0,0,0,0 + db 0,3,6,8,9,8,4,0,0,0,0,0,9,9,9,9 + db 6,3,0,0,8,9,9,9,9,9,9,9,9,9,9,0 + db 0,0,2,5,8,9,9,9,6,3,0,0,9,9,9,9 + db 9,9,9,9,9,5,2,0,0,0,0,0,0,0,9,9 + db 4,0,0,0,0,3,6,9,9,9,9,9,6,3,0,0 + db 2,5,9,9,9,9,9,9,9,9,9,0,0,0,0,0 + db 4,9,9,4,0,0,0,0,0,0,0,0,0,2,5,8 + db 9,8,4,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,9,9,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0 + db 0,9,9,9,9,9,9,9,9,9,9,0,0,9,9,9 + db 9,9,9,9,9,9,9,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,7,9 + db 4,0,4,9,7,1,0,0,9,9,9,9,9,9,9,9 + db 6,3,0,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,9,9 + db 9,9,9,9,9,9,0,0,9,9,9,9,9,9,9,9 + db 9,9,0,0,9,9,0,0,9,9,9,9,9,9,9,0 + db 9,9,9,9,9,9,9,9,9,9,9,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,9,9,0,9,9,9,9,9,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,6,9,8,2 + db 0,9,9,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 9,9,9,9,9,9,9,9,6,3,0,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,9,9,9,9,9,9 + db 6,3,0,0,0,0,2,5,8,9,9,9,6,3,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,0,0,6,9,5,0,5,9 + db 6,0,0,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 0,0,0,4,9,9,9,4,0,0,0,0,0,0,0,2 + db 8,9,8,2,0,0,0,0,0,0,0,0,6,9,8,2 + db 0,0,0,0,9,9,0,0,3,9,3,0,0,9,9,0 + db 0,0,0,9,9,0,0,0,0,0,0,1,4,7,9,9 + db 9,5,2,0,0,0,0,0,9,9,9,9,9,5,2,0 + db 9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,1 + db 4,7,9,9,9,5,2,0,9,9,0,0,1,3,6,8 + db 9,8,4,0,0,0,0,0,0,0,9,9,2,0,0,0 + db 2,5,9,9,9,9,9,9,9,5,2,0,0,3,6,9 + db 9,9,9,9,9,9,9,0,0,0,0,0,6,9,8,2 + db 0,0,0,0,0,0,0,0,3,6,9,9,9,5,2,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,9,9,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,9,9,0,0,0,0,0,0,0,0 + db 0,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,2,8,9,3,0,3,9 + db 8,2,0,0,9,9,9,9,9,9,9,9,9,5,2,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0 + db 9,9,9,9,9,4,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,0,4,9,9,4,0,9,9,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,9,9 + db 9,9,8,5,2,0,0,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,9,9,9,9,8,5,2,0,0,0 + db 0,0,0,1,4,7,9,9,9,5,2,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,0,0,5,9,6,0,6,9,5,0,0,0 + db 9,9,0,0,0,4,0,0,0,9,9,0,0,0,0,6 + db 9,8,9,6,0,0,0,0,0,0,0,2,8,9,6,0 + db 0,0,0,0,0,0,0,2,8,9,6,0,0,0,0,0 + db 9,9,0,0,2,7,2,0,0,9,9,0,0,0,0,9 + db 9,0,0,0,0,0,2,5,8,9,9,9,6,3,0,0 + db 0,0,0,0,1,3,6,9,9,8,4,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,3,6,8 + db 9,8,4,0,9,9,0,0,0,0,1,5,8,9,6,0 + db 0,0,0,0,0,0,9,9,0,0,0,0,4,8,9,9 + db 6,3,6,9,9,8,4,0,0,0,2,5,8,9,9,9 + db 9,9,9,0,0,0,0,2,8,9,6,0,0,0,0,0 + db 0,0,0,2,5,9,9,9,6,3,0,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,9,9,0,0,0,0,0,0,0,0,0,9,9,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,3,9,8,2,0,2,8,9,3,0,0 + db 9,9,0,0,0,3,6,9,9,8,4,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,9,9,0,9,9,7,9 + db 9,7,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,0,2,8,9,6,0,9,9,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 9,9,7,9,9,7,0,0,0,0,0,0,0,0,0,0 + db 0,3,6,8,9,8,4,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 0,0,4,9,7,1,7,9,4,0,0,0,9,9,0,0 + db 0,7,0,0,0,9,9,0,0,0,2,8,9,6,9,8 + db 2,0,0,0,0,0,0,4,9,9,4,0,0,0,0,0 + db 0,0,0,4,9,9,4,0,0,0,0,0,9,9,0,0 + db 1,4,1,0,0,9,9,0,0,0,0,9,9,0,0,0 + db 0,3,6,9,9,9,8,5,2,0,0,0,0,0,0,0 + db 0,0,1,5,8,9,6,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,0,1,5,8,9,6,0 + db 9,9,0,0,0,0,0,1,6,9,8,0,0,0,0,0 + db 0,0,9,9,0,0,0,0,6,9,8,5,1,0,1,5 + db 8,9,6,0,0,0,0,0,0,0,0,0,0,9,9,0 + db 0,0,0,4,9,9,4,0,0,0,0,0,0,0,0,4 + db 8,9,8,6,2,0,0,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9 + db 0,0,0,0,0,0,0,0,0,9,9,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,4,9,7,1,0,1,7,9,4,0,0,9,9,0,0 + db 0,0,1,5,9,9,6,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,7,9,9,4,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,0,0 + db 0,6,9,8,2,9,9,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,0,7 + db 9,9,4,0,0,0,0,0,0,0,0,0,0,0,1,5 + db 8,9,6,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,0,0,3,9 + db 8,2,8,9,3,0,0,0,9,9,0,0,4,9,4,0 + db 0,9,9,0,0,0,4,9,9,4,9,9,4,0,0,0 + db 0,0,0,6,9,8,2,0,0,0,0,0,0,0,0,6 + db 9,8,2,0,0,0,0,0,9,9,0,0,0,1,0,0 + db 0,9,9,0,0,0,0,9,9,0,0,0,2,5,9,9 + db 9,7,4,1,0,0,0,0,0,0,0,0,0,0,0,1 + db 6,9,8,0,0,0,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,0,0,1,6,9,8,0,9,9,0,0 + db 0,0,0,0,4,9,9,0,0,0,0,0,0,0,9,9 + db 0,0,0,0,8,9,6,1,0,0,0,1,6,9,8,0 + db 0,0,0,0,0,0,0,0,0,9,9,0,0,0,0,6 + db 9,8,2,0,0,0,0,0,0,0,0,6,9,8,5,1 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,9,9,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,9,9,0,0,0,0 + db 0,0,0,0,0,9,9,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,5,9,9 + db 9,9,9,9,9,5,0,0,9,9,0,0,0,0,0,1 + db 8,9,8,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,4,9,9,7,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,4,9,9 + db 4,9,9,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,4,9,9,7,0 + db 0,0,0,0,0,0,0,0,0,0,0,1,6,9,8,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,0,0,2,8,9,3,9,8 + db 2,0,0,0,9,9,0,0,7,9,7,0,0,9,9,0 + db 0,0,6,9,8,2,8,9,6,0,0,0,0,0,2,8 + db 9,6,0,0,0,0,0,0,0,0,2,8,9,6,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 0,0,0,9,9,0,0,0,4,8,9,8,6,3,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,4,9,9,0 + db 0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,4,9,9,0,9,9,0,0,0,0,0,0 + db 2,9,9,0,0,0,0,0,0,0,9,9,0,0,0,0 + db 9,9,4,0,0,0,0,0,4,9,9,0,0,0,0,0 + db 0,0,0,0,0,9,9,0,0,0,2,8,9,6,0,0 + db 0,0,0,0,0,0,0,8,9,6,1,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,9,9,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,9,9,0,0,0,0,0,0,0,0 + db 0,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,6,9,9,9,9,9,9 + db 9,6,0,0,9,9,0,0,0,0,0,0,6,9,9,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,0,7,9,9,4,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,0,0,2,8,9,6,9,9,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,0,7,9,9,4,0,0,0,0 + db 9,9,0,0,0,0,0,0,4,9,9,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,0,0,1,7,9,4,9,7,1,0,0,0 + db 9,9,0,4,9,9,9,4,0,9,9,0,0,2,8,9 + db 6,0,6,9,8,2,0,0,0,0,4,9,9,4,0,0 + db 0,0,0,0,0,0,4,9,9,4,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,0,0,0,9 + db 9,0,0,0,6,9,8,5,1,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,3,9,9,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,9,9,0,0,0,0,0,0 + db 2,9,9,0,9,9,0,0,0,0,0,0,1,9,9,0 + db 0,0,0,0,0,0,9,9,0,0,0,0,9,9,3,0 + db 0,0,0,0,3,9,9,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,0,0,4,9,9,4,0,0,0,0,0,0 + db 0,0,0,9,9,4,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,5,7,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,9,9,0,0,0,0,0,0,0,0,0,9,9,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,1,7,9,9,9,9,9,9,9,7,1,0 + db 9,9,0,0,0,0,0,0,4,9,9,0,9,9,2,0 + db 0,0,0,0,1,9,9,0,9,9,0,0,0,0,0,0 + db 1,9,9,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,9,9,1,0 + db 0,0,0,0,1,9,9,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,2,0,0,0,0,0,2,9,9,0,9,9,0,0 + db 4,9,9,7,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,0,0,0,6,9,8,9,9,0,9,9,2,0 + db 0,0,0,0,2,9,9,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,2,0,0,0,0,0,2,9,9,0 + db 9,9,0,0,4,9,9,7,0,0,0,0,9,9,2,0 + db 0,0,0,0,2,9,9,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,9,9,2,0,0,0,0,0,2,9,9,0 + db 0,0,0,6,9,5,9,6,0,0,0,0,9,9,0,7 + db 9,7,9,7,0,9,9,0,0,4,9,9,4,0,4,9 + db 9,4,0,0,0,0,6,9,8,2,0,0,0,0,0,0 + db 0,0,6,9,8,2,0,0,0,0,0,0,9,9,2,0 + db 0,0,0,0,2,9,9,0,0,0,0,9,9,0,0,0 + db 8,9,6,1,0,0,0,0,0,0,0,0,9,9,1,0 + db 0,0,0,0,2,9,9,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,9,9,1,0,0,0,0,0,1,9,9,0 + db 9,9,2,0,0,0,0,0,1,9,9,0,0,0,0,0 + db 0,0,9,9,0,0,0,0,9,9,2,0,0,0,0,0 + db 2,9,9,0,9,9,1,0,0,0,0,0,2,9,9,0 + db 0,0,6,9,8,2,0,0,0,0,0,0,0,0,0,9 + db 9,2,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,8,9,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,1 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,9,9 + db 0,0,0,0,0,0,0,0,0,9,9,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 2,8,9,3,0,0,0,3,9,8,2,0,9,9,0,0 + db 0,0,0,0,3,9,9,0,9,9,3,0,0,0,0,0 + db 2,9,9,0,9,9,0,0,0,0,0,0,2,9,9,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,9,9,2,0,0,0,0,0 + db 2,9,9,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,9,9,3,0 + db 0,0,0,0,3,9,9,0,9,9,0,0,0,7,9,9 + db 4,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,0,0 + db 0,0,4,9,9,9,9,0,9,9,3,0,0,0,0,0 + db 3,9,9,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,3,0,0,0,0,0,3,9,9,0,9,9,0,0 + db 0,7,9,9,4,0,0,0,9,9,3,0,0,0,0,0 + db 2,9,9,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 9,9,3,0,0,0,0,0,3,9,9,0,0,0,0,5 + db 9,6,9,5,0,0,0,0,9,9,4,9,9,4,9,9 + db 4,9,9,0,0,6,9,8,2,0,2,8,9,6,0,0 + db 0,2,8,9,6,0,0,0,0,0,0,0,0,2,8,9 + db 6,0,0,0,0,0,0,0,9,9,3,0,0,0,0,0 + db 3,9,9,0,0,0,0,9,9,0,0,0,9,9,4,0 + db 0,0,0,0,0,0,0,0,9,9,2,0,0,0,0,0 + db 3,9,9,0,0,0,0,0,0,0,0,0,9,9,0,0 + db 9,9,2,0,0,0,0,0,2,9,9,0,9,9,3,0 + db 0,0,0,0,2,9,9,0,0,0,0,0,0,0,9,9 + db 0,0,0,0,9,9,3,0,0,0,0,0,3,9,9,0 + db 9,9,2,0,0,0,0,0,3,9,9,0,0,2,8,9 + db 6,0,0,0,0,0,0,0,0,0,0,9,9,1,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 6,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,9,9,2,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,2,9,9,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,3,9,8,2 + db 0,0,0,2,8,9,3,0,9,9,0,0,0,0,0,0 + db 4,9,9,0,9,9,4,0,0,0,0,0,4,9,9,0 + db 9,9,0,0,0,0,0,0,4,9,9,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,4,0,0,0,0,0,4,9,9,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,9,9,4,0,0,0,0,0 + db 4,9,9,0,9,9,0,0,0,4,9,9,7,0,0,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,0,2,8 + db 9,9,9,0,9,9,4,0,0,0,0,0,4,9,9,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,9,9,4,0 + db 0,0,2,0,4,9,9,0,9,9,0,0,0,4,9,9 + db 7,0,0,0,9,9,4,0,0,0,0,0,4,9,9,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,9,9,4,0 + db 0,0,0,0,4,9,9,0,0,0,0,4,9,7,9,4 + db 0,0,0,0,9,9,7,9,7,0,7,9,7,9,9,0 + db 2,8,9,6,0,0,0,6,9,8,2,0,0,4,9,9 + db 4,0,0,0,0,0,0,0,0,4,9,9,4,0,0,0 + db 0,0,0,0,9,9,4,0,0,0,0,0,4,9,9,0 + db 0,0,0,9,9,0,0,0,9,9,2,0,0,0,0,0 + db 0,0,0,0,9,9,4,0,0,0,0,0,4,9,9,0 + db 0,0,0,0,0,0,0,0,9,9,0,0,9,9,4,0 + db 0,0,0,0,4,9,9,0,9,9,4,0,0,0,0,0 + db 4,9,9,0,0,0,0,0,0,0,9,9,0,0,0,0 + db 9,9,4,0,0,0,0,0,4,9,9,0,9,9,4,0 + db 0,0,0,0,4,9,9,0,0,4,9,9,4,0,0,0 + db 0,0,0,0,0,0,0,9,9,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,9,9,4,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,4,9,9,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,4,9,7,1,0,0,0,1 + db 7,9,4,0,9,9,0,0,0,0,0,1,6,9,8,0 + db 8,9,6,1,0,0,0,1,6,9,8,0,9,9,0,0 + db 0,0,0,1,6,9,8,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 8,9,6,1,0,0,0,1,6,9,9,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,8,9,6,1,0,0,0,1,6,9,8,0 + db 9,9,0,0,0,0,7,9,9,4,0,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,0,0,0,0,6,9,9,9,0 + db 8,9,6,1,0,0,0,1,6,9,8,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,8,9,6,1,0,3,7,3 + db 6,9,8,0,9,9,0,0,0,0,7,9,9,4,0,0 + db 8,9,6,1,0,0,0,1,6,9,8,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,8,9,6,1,0,0,0,1 + db 6,9,8,0,0,0,0,3,9,8,9,3,0,0,0,0 + db 9,9,9,9,4,0,4,9,9,9,9,0,4,9,9,4 + db 0,0,0,4,9,9,4,0,0,6,9,8,2,0,0,0 + db 0,0,0,0,0,6,9,8,2,0,0,0,0,0,0,0 + db 8,9,6,1,0,0,0,1,6,9,8,0,0,0,0,9 + db 9,0,0,0,9,9,1,0,0,0,0,0,0,0,0,0 + db 8,9,6,1,0,0,0,1,6,9,8,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,8,9,6,1,0,0,0,1 + db 6,9,8,0,8,9,6,1,0,0,0,1,6,9,8,0 + db 0,0,0,0,0,0,9,9,0,0,0,0,8,9,6,1 + db 0,0,0,1,6,9,8,0,8,9,6,1,0,0,0,1 + db 6,9,8,0,0,6,9,8,2,0,0,0,0,0,0,0 + db 0,0,0,9,9,0,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,8,9,6,1,0,0,0,0,0,0,0,0,0,0,0 + db 1,6,9,8,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,5,9,6,0,0,0,0,0,6,9,5,0 + db 9,9,0,0,0,0,1,5,8,9,6,0,6,9,8,5 + db 1,0,1,5,8,9,6,0,9,9,0,0,0,0,1,5 + db 8,9,6,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,6,9,8,5 + db 1,0,1,5,8,9,9,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 6,9,8,5,1,0,1,5,8,9,6,0,9,9,0,0 + db 0,0,4,9,9,7,0,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,0,0,0,0,4,9,9,9,0,6,9,8,5 + db 1,0,1,5,8,9,6,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,6,9,8,5,3,4,9,7,8,9,6,0 + db 9,9,0,0,0,0,4,9,9,7,0,0,6,9,8,5 + db 1,0,1,5,8,9,6,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,6,9,8,5,1,0,1,5,8,9,6,0 + db 0,0,0,2,8,9,8,2,0,0,0,0,9,9,9,7 + db 0,0,0,7,9,9,9,0,6,9,8,2,0,0,0,2 + db 8,9,6,0,2,8,9,6,0,0,0,0,0,0,0,0 + db 2,8,9,6,0,0,0,0,0,0,0,0,6,9,8,5 + db 1,0,1,5,8,9,6,0,0,0,0,9,9,0,0,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,6,9,8,5 + db 1,0,1,5,8,9,6,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,6,9,8,5,1,0,1,5,8,9,6,0 + db 6,9,8,5,1,0,1,5,8,9,6,0,0,0,0,0 + db 0,0,9,9,0,0,0,0,6,9,8,5,1,0,1,5 + db 8,9,6,0,6,9,8,5,1,0,1,5,8,9,6,0 + db 2,8,9,6,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,5,7,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,6,9,8 + db 5,1,0,0,0,0,0,0,0,0,0,1,5,8,9,6 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 6,9,5,0,0,0,0,0,5,9,6,0,9,9,0,0 + db 0,3,6,8,9,8,4,0,4,8,9,8,6,3,6,8 + db 9,8,4,0,9,9,0,0,0,3,6,8,9,8,4,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,4,8,9,8,6,3,6,8 + db 9,9,9,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,4,8,9,8 + db 6,3,6,8,9,8,4,0,9,9,0,0,0,0,0,7 + db 9,9,4,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,0,0 + db 0,0,0,2,8,9,9,0,4,8,9,8,6,3,6,8 + db 9,8,4,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 4,8,9,8,6,5,7,9,9,8,4,0,9,9,0,0 + db 0,0,0,7,9,9,4,0,4,8,9,8,6,3,6,8 + db 9,8,4,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 4,8,9,8,6,3,6,8,9,8,4,0,0,0,0,1 + db 7,9,7,1,0,0,0,0,9,9,9,4,0,0,0,4 + db 9,9,9,0,8,9,6,0,0,0,0,0,6,9,8,0 + db 4,9,9,4,0,0,0,0,0,0,0,0,4,9,9,4 + db 0,0,0,0,0,0,0,0,4,8,9,8,6,3,6,8 + db 9,8,4,0,0,0,0,9,9,0,0,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,4,8,9,8,6,3,6,8 + db 9,8,4,0,0,0,0,0,0,0,0,0,9,9,0,0 + db 4,8,9,8,6,3,6,8,9,8,4,0,4,8,9,8 + db 6,3,6,8,9,8,4,0,0,0,0,0,0,0,9,9 + db 0,0,0,0,4,8,9,8,6,3,6,8,9,8,4,0 + db 4,8,9,8,6,3,6,8,9,8,4,0,4,9,9,4 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,8,9,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,4,8,9,8,6,3,0 + db 0,0,0,0,0,0,3,6,8,9,8,4,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,7,9,4,0 + db 0,0,0,0,4,9,7,0,9,9,9,9,9,9,9,9 + db 9,5,2,0,2,5,9,9,9,9,9,9,9,5,2,0 + db 9,9,9,9,9,9,9,9,9,5,2,0,9,9,9,9 + db 9,9,9,9,9,9,9,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,2,5,9,9,9,9,9,9,9,9,9,0 + db 9,9,0,0,0,0,0,0,0,9,9,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,2,5,9,9,9,9,9,9 + db 9,5,2,0,9,9,0,0,0,0,0,4,9,9,7,0 + db 9,9,9,9,9,9,9,9,9,9,9,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,0,0,0 + db 6,9,9,0,2,5,9,9,9,9,9,9,9,5,2,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,2,5,9,9 + db 9,9,9,9,9,7,5,0,9,9,0,0,0,0,0,4 + db 9,9,7,0,2,5,9,9,9,9,9,9,9,5,2,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,2,5,9,9 + db 9,9,9,9,9,5,2,0,0,0,0,0,6,9,6,0 + db 0,0,0,0,9,9,7,0,0,0,0,0,7,9,9,0 + db 9,9,4,0,0,0,0,0,4,9,9,0,6,9,8,2 + db 0,0,0,0,0,0,0,0,6,9,9,9,9,9,9,9 + db 9,9,9,0,2,5,9,9,9,9,9,9,9,5,2,0 + db 0,0,0,9,9,0,0,0,9,9,9,9,9,9,9,9 + db 9,9,9,0,2,5,9,9,9,9,9,9,9,5,2,0 + db 0,0,0,0,0,0,0,0,9,9,0,0,2,5,9,9 + db 9,9,9,9,9,5,2,0,2,5,9,9,9,9,9,9 + db 9,5,2,0,0,0,0,0,0,0,9,9,0,0,0,0 + db 2,5,9,9,9,9,9,9,9,5,2,0,2,5,9,9 + db 9,9,9,9,9,5,2,0,6,9,8,2,0,0,0,0 + db 0,0,0,0,0,0,0,5,7,0,0,0,0,0,0,0 + db 5,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,5,7,0,0,0,0,0,0 + db 0,0,0,0,6,7,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,2,5,9,9,9,9,9,0,0,0,0 + db 0,9,9,9,9,9,5,2,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,8,9,3,0,0,0,0,0 + db 3,9,8,0,9,9,9,9,9,9,9,9,6,3,0,0 + db 0,3,6,9,9,9,9,9,6,3,0,0,9,9,9,9 + db 9,9,9,9,6,3,0,0,9,9,9,9,9,9,9,9 + db 9,9,9,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 0,3,6,9,9,9,9,9,6,9,9,0,9,9,0,0 + db 0,0,0,0,0,9,9,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,0,3,6,9,9,9,9,9,6,3,0,0 + db 9,9,0,0,0,0,0,0,7,9,9,0,9,9,9,9 + db 9,9,9,9,9,9,9,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,0,0,0,0,0,4,9,9,0 + db 0,3,6,9,9,9,9,9,6,3,0,0,9,9,0,0 + db 0,0,0,0,0,0,0,0,0,3,6,9,9,9,9,9 + db 7,9,7,0,9,9,0,0,0,0,0,0,7,9,9,0 + db 0,3,6,9,9,9,9,9,6,3,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,3,6,9,9,9,9,9 + db 6,3,0,0,0,0,0,0,5,9,5,0,0,0,0,0 + db 9,9,4,0,0,0,0,0,4,9,9,0,9,8,2,0 + db 0,0,0,0,2,8,9,0,8,9,6,0,0,0,0,0 + db 0,0,0,0,8,9,9,9,9,9,9,9,9,9,9,0 + db 0,3,6,9,9,9,9,9,6,3,0,0,0,0,0,9 + db 9,0,0,0,9,9,9,9,9,9,9,9,9,9,9,0 + db 0,3,6,9,9,9,9,9,6,3,0,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,3,6,9,9,9,9,9 + db 6,3,0,0,0,3,6,9,9,9,9,9,6,3,0,0 + db 0,0,0,0,0,0,9,9,0,0,0,0,0,3,6,9 + db 9,9,9,9,6,3,0,0,0,3,6,9,9,9,9,9 + db 6,3,0,0,8,9,6,0,0,0,0,0,0,0,0,0 + db 0,0,0,8,9,0,0,0,0,0,0,0,8,9,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,8,9,0,0,0,0,0,0,0,0,0,0 + db 0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,3,6,9,9,9,9,0,0,0,0,0,9,9,9 + db 9,6,3,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,9,8,2,0,0,0,0,0,2,8,9,0 + db 9,9,9,9,9,9,8,5,2,0,0,0,0,0,2,5 + db 8,9,8,5,2,0,0,0,9,9,9,9,9,9,8,5 + db 2,0,0,0,9,9,9,9,9,9,9,9,9,9,9,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,0,0,2,5 + db 8,9,8,5,2,9,9,0,9,9,0,0,0,0,0,0 + db 0,9,9,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 0,0,2,5,8,9,8,5,2,0,0,0,9,9,0,0 + db 0,0,0,0,4,9,9,0,9,9,9,9,9,9,9,9 + db 9,9,9,0,9,9,0,0,0,0,0,0,0,9,9,0 + db 9,9,0,0,0,0,0,0,2,9,9,0,0,0,2,5 + db 8,9,8,5,2,0,0,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,0,0,2,5,8,9,8,5,3,7,9,0 + db 9,9,0,0,0,0,0,0,4,9,9,0,0,0,2,5 + db 8,9,8,5,2,0,0,0,0,0,0,0,9,9,0,0 + db 0,0,0,0,0,0,2,5,8,9,8,5,2,0,0,0 + db 0,0,0,0,4,9,4,0,0,0,0,0,9,7,0,0 + db 0,0,0,0,0,7,9,0,9,6,0,0,0,0,0,0 + db 0,6,9,0,9,9,4,0,0,0,0,0,0,0,0,0 + db 9,9,9,9,9,9,9,9,9,9,9,0,0,0,2,5 + db 8,9,8,5,2,0,0,0,0,0,0,9,9,0,0,0 + db 9,9,9,9,9,9,9,9,9,9,9,0,0,0,2,5 + db 8,9,8,5,2,0,0,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,2,5,8,9,8,5,2,0,0,0 + db 0,0,2,5,8,9,8,5,2,0,0,0,0,0,0,0 + db 0,0,9,9,0,0,0,0,0,0,2,5,8,9,8,5 + db 2,0,0,0,0,0,2,5,8,9,8,5,2,0,0,0 + db 9,9,4,0,0,0,0,0,0,0,0,0,0,0,0,6 + db 7,0,0,0,0,0,0,0,6,7,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 6,7,0,0,0,0,0,0,0,0,0,0,0,2,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2 + db 5,8,9,9,0,0,0,0,0,9,9,8,5,2,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,7,0,7,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,9,0,9,0,0,0,0,0,0,0,0,0 + db 0,0,2,5,8,9,9,0,0,0,0,0,9,9,8,5 + db 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 7,0,7,0,0,0,0,0,0,0,0,0,0,3,6,9 + db 9,9,9,0,0,0,0,0,9,9,9,9,6,3,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,0 + db 0,0,0,0,0,0,0,0,2,5,9,9,9,9,9,0 + db 0,0,0,0,9,9,9,9,9,5,2,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0 + db 0,0,0,0,4,8,9,8,6,3,0,0,0,0,0,0 + db 0,3,6,8,9,8,4,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 6,9,8,5,1,0,0,0,0,0,0,0,0,0,1,5 + db 8,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,8,9,6,1 + db 0,0,0,0,0,0,0,0,0,0,0,1,6,9,8,0 + db 0,0,0,0,0,0,0,0,9,9,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,9,9,4,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,4,9,9,0,0,0,0,0 + db 0,0,0,0,9,9,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,9,9,2,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,2,9,9,0,0,0,0,0,0,0,0,0 + db 9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0 diff --git a/CREDITS/INCBIN.EXE b/CREDITS/INCBIN.EXE new file mode 100644 index 0000000..ddf3faa Binary files /dev/null and b/CREDITS/INCBIN.EXE differ diff --git a/CREDITS/INCLUD2.ASM b/CREDITS/INCLUD2.ASM new file mode 100644 index 0000000..4864d00 --- /dev/null +++ b/CREDITS/INCLUD2.ASM @@ -0,0 +1,56 @@ + IDEAL + +SEGMENT kakka11 para use16 private 'FAR_DATA' +PUBLIC C pic11 +LABEL pic11 BYTE +INCLUDE "pic11.inc" +ENDS + +SEGMENT kakka12 para use16 private 'FAR_DATA' +PUBLIC C pic12 +LABEL pic12 BYTE +INCLUDE "pic12.inc" +ENDS + +SEGMENT kakka13 para use16 private 'FAR_DATA' +PUBLIC C pic13 +LABEL pic13 BYTE +INCLUDE "pic13.inc" +ENDS + +SEGMENT kakka14 para use16 private 'FAR_DATA' +PUBLIC C pic14 +LABEL pic14 BYTE +INCLUDE "pic14.inc" +ENDS + +SEGMENT kakka14b para use16 private 'FAR_DATA' +PUBLIC C pic14b +LABEL pic14b BYTE +INCLUDE "pic14b.inc" +ENDS + +SEGMENT kakka15 para use16 private 'FAR_DATA' +PUBLIC C pic15 +LABEL pic15 BYTE +INCLUDE "pic15.inc" +ENDS + +SEGMENT kakka16 para use16 private 'FAR_DATA' +PUBLIC C pic16 +LABEL pic16 BYTE +INCLUDE "pic16.inc" +ENDS + +SEGMENT kakka17 para use16 private 'FAR_DATA' +PUBLIC C pic17 +LABEL pic17 BYTE +INCLUDE "pic17.inc" +ENDS + +SEGMENT kakka18 para use16 private 'FAR_DATA' +PUBLIC C pic18 +LABEL pic18 BYTE +INCLUDE "pic18.inc" +ENDS +END \ No newline at end of file diff --git a/CREDITS/INCLUD2.OBJ b/CREDITS/INCLUD2.OBJ new file mode 100644 index 0000000..f9103db Binary files /dev/null and b/CREDITS/INCLUD2.OBJ differ diff --git a/CREDITS/INCLUDE.ASM b/CREDITS/INCLUDE.ASM new file mode 100644 index 0000000..e24528a --- /dev/null +++ b/CREDITS/INCLUDE.ASM @@ -0,0 +1,81 @@ + IDEAL + +SEGMENT kakka1 para use16 private 'FAR_DATA' +PUBLIC C pic1 +LABEL pic1 BYTE +INCLUDE "pic01.inc" +ENDS + +SEGMENT kakka2 para use16 private 'FAR_DATA' +PUBLIC C pic2 +LABEL pic2 BYTE +INCLUDE "pic02.inc" +ENDS + +SEGMENT kakka3 para use16 private 'FAR_DATA' +PUBLIC C pic3 +LABEL pic3 BYTE +INCLUDE "pic03.inc" +ENDS + +SEGMENT kakka4 para use16 private 'FAR_DATA' +PUBLIC C pic4 +LABEL pic4 BYTE +INCLUDE "pic04.inc" +ENDS + +SEGMENT kakka5 para use16 private 'FAR_DATA' +PUBLIC C pic5 +LABEL pic5 BYTE +INCLUDE "pic05.inc" +ENDS + +SEGMENT kakka5b para use16 private 'FAR_DATA' +PUBLIC C pic5b +LABEL pic5b BYTE +INCLUDE "pic05b.inc" +ENDS + +SEGMENT kakka6 para use16 private 'FAR_DATA' +PUBLIC C pic6 +LABEL pic6 BYTE +INCLUDE "pic06.inc" +ENDS + +SEGMENT kakka7 para use16 private 'FAR_DATA' +PUBLIC C pic7 +LABEL pic7 BYTE +INCLUDE "pic07.inc" +ENDS + +SEGMENT kakka8 para use16 private 'FAR_DATA' +PUBLIC C pic8 +LABEL pic8 BYTE +INCLUDE "pic08.inc" +ENDS + +SEGMENT kakka9 para use16 private 'FAR_DATA' +PUBLIC C pic9 +LABEL pic9 BYTE +INCLUDE "pic09.inc" +ENDS + +SEGMENT kakka10 para use16 private 'FAR_DATA' +PUBLIC C pic10 +LABEL pic10 BYTE +INCLUDE "pic10.inc" +ENDS + +SEGMENT kakka10b para use16 private 'FAR_DATA' +PUBLIC C pic10b +LABEL pic10b BYTE +INCLUDE "pic10b.inc" +ENDS + +SEGMENT asdf byte use16 private 'FAR_DATA' +PUBLIC C font +LABEL font WORD +INCLUDE 'fona.inc' +ENDS + +END \ No newline at end of file diff --git a/CREDITS/INCLUDE.OBJ b/CREDITS/INCLUDE.OBJ new file mode 100644 index 0000000..5ba7b3a Binary files /dev/null and b/CREDITS/INCLUDE.OBJ differ diff --git a/CREDITS/LBM2U.EXE b/CREDITS/LBM2U.EXE new file mode 100644 index 0000000..e3613f6 Binary files /dev/null and b/CREDITS/LBM2U.EXE differ diff --git a/CREDITS/MAIN.C b/CREDITS/MAIN.C new file mode 100644 index 0000000..cb529db --- /dev/null +++ b/CREDITS/MAIN.C @@ -0,0 +1,318 @@ +#include +#include +#include "h:\u2\dis\dis.h" + +char *prtc(int x,int y,char *txt); + +extern char pic1[]; +extern char pic2[]; +extern char pic3[]; +extern char pic4[]; +extern char pic5[]; +extern char pic5b[]; +extern char pic6[]; +extern char pic7[]; +extern char pic8[]; +extern char pic9[]; +extern char pic10[]; +extern char pic10b[]; +extern char pic11[]; +extern char pic12[]; +extern char pic13[]; +extern char pic14[]; +extern char pic14b[]; +extern char pic15[]; +extern char pic16[]; +extern char pic17[]; +extern char pic18[]; + +#define FONAY 32 + +extern char far font[FONAY][1500]; +char *fonaorder="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/?!:,.\"()+-"; +int fonap[256]; +int fonaw[256]; + +main() { + dis_partstart(); + init(); + tw_opengraph(); + tw_setstart(160*200); + if(!dis_exit()) screenin(pic1, + "GRAPHICS - MARVEL\0" + "MUSIC - SKAVEN\0" + "CODE - WILDFIRE\0" + ); + + if(!dis_exit()) screenin(pic2, + "GRAPHICS - MARVEL\0" + "MUSIC - SKAVEN\0" + "CODE - PSI\0" + ); + + if(!dis_exit()) screenin(pic3, + "GRAPHICS - MARVEL\0" + "MUSIC - SKAVEN\0" + "CODE - WILDFIRE\0" + "ANIMATION - TRUG\0" + ); + + if(!dis_exit()) screenin(pic4, + "\0GRAPHICS - PIXEL\0" + ); + + if(!dis_exit()) screenin(pic5, + "GRAPHICS - PIXEL\0" + "MUSIC - PURPLE MOTION\0" + "CODE - PSI\0" + ); + + if(!dis_exit()) screenin(pic5b, + "\0MUSIC - PURPLE MOTION\0" + "CODE - TRUG\0" + ); + + if(!dis_exit()) screenin(pic6, + "\0MUSIC - PURPLE MOTION\0" + "CODE - PSI\0" + ); + + if(!dis_exit()) screenin(pic7, + "\0MUSIC - PURPLE MOTION\0" + "CODE - PSI\0" + ); + + if(!dis_exit()) screenin(pic8, + "\0GRAPHICS - PIXEL\0" + "MUSIC - PURPLE MOTION\0" + ); + + if(!dis_exit()) screenin(pic9, + "GRAPHICS - PIXEL\0" + "MUSIC - PURPLE MOTION\0" + "CODE - TRUG\0" + "RENDERING - TRUG\0" + ); + + if(!dis_exit()) screenin(pic10, + "GRAPHICS - PIXEL, SKAVEN\0" + "MUSIC - PURPLE MOTION\0" + "CODE - PSI\0" + ); + + if(!dis_exit()) screenin(pic10b, + "GRAPHICS - PIXEL, SKAVEN\0" + "MUSIC - PURPLE MOTION\0" + "CODE - PSI\0" + ); + + if(!dis_exit()) screenin(pic11, + "\0MUSIC - PURPLE MOTION\0" + "CODE - WILDFIRE\0" + ); + + if(!dis_exit()) screenin(pic12, + "\0MUSIC - PURPLE MOTION\0" + "CODE - WILDFIRE\0" + ); + + if(!dis_exit()) screenin(pic13, + "\0MUSIC - PURPLE MOTION\0" + "CODE - PSI\0" + ); + + if(!dis_exit()) screenin(pic14, + "GRAPHICS - PIXEL\0" + "MUSIC - PURPLE MOTION\0" + "CODE - TRUG\0" + "RENDERING - TRUG\0" + ); + + if(!dis_exit()) screenin(pic14b, + "\0MUSIC - PURPLE MOTION\0" + "CODE - PSI\0" + ); + + if(!dis_exit()) screenin(pic15, + "GRAPHICS - MARVEL\0" + "MUSIC - PURPLE MOTION\0" + "CODE - PSI\0" + ); + + if(!dis_exit()) screenin(pic16, + "\0MUSIC - SKAVEN\0" + "CODE - PSI\0" + ); + + if(!dis_exit()) screenin(pic17, + "\0GRAPHICS - PIXEL\0" + "MUSIC - PURPLE MOTION\0" + ); + + if(!dis_exit()) screenin(pic18, + "GRAPHICS - PIXEL\0" + "MUSIC - PURPLE MOTION\0" + "CODE - WILDFIRE\0" + ); + + //tw_closegraph(); + } + +screenin(char (* pic)[160], char *text) + { + int a,x,y,yy,v; + + tw_setsplit(400); + tw_clrscr(); + tw_setstart(160*200); + dis_waitb(); + tw_setpalette(&pic[0][16]); + pic=&pic[0][784]; + + y=16;while(*(text=prtc(160,y,text))) y+=FONAY+10; + + for(x=0;x<160;x++) for(y=0;y<100;y++) tw_putpixel(400+x,400+y*2,pic[y][x]+16); + + for(y=200*128;y>0;y=y*12L/13) + { + dis_waitb(); + tw_setsplit(y/128+200); + yy=320-y/80; + for(a=0;a<10000;a++); + tw_setstart(160*200+(yy/4)); + asm { + mov dx, 0x3c0 + mov al, 0x33 + out dx, al + mov ax, yy + and ax, 3 + shl ax, 1 + out dx, al + } + } + + for(a=0;a<200 && !dis_exit();a++) dis_waitb(); + + for(y=0,v=0;y<128*200;y=y+v,v+=15) + { + dis_waitb(); + tw_setsplit(y/128+200); + yy=320+y/80; + for(a=0;a<10000;a++); + tw_setstart(160*200+(yy/4)); + asm { + mov dx, 0x3c0 + mov al, 0x33 + out dx, al + mov ax, yy + and ax, 3 + shl ax, 1 + out dx, al + } + } + } + +prt(int x,int y,char *txt) +{ + int x2w,x2,y2,y2w=y+FONAY,sx,d; + while(*txt) + { + x2w=fonaw[*txt]+x; + sx=fonap[*txt]; + for(x2=x;x2 +#include + +char *vram=(char *)0xa0000000L; + +main() +{ + FILE *f1; + char *vp; + int a,b,c,r,x,y; + double l1,l2; + _asm mov ax,13h + _asm int 10h + outp(0x3c8,0); + for(a=0;a<8;a++) + { + outp(0x3c9,a*8); + outp(0x3c9,a*8); + outp(0x3c9,a*8); + } + for(y=0;y<200;y++) for(x=0;x<320;x++) + { + l1=(double)(x-320); + l2=(double)(y-200); + r=(int)pow(l1*l1+l2*l2,0.7); + a=(r/16)&7; + vram[x+y*320]=a; + } + c=1; + f1=fopen("pic.ega","wb"); + for(y=0;y<200;y++) + { + for(c=1;c<=4;c<<=1) + { + for(x=0;x<320;x+=8) + { + vp=vram+x+y*320; + a=0; + if(vp[0]&c) a|=128; + if(vp[1]&c) a|=64; + if(vp[2]&c) a|=32; + if(vp[3]&c) a|=16; + if(vp[4]&c) a|=8; + if(vp[5]&c) a|=4; + if(vp[6]&c) a|=2; + if(vp[7]&c) a|=1; + putc(a,f1); + } + } + vram[y*320]=15; + vram[y*320+1]=0; + } + fclose(f1); + getch(); + _asm mov ax,3 + _asm int 10h + for(a=0;a<256;a++) + { + b=0; + if(a&1) b|=128; + if(a&2) b|=64; + if(a&4) b|=32; + if(a&8) b|=16; + if(a&16) b|=8; + if(a&32) b|=4; + if(a&64) b|=2; + if(a&128) b|=1; + printf("%i,",b); + } +} diff --git a/DDSTARS/DOIT1.EXE b/DDSTARS/DOIT1.EXE new file mode 100644 index 0000000..7063b6f Binary files /dev/null and b/DDSTARS/DOIT1.EXE differ diff --git a/DDSTARS/DOIT2.C b/DDSTARS/DOIT2.C new file mode 100644 index 0000000..3ace100 --- /dev/null +++ b/DDSTARS/DOIT2.C @@ -0,0 +1,70 @@ +#include +#include + +char *vram=(char *)0xa0000000L; + +main() +{ + FILE *f1; + char *vp; + int a,b,c,r,x,y; + long l1,l2; + _asm mov ax,13h + _asm int 10h + outp(0x3c8,0); + for(a=0;a<8;a++) + { + outp(0x3c9,a*8); + outp(0x3c9,a*8); + outp(0x3c9,a*8); + } + for(y=0;y<200;y++) for(x=0;x<320;x++) + { + l1=(long)(x-320)*(long)(x-320); + l2=(long)(y-200)*(long)(y-200); + r=(int)sqrt((double)l1+(double)l2); + a=((r)/12)&1; + vram[x+y*320]=a; + } + c=1; + f1=fopen("pic2.ega","wb"); + for(y=0;y<200;y++) + { + for(c=1;c<=1;c<<=1) + { + for(x=0;x<320;x+=8) + { + vp=vram+x+y*320; + a=0; + if(vp[0]&c) a|=128; + if(vp[1]&c) a|=64; + if(vp[2]&c) a|=32; + if(vp[3]&c) a|=16; + if(vp[4]&c) a|=8; + if(vp[5]&c) a|=4; + if(vp[6]&c) a|=2; + if(vp[7]&c) a|=1; + putc(a,f1); + } + } + vram[y*320]=15; + vram[y*320+1]=0; + } + fclose(f1); + getch(); + _asm mov ax,3 + _asm int 10h + for(a=0;a<256;a++) + { + b=0; + if(a&1) b|=128; + if(a&2) b|=64; + if(a&4) b|=32; + if(a&8) b|=16; + if(a&16) b|=8; + if(a&32) b|=4; + if(a&64) b|=2; + if(a&128) b|=1; + printf("%i,",b); + } +} diff --git a/DDSTARS/DOIT2.EXE b/DDSTARS/DOIT2.EXE new file mode 100644 index 0000000..b79755e Binary files /dev/null and b/DDSTARS/DOIT2.EXE differ diff --git a/DDSTARS/DOIT3.C b/DDSTARS/DOIT3.C new file mode 100644 index 0000000..1b70995 --- /dev/null +++ b/DDSTARS/DOIT3.C @@ -0,0 +1,54 @@ +#include +#include + +char *vram=(char *)0xa0000000L; + +main() +{ + FILE *f1; + char *vp; + int a,b,c,r,x,y; + double l1,l2; + _asm mov ax,13h + _asm int 10h + outp(0x3c8,0); + for(a=0;a<8;a++) + { + outp(0x3c9,a*8); + outp(0x3c9,a*8); + outp(0x3c9,a*8); + } + for(y=0;y<200;y++) for(x=0;x<320;x++) + { + a=((long)((x-160)*(long)(320-y)+1600L)/3200L)&1; + vram[x+y*320]=a; + } + c=1; + f1=fopen("pic3.ega","wb"); + for(y=0;y<200;y++) + { + for(c=1;c<=4;c<<=1) + { + for(x=0;x<320;x+=8) + { + vp=vram+x+y*320; + a=0; + if(vp[0]&c) a|=128; + if(vp[1]&c) a|=64; + if(vp[2]&c) a|=32; + if(vp[3]&c) a|=16; + if(vp[4]&c) a|=8; + if(vp[5]&c) a|=4; + if(vp[6]&c) a|=2; + if(vp[7]&c) a|=1; + putc(a,f1); + } + } + vram[y*320]=15; + vram[y*320+1]=0; + } + fclose(f1); + getch(); + _asm mov ax,3 + _asm int 10h +} diff --git a/DDSTARS/DOIT3.EXE b/DDSTARS/DOIT3.EXE new file mode 100644 index 0000000..dac0c4b Binary files /dev/null and b/DDSTARS/DOIT3.EXE differ diff --git a/DDSTARS/DOTEXTS.BAT b/DDSTARS/DOTEXTS.BAT new file mode 100644 index 0000000..e32246d --- /dev/null +++ b/DDSTARS/DOTEXTS.BAT @@ -0,0 +1,2 @@ +lbm16 texts.lbm texts.16 2 +doobj texts.16 _textpic _textpic.obk \ No newline at end of file diff --git a/DDSTARS/DP_PREFS b/DDSTARS/DP_PREFS new file mode 100644 index 0000000..54f4551 Binary files /dev/null and b/DDSTARS/DP_PREFS differ diff --git a/DDSTARS/FLIP.INC b/DDSTARS/FLIP.INC new file mode 100644 index 0000000..f71418c --- /dev/null +++ b/DDSTARS/FLIP.INC @@ -0,0 +1,14 @@ +flip8 LABEL BYTE +db 0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,8,136,72,200 +db 40,168,104,232,24,152,88,216,56,184,120,248,4,132,68,196,36,164,100 +db 228,20,148,84,212,52,180,116,244,12,140,76,204,44,172,108,236,28,156 +db 92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178 +db 114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6 +db 134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206 +db 46,174,110,238,30,158,94,222,62,190,126,254,1,129,65,193,33,161,97,225 +db 17,145,81,209,49,177,113,241,9,137,73,201,41,169,105,233,25,153,89,217 +db 57,185,121,249,5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245 +db 13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253,3,131,67,195 +db 35,163,99,227,19,147,83,211,51,179,115,243,11,139,75,203,43,171,107,235 +db 27,155,91,219,59,187,123,251,7,135,71,199,39,167,103,231,23,151,87,215 +db 55,183,119,247,15,143,79,207,47,175,111,239,31,159,95,223,63,191,127,255 diff --git a/DDSTARS/K.EXE b/DDSTARS/K.EXE new file mode 100644 index 0000000..e334bcb Binary files /dev/null and b/DDSTARS/K.EXE differ diff --git a/DDSTARS/KOE.ASM b/DDSTARS/KOE.ASM new file mode 100644 index 0000000..6e8baf0 --- /dev/null +++ b/DDSTARS/KOE.ASM @@ -0,0 +1,100 @@ +extrn _textpic:byte +extrn _dis_partstart:far + +code SEGMENT para public 'CODE' + ASSUME cs:code +LOCALS +.386 + +include sin1024.inc ;_sin1024 + +PLANE MACRO pl + mov dx,3c4h + mov ax,0002h+pl*100h + out dx,ax + ENDM + +resetmode13 PROC NEAR + mov ax,13 + int 10h + mov dx,3dah + in al,dx + mov dx,3c0h + xor al,al + REPT 16 + out dx,al + out dx,al + inc al + ENDM + mov al,11h + out dx,al + mov al,255 + out dx,al + mov al,32 + out dx,al + ;clear pal + mov dx,3c8h + xor al,al + out dx,al + inc dx + mov cx,768 +@@clp: out dx,al + loop @@clp + ret +resetmode13 ENDP + +outpal PROC NEAR + mov dx,3c8h + out dx,al + mov ax,cs + mov ds,ax + inc dx + rep outsb + ret +outpal ENDP + +waitb PROC NEAR + mov bx,1 + int 0fch + ret +waitb ENDP + +ALIGN 16 +include stars.asm + +start: mov bx,SEG endcode + mov ax,es + sub bx,ax + add bx,64 + mov ah,4ah + int 21h + + call _dis_partstart + + call resetmode13 + + call init_stars + + call do_stars + call deinit_stars + +@@xit: mov ax,3 + int 10h + mov ax,4c00h + int 21h + +code ENDS + +.8086 +stack SEGMENT word stack 'STACK' + db 1024 dup(0) +stack ENDS + +lastseg segment para public 'DATA' ;temporary stack when code starts + ALIGN 16 +public endcode +endcode db 16 dup(0) +lastseg ends + + END start + \ No newline at end of file diff --git a/DDSTARS/KOE.MAP b/DDSTARS/KOE.MAP new file mode 100644 index 0000000..8823499 --- /dev/null +++ b/DDSTARS/KOE.MAP @@ -0,0 +1,9 @@ + + Start Stop Length Name Class + 00000H 000D3H 000D4H text_disc CODE + 000E0H 0616BH 0608CH CODE CODE + 06170H 0A02FH 03EC0H DATA__textpic FARDATA + 0A030H 0A42FH 00400H STACK STACK + 0A430H 0A43FH 00010H lastseg DATA + +Program entry point at 000E:6063 diff --git a/DDSTARS/KOE.OBJ b/DDSTARS/KOE.OBJ new file mode 100644 index 0000000..af8a09d Binary files /dev/null and b/DDSTARS/KOE.OBJ differ diff --git a/DDSTARS/KR.C b/DDSTARS/KR.C new file mode 100644 index 0000000..e62e0f8 --- /dev/null +++ b/DDSTARS/KR.C @@ -0,0 +1,27 @@ +#include + +char *vram=(char *)0xa0000000L; + +main() +{ + unsigned int seed; + _asm mov ax,13h + _asm int 10h + _asm int 3 + rand(); + while(!kbhit()) + { + vram[seed]++; + _asm + { + mov ax,seed + shl ax,1 + jnc l1 + add ax,0f7ffh + l1: mov seed,ax + } + } + getch(); + _asm mov ax,3h + _asm int 10h +} \ No newline at end of file diff --git a/DDSTARS/MAKEFILE b/DDSTARS/MAKEFILE new file mode 100644 index 0000000..96cf050 --- /dev/null +++ b/DDSTARS/MAKEFILE @@ -0,0 +1,8 @@ +k.exe : koe.obj + link /E ..\dis\disc.obj+_textpic.obk+koe.obj,k.exe,koe.map; + copy k.exe ..\main\data\ddstars.exe + +koe.obj : koe.asm + tasm /ML /m9 koe.asm + +koe.asm : stars.asm diff --git a/DDSTARS/PIC.EGA b/DDSTARS/PIC.EGA new file mode 100644 index 0000000..b9a6b8a Binary files /dev/null and b/DDSTARS/PIC.EGA differ diff --git a/DDSTARS/PIC2.EGA b/DDSTARS/PIC2.EGA new file mode 100644 index 0000000..0788dee Binary files /dev/null and b/DDSTARS/PIC2.EGA differ diff --git a/DDSTARS/POLYEGA.ASM b/DDSTARS/POLYEGA.ASM new file mode 100644 index 0000000..4f71b09 --- /dev/null +++ b/DDSTARS/POLYEGA.ASM @@ -0,0 +1,421 @@ +;borders - can be found in asm.asm at the tmp work area (size 8K = 1024 rows) + +ALIGN 4 +polysides dw 0 +polyxy dw 16 dup(0,0); + +poly PROC NEAR + mov ax,cs + mov ds,ax + mov ax,cs:starvram + mov es,ax + jmp polyf +poly ENDP + +;*** POLYF / POLYFT + +ALIGN 4 +borders dw 4096 dup(0) + +feax dd 0 +fedx dd 0 + +fleftaddl dd 0 ;+0 +fleftaddh dw 0 ;+4 +fleftrown dw 0 ;+6 +fleftzb dd 0 ;+8 +fleftze dd 0 ;+12 +flefttx0 dw 0 ;+16 +fleftty0 dw 0 ;+18 +flefttxa dw 0 ;+20 +flefttya dw 0 ;+22 +fleftcnt dw 0 ;+24 +fleftcnta dw 0 ;+26 +fleftd3a dw 0 ;+28 + +frightaddl dd 0 ;+0 +frightaddh dw 0 ;+4 +frightrown dw 0 ;+6 +frightzb dd 0 ;+8 +frightze dd 0 ;+12 +frighttx0 dw 0 ;+16 +frightty0 dw 0 ;+18 +frighttxa dw 0 ;+20 +frighttya dw 0 ;+22 +frightcnt dw 0 ;+24 +frightcnta dw 0 ;+26 +frightd3a dw 0 ;+28 + +finfolen dw 0 +finfo0 dw 0 +finfo1 dw 0 +fwmaxy1 dw 0 + +wminx dw 0 +wmaxx dw 319 +wminy dw 0+100h +wmaxy dw 399+100h + +finfo dw 32 dup(0,0,0,0,0,0,0,0) + ;x,y,zlo,zhi,tx,ty,0,0 + +polyf PROC NEAR ;ONLY CONVEX POLYGONS - FAST? + ;input: polysides/polyxy + ;requirements: + ;es=vram + ;cpolysides>=4 (not checked) + ;color=set + ;**COPY/SEEK UPPERMOST** + mov ax,cs + mov gs,ax + mov ds,ax + mov cx,ds:polysides + mov ax,cx + shl ax,4 ;*16 + mov ds:finfolen,ax + add ax,OFFSET finfo + mov ds:finfo1,ax + mov ax,gs:wmaxy + inc ax + mov ds:fwmaxy1,ax + mov edx,077770000h + xor bx,bx + mov si,OFFSET polyxy + mov di,OFFSET finfo + mov ds:finfo0,di +pfn1: mov eax,dword ptr ds:[si] + cmp eax,edx + jg pfn2 + mov edx,eax + mov bx,di +pfn2: mov dword ptr ds:[di],eax + add si,4 + add di,16 + loop pfn1 + ;[bx]=uppermost + ;**SETUP REGS** + mov ds:fleftrown,-32767 + mov ds:frightrown,-32767 + mov si,bx + mov di,bx + mov bp,ds:[si+2] + mov bx,OFFSET borders + mov ax,bp + cmp ax,gs:wminy + jge pfn35 + mov ax,gs:wminy +pfn35: mov gs:[bx],ax + add bx,2 + mov cx,16 ;max tmp count to avoid hanging on illegal polygons + ;eax=left + ;bx=pointer to borders[] + ;cx=count + ;edx=right + ;si=left + ;di=right + ;bp=y +pfn63: push cx + push bx + + cmp bp,ds:fleftrown + jl pfn42 + push edx + push di + mov di,si + sub di,16 + cmp di,ds:finfo0 + jae pfn41 + add di,ds:finfolen +pfn41: mov bx,OFFSET fleftaddl + call polyfcalc + add cx,bp + mov ds:fleftrown,cx + movzx eax,word ptr ds:[si+0] + mov ebx,ds:fleftaddl + mov dx,ds:fleftaddh + sar dx,1 + rcr ebx,1 + xor bx,bx + sub eax,ebx + sbb ax,dx + mov si,di + pop di + pop edx +pfn42: + cmp bp,ds:frightrown + jl pfn52 + push eax + push si + mov si,di + add di,16 + cmp di,ds:finfo1 + jb pfn51 + sub di,ds:finfolen +pfn51: mov bx,OFFSET frightaddl + call polyfcalc + add cx,bp + mov ds:frightrown,cx + movzx edx,word ptr ds:[si+0] + mov ebx,ds:frightaddl + mov ax,ds:frightaddh + sar ax,1 + rcr ebx,1 + xor bx,bx + sub edx,ebx + sbb dx,ax + pop si + pop eax + +pfn52: mov bx,ds:fleftrown + mov cx,ds:frightrown + cmp cx,bx + jl pfn61 + mov cx,bx +pfn61: sub cx,bp + pop bx + cmp cx,0 + jg pfn71 +pfn6: pop cx + cmp bp,ds:fwmaxy1 + jg pfn64 + cmp si,di + je pfn64 + dec cx + jz pfn64 + jmp pfn63 +pfn64: mov word ptr gs:[bx],-32767 + mov si,OFFSET borders + call polyn_disp + ret +pfn65: ;above screen + ;entering screen, cut. + add bp,cx + push bp + push cx + cmp bp,gs:wminy + jl pfn66 + sub bp,cx + mov cx,gs:wminy + sub cx,bp +pfn66: ; + movsx ecx,cx + ror eax,16 + mov ds:feax,eax + ror edx,16 + mov ds:fedx,edx + ; + mov ax,ds:fleftaddh + shl eax,16 + mov ax,word ptr ds:fleftaddl[2] + imul ecx + add ds:feax,eax + ; + mov ax,ds:frightaddh + shl eax,16 + mov ax,word ptr ds:frightaddl[2] + imul ecx + add ds:fedx,eax + ; + mov eax,ds:feax + ror eax,16 + mov edx,ds:fedx + ror edx,16 + mov bp,cx + pop cx + sub cx,bp + pop bp + cmp cx,0 + jne pfn6b + jmp pfn6 +pfn6b: mov bp,gs:wminy +pfn71: ;process segment + cmp bp,gs:wminy + jl pfn65 ;above screen still + add bp,cx + ;clip max to maxy + cmp bp,ds:fwmaxy1 + jle pfn72 + sub bp,cx + mov cx,ds:fwmaxy1 + sub cx,bp + mov bp,ds:fwmaxy1 +pfn72: cmp cx,0 + jle pfn6 + push si + push di + push bp + ror ebx,16 + neg cx + mov bx,cx + ror ebx,16 + mov esi,ds:fleftaddl + mov edi,ds:frightaddl + mov bp,ds:fleftaddh + mov cx,ds:frightaddh +pfn7: add eax,esi + adc ax,bp + add edx,edi + adc dx,cx + mov gs:[bx],ax + mov gs:[bx+2],dx + add ebx,10004h + jnc pfn7 + pop bp + pop di + pop si + jmp pfn6 +polyfcalc: ;**** subroutine **** + ;calc slope for line [SI]->[DI] to [BX], returns CX=len + mov cx,ds:[di+2] + sub cx,bp ;ds:[si+2] + jle pfc1 + mov ax,ds:[di+0] + sub ax,ds:[si+0] + jl pfc2 + xor dx,dx + div cx + mov ds:[bx+4],ax + xor ax,ax + div cx + mov ds:[bx+2],ax + ;dec cx + ret +pfc1: xor cx,cx + ret +pfc2: neg ax + xor dx,dx + div cx + push ax + xor ax,ax + div cx + pop dx + neg ax + adc dx,0 + neg dx + mov ds:[bx+4],dx + mov ds:[bx+2],ax + ;dec cx + ret +polyf ENDP + +polyn_disp PROC NEAR + ;calc/load regs + mov si,OFFSET borders + mov bx,ds:[si] + add si,2 +plnd3: ;draw hlines + push cx + push bx + mov ax,ds:[si] + cmp ax,-32767 + je polyn_dispx + mov dx,ds:[si+2] + call hline1 ;must not change DS:SI! + pop bx + pop cx + inc bx + add si,8 + jmp plnd3 +polyn_dispx: + pop bx + pop cx + mov dx,3ceh + mov ax,0ff08h + out dx,ax + ret +polyn_disp ENDP + +ALIGN 4 +leftside db 11111111b,01111111b,00111111b,00011111b,00001111b,00000111b,00000011b,00000001b +rightside db 10000000b,11000000b,11100000b,11110000b,11111000b,11111100b,11111110b,11111111b + +ALIGN 4 +hline1 PROC NEAR + ;DS:SI must be preserved! + ;(ax,bx)-(dx,bx) + sub bx,256 + cmp bx,199 + ja hlixx + + cmp ax,dx + jl hli1 + xchg ax,dx +hli1: inc dx + + dec dx + cmp dx,ax + jg hli21 +hlixx: ret + +hli21: cmp ax,0 + jnl hli2 + cmp dx,0 + jl hli0 + xor ax,ax +hli2: cmp dx,cs:wmaxx + jng hliok + cmp ax,cs:wmaxx + jg hli0 + mov dx,cs:wmaxx + +hliok: mov di,ax + sar di,3 + mov cx,dx + sar cx,3 + sub cx,di + shl bx,1 + add di,ds:rows[bx] + + mov bp,7 + and bp,ax + mov bl,ds:leftside[bp] + mov bp,7 + and bp,dx + mov bh,ds:rightside[bp] + + cmp cx,0 + je hli30 + + mov dx,3ceh + mov al,8 + mov ah,bl + out dx,ax + + mov ah,es:[di] + mov byte ptr es:[di],255 + inc di + + dec cx + jcxz hli33 + + mov ah,0ffh + out dx,ax + mov ax,0ffffh + test di,1 + jz hli32 + mov es:[di],al + inc di + dec cx +hli32: shr cx,1 + rep stosw + adc cx,cx + rep stosb + +hli33: mov dx,3ceh + mov al,8 + mov ah,bh + out dx,ax + mov ah,es:[di] + mov byte ptr es:[di],255 + +hli0: ret +hli30: ;end and beg in same byte + mov dx,3ceh + mov al,8 + mov ah,bh + and ah,bl + out dx,ax + mov al,es:[di] + mov byte ptr es:[di],255 + ret +hline1 ENDP diff --git a/DDSTARS/SIN1024.INC b/DDSTARS/SIN1024.INC new file mode 100644 index 0000000..6614fbe --- /dev/null +++ b/DDSTARS/SIN1024.INC @@ -0,0 +1,33 @@ +_sin1024 LABEL WORD +dw 0,1,3,4,6,7,9,10,12,14,15,17,18,20,21,23,25,26,28,29,31,32,34,36,37,39,40,42,43,45,46,48 +dw 49,51,53,54,56,57,59,60,62,63,65,66,68,69,71,72,74,75,77,78,80,81,83,84,86,87,89,90,92,93,95,96 +dw 97,99,100,102,103,105,106,108,109,110,112,113,115,116,117,119,120,122,123,124,126,127,128,130,131,132,134,135,136,138,139,140 +dw 142,143,144,146,147,148,149,151,152,153,155,156,157,158,159,161,162,163,164,166,167,168,169,170,171,173,174,175,176,177,178,179 +dw 181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,211 +dw 212,213,214,215,216,217,217,218,219,220,221,221,222,223,224,225,225,226,227,227,228,229,230,230,231,232,232,233,234,234,235,235 +dw 236,237,237,238,238,239,239,240,241,241,242,242,243,243,244,244,244,245,245,246,246,247,247,247,248,248,249,249,249,250,250,250 +dw 251,251,251,251,252,252,252,252,253,253,253,253,254,254,254,254,254,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255 +dw 256,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,254,254,254,254,253,253,253,253,252,252,252,252,251,251,251 +dw 251,250,250,250,249,249,249,248,248,247,247,247,246,246,245,245,244,244,244,243,243,242,242,241,241,240,239,239,238,238,237,237 +dw 236,235,235,234,234,233,232,232,231,230,230,229,228,227,227,226,225,225,224,223,222,221,221,220,219,218,217,217,216,215,214,213 +dw 212,211,211,210,209,208,207,206,205,204,203,202,201,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182 +dw 181,179,178,177,176,175,174,173,171,170,169,168,167,166,164,163,162,161,159,158,157,156,155,153,152,151,149,148,147,146,144,143 +dw 142,140,139,138,136,135,134,132,131,130,128,127,126,124,123,122,120,119,117,116,115,113,112,110,109,108,106,105,103,102,100,99 +dw 97,96,95,93,92,90,89,87,86,84,83,81,80,78,77,75,74,72,71,69,68,66,65,63,62,60,59,57,56,54,53,51 +dw 49,48,46,45,43,42,40,39,37,36,34,32,31,29,28,26,25,23,21,20,18,17,15,14,12,10,9,7,6,4,3,1 +dw 0,-1,-3,-4,-6,-7,-9,-10,-12,-14,-15,-17,-18,-20,-21,-23,-25,-26,-28,-29,-31,-32,-34,-36,-37,-39,-40,-42,-43,-45,-46,-48 +dw -49,-51,-53,-54,-56,-57,-59,-60,-62,-63,-65,-66,-68,-69,-71,-72,-74,-75,-77,-78,-80,-81,-83,-84,-86,-87,-89,-90,-92,-93,-95,-96 +dw -97,-99,-100,-102,-103,-105,-106,-108,-109,-110,-112,-113,-115,-116,-117,-119,-120,-122,-123,-124,-126,-127,-128,-130,-131,-132,-134,-135,-136,-138,-139,-140 +dw -142,-143,-144,-146,-147,-148,-149,-151,-152,-153,-155,-156,-157,-158,-159,-161,-162,-163,-164,-166,-167,-168,-169,-170,-171,-173,-174,-175,-176,-177,-178,-179 +dw -181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,-192,-193,-194,-195,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-211 +dw -212,-213,-214,-215,-216,-217,-217,-218,-219,-220,-221,-221,-222,-223,-224,-225,-225,-226,-227,-227,-228,-229,-230,-230,-231,-232,-232,-233,-234,-234,-235,-235 +dw -236,-237,-237,-238,-238,-239,-239,-240,-241,-241,-242,-242,-243,-243,-244,-244,-244,-245,-245,-246,-246,-247,-247,-247,-248,-248,-249,-249,-249,-250,-250,-250 +dw -251,-251,-251,-251,-252,-252,-252,-252,-253,-253,-253,-253,-254,-254,-254,-254,-254,-254,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255 +dw -256,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-254,-254,-254,-254,-254,-254,-253,-253,-253,-253,-252,-252,-252,-252,-251,-251,-251 +dw -251,-250,-250,-250,-249,-249,-249,-248,-248,-247,-247,-247,-246,-246,-245,-245,-244,-244,-244,-243,-243,-242,-242,-241,-241,-240,-239,-239,-238,-238,-237,-237 +dw -236,-235,-235,-234,-234,-233,-232,-232,-231,-230,-230,-229,-228,-227,-227,-226,-225,-225,-224,-223,-222,-221,-221,-220,-219,-218,-217,-217,-216,-215,-214,-213 +dw -212,-211,-211,-210,-209,-208,-207,-206,-205,-204,-203,-202,-201,-200,-199,-198,-197,-196,-195,-194,-193,-192,-191,-190,-189,-188,-187,-186,-185,-184,-183,-182 +dw -181,-179,-178,-177,-176,-175,-174,-173,-171,-170,-169,-168,-167,-166,-164,-163,-162,-161,-159,-158,-157,-156,-155,-153,-152,-151,-149,-148,-147,-146,-144,-143 +dw -142,-140,-139,-138,-136,-135,-134,-132,-131,-130,-128,-127,-126,-124,-123,-122,-120,-119,-117,-116,-115,-113,-112,-110,-109,-108,-106,-105,-103,-102,-100,-99 +dw -97,-96,-95,-93,-92,-90,-89,-87,-86,-84,-83,-81,-80,-78,-77,-75,-74,-72,-71,-69,-68,-66,-65,-63,-62,-60,-59,-57,-56,-54,-53,-51 +dw -49,-48,-46,-45,-43,-42,-40,-39,-37,-36,-34,-32,-31,-29,-28,-26,-25,-23,-21,-20,-18,-17,-15,-14,-12,-10,-9,-7,-6,-4,-3,-1 diff --git a/DDSTARS/STARS.ASM b/DDSTARS/STARS.ASM new file mode 100644 index 0000000..a61de7f --- /dev/null +++ b/DDSTARS/STARS.ASM @@ -0,0 +1,803 @@ +;included to koe.asm + +.386 + +include polyega.asm + +STARS equ 512 +STARS2 equ 1024 + +starvram dw 0a000h +emmhandle dw 0 +emmseg dw 0 +emmpage4 dw 0 +starlimit dw 0 +startxtopen dw 0 +startxtclose dw 0 +startxtp0 dw 0 +starframe dw 0 +starpalfade db 0,0 +_nostar1 dw 200 +_nostar2 dw 199 + +rows1 dw 200 dup(0) +rows dw 400 dup(0) + +star dw STARS2 dup(0,0,0,0) + +muldivx dw 256 dup(0) +muldivy dw 256 dup(0) + +ALIGN 2 +seed dd 0 ;12345678h +random PROC NEAR + push edx + mov eax,0343fdh + mul cs:seed + add eax,269ec3h + mov cs:seed,eax + mov ax,dx + pop edx + ret +random ENDP + +setborder PROC NEAR + push ax + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,11h+20h + out dx,al + pop ax + out dx,al + ret +setborder ENDP + +init_stars PROC NEAR + mov ax,13 + int 10h + + mov dx,3dah + in al,dx + mov dx,3c0h + xor al,al + REPT 16 + out dx,al + out dx,al + inc al + ENDM + mov al,20h + out dx,al + + mov dx,3d4h + mov al,9 + out dx,al + inc dx + in al,dx + and al,127 + out dx,al + + mov ax,0a000h + mov es,ax + xor di,di + mov cx,32768 + xor ax,ax + rep stosw + + mov ah,43h + mov bx,32*2 + int 67h + or ah,ah + jz @@1 + mov ax,4c00h + int 21h +@@1: mov cs:emmhandle,dx + + mov ah,41h + int 67h + mov cs:emmseg,bx + + call clearsbu + + mov cx,200 + mov ax,0 + mov dx,320/8 + mov bx,OFFSET rows1 +@@4: mov cs:[bx],ax + add ax,dx + add bx,2 + loop @@4 + + mov cx,400 + mov ax,0 + mov dx,320/8 + mov bx,OFFSET rows +@@4b: mov cs:[bx],ax + add ax,dx + add bx,2 + loop @@4b + + mov ax,cs + mov es,ax + + mov di,OFFSET star + mov cx,STARS2 +@@3: mov al,cl + dec al + xor ah,ah + stosw + call random + and ax,1023 + sub ax,512 + stosw + call random + and ax,1023 + sub ax,512 + stosw + xor ax,ax + stosw + loop @@3 + + mov di,OFFSET muldivy + mov cx,256 + mov bp,150 +@@2b: mov dx,108 + xor ax,ax + div bp + shr ax,1 + stosw + add bp,4 + loop @@2b + + mov di,OFFSET muldivx + mov cx,256 + mov bp,150 +@@2c: mov dx,144 + xor ax,ax + div bp + shr ax,1 + stosw + add bp,4 + loop @@2c + + mov cs:starlimit,STARS + mov cs:starpalfade,0 + + mov cs:startxtopen,-9999 + mov cs:startxtclose,10000 + + mov cx,100 +@@sa: push cx + call starfetch0 + call staradd + pop cx + loop @@sa + ret +init_stars ENDP + +deinit_stars PROC NEAR + mov ah,45h + mov dx,cs:emmhandle + int 67h + ret +deinit_stars ENDP + +fetch4ax PROC NEAR + shl ax,1 + mov bx,ax + push ax + mov ax,4400h + shr bx,2 + mov dx,cs:emmhandle + int 67h + pop ax + and ax,3 + shl ax,12-4 + add ax,cs:emmseg + ret +fetch4ax ENDP + +fetch4ax2 PROC NEAR + shl ax,1 + mov bx,ax + push ax + mov ax,4401h + shr bx,2 + mov dx,cs:emmhandle + int 67h + pop ax + and ax,3 + shl ax,12-4 + add ax,cs:emmseg + add ax,400h + ret +fetch4ax2 ENDP + +fetch4ax3 PROC NEAR + shl ax,1 + mov bx,ax + push ax + mov ax,4402h + shr bx,2 + mov dx,cs:emmhandle + int 67h + pop ax + and ax,3 + shl ax,12-4 + add ax,cs:emmseg + add ax,800h + ret +fetch4ax3 ENDP + +clearsbu PROC NEAR + mov cx,128 + mov ax,0 +@@1: push cx + push ax + call fetch4ax + mov es,ax + mov cx,4096/4*2 + xor eax,eax + xor di,di + rep stosd + pop ax + pop cx + inc ax + loop @@1 + ret +clearsbu ENDP + +starfetch0 PROC NEAR + mov ax,cs:emmpage4 + inc ax + and ax,63 + mov cs:emmpage4,ax + call fetch4ax + mov es,ax + ret +starfetch0 ENDP + +starfetch1 PROC NEAR + mov ax,cs:emmpage4 + add ax,17 + and ax,63 + call fetch4ax2 + mov fs,ax + ret +starfetch1 ENDP + +starfetch2 PROC NEAR + mov ax,cs:emmpage4 + add ax,43 + and ax,63 + call fetch4ax3 + mov gs,ax + ret +starfetch2 ENDP + +staradd PROC NEAR + mov ax,cs + mov ds,ax + mov ax,ds:starlimit + or ax,ax + jz @@11 + dec ax + mov ds:starlimit,ax +@@11: mov bp,STARS + mov si,OFFSET star +@@1: movzx bx,ds:[si] + sub bl,2 + mov ds:[si],bl + jc @@4 + cmp bp,cs:starlimit + jb @@2 + shl bx,1 + mov ax,ds:[si+4] + imul ds:muldivy[bx] + shld dx,ax,2 + add dx,100 + cmp dx,99 + ja @@2 + mov cx,dx + mov ax,ds:[si+2] + imul ds:muldivx[bx] + mov bx,cx + shld dx,ax,2 + add dx,160 + cmp dx,319 + ja @@2 + mov cl,dl + and cl,7 + shr dx,3 + shl bx,1 + mov bx,ds:rows1[bx] + add bx,dx + mov ch,80h + shr ch,cl + mov cl,ds:[si] + cmp cl,180 + jb @@sc1 + or byte ptr es:[bx],ch + jmp @@2 +@@sc1: cmp cl,110 + jb @@sc2 + or byte ptr es:[bx+4096],ch + jmp @@2 +@@sc2: or byte ptr es:[bx],ch + or byte ptr es:[bx+4096],ch +@@2: add si,8 + dec bp + jnz @@1 + ret +@@4: call random + and ax,1023 + sub ax,512 + mov cs:[si+2],ax + call random + and ax,1023 + sub ax,512 + mov cs:[si+4],ax + jmp @@2 +staradd ENDP + +staradd2 PROC NEAR + call starfetch1 + mov ax,cs + mov ds,ax + mov ax,ds:starlimit + or ax,ax + jz @@11 + sub ax,4 + mov ds:starlimit,ax +@@11: mov bp,STARS2 + mov si,OFFSET star +@@1: movzx bx,ds:[si] + sub bl,2 + mov ds:[si],bl + jc @@4 + cmp bp,cs:starlimit + jb @@2 + shl bx,1 + mov ax,ds:[si+4] + imul ds:muldivy[bx] + shld dx,ax,2 + add dx,100 + cmp dx,99 + ja @@2 + mov cx,dx + mov ax,ds:[si+2] + imul ds:muldivx[bx] + mov bx,cx + shld dx,ax,2 + add dx,160 + cmp dx,319 + ja @@2 + mov cl,dl + and cl,7 + shr dx,3 + shl bx,1 + mov bx,ds:rows1[bx] + add bx,dx + mov ch,80h + shr ch,cl + mov cl,ds:[si] + cmp cl,180 + jb @@sc1 + or byte ptr es:[bx],ch + or byte ptr fs:[bx],ch + jmp @@2 +@@sc1: cmp cl,110 + jb @@sc2 + or byte ptr es:[bx+4096],ch + or byte ptr fs:[bx+4096],ch + jmp @@2 +@@sc2: or byte ptr es:[bx],ch + or byte ptr es:[bx+4096],ch + or byte ptr fs:[bx],ch + or byte ptr fs:[bx+4096],ch +@@2: add si,8 + dec bp + jnz @@1 + ret +@@4: call random + and ax,1023 + sub ax,512 + mov cs:[si+2],ax + call random + and ax,1023 + sub ax,512 + mov cs:[si+4],ax + jmp @@2 +staradd2 ENDP + +risetext PROC NEAR + mov ax,cs:startxtopen + cmp ax,99 + jge @@12 + inc ax + mov cs:startxtopen,ax +@@12: mov dx,cs:startxtclose + cmp dx,0 + jle @@21 + dec dx + mov cs:startxtclose,dx +@@21: cmp dx,ax + jge @@22 + mov ax,dx +@@22: ;ax=startxtuse + + cmp ax,0 + jg @@tcc + jmp @@tc0 +@@tcc: cmp ax,1 + jg @@tnz + mov ax,2 +@@tnz: push ax + mov di,150 + sub di,ax + mov cs:_nostar2,ax + mov ax,80 + mul di + mov di,ax + mov cs:_nostar1,di + mov ax,SEG _textpic + mov ds,ax + mov si,040h + add si,cs:startxtp0 + pop cx + dec cx + + sub di,40 + mov dx,3c4h + mov ax,0f02h + out dx,ax + xor eax,eax + zzz=0 + REPT 40/4 + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + add di,80 + dec cx + jz @@tc0c + + mov dx,3c4h + mov ax,0f02h + out dx,ax + mov eax,0 + zzz=0 + REPT 40/4 + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + add di,80 + dec cx + jz @@tc0 + dec cx + jz @@tc0b + + mov dx,3ceh + mov ax,0400h + out dx,ax + mov ax,01h+400h+800h + out dx,ax + +@@tc1: mov dx,3c4h + mov ax,0102h+400h+800h + out dx,ax + zzz=0 + REPT 40/4 + mov eax,ds:[si+zzz] + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + add si,40 + mov dx,3c4h + mov ax,0202h+400h+800h + out dx,ax + zzz=0 + REPT 40/4 + mov eax,ds:[si+zzz] + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + add si,40 + add di,80 + dec cx + jz @@tc0b + jmp @@tc1 + +@@tc0b: mov dx,3ceh + mov ax,0001h + out dx,ax + + mov dx,3c4h + mov ax,0f02h + out dx,ax + mov eax,0 + zzz=0 + REPT 40/4 + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + add di,80 + + dec di + mov cs:_nostar2,di +@@tc0: ret +@@tc0c: mov dx,3c4h + mov ax,0f02h + out dx,ax + xor eax,eax + zzz=0 + REPT 80/4 + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + ret +risetext ENDP + +do_stars PROC NEAR +@@aga: mov al,0 + ;call setborder + + mov dx,3d4h + mov ax,cs:starvram + cmp ax,0a000h + je @@sw1 + mov cs:starvram,0a000h + mov ax,400ch + jmp @@sw0 +@@sw1: mov cs:starvram,0a400h + mov ax,000ch +@@sw0: out dx,ax + call waitb + + mov al,1 + ;call setborder + + cmp cs:starpalfade,32 + ja @@p1 + + mov bl,cs:starpalfade + inc bl + mov cs:starpalfade,bl + shl bl,3 + jnc @@p2 + mov bl,255 +@@p2: + mov dx,3c8h + xor al,al + out dx,al + inc dx + + mov al,0 + out dx,al + mov al,0 + out dx,al + mov al,0 + out dx,al + + mov al,25*70/100 + mul bl + mov al,ah + out dx,al + mov al,31*70/100 + mul bl + mov al,ah + out dx,al + mov al,38*70/100 + mul bl + mov al,ah + out dx,al + + mov al,45*56/100 + mul bl + mov al,ah + out dx,al + mov al,58*56/100 + mul bl + mov al,ah + out dx,al + mov al,69*56/100 + mul bl + mov al,ah + out dx,al + + mov al,67*64/100 + mul bl + mov al,ah + out dx,al + mov al,84*64/100 + mul bl + mov al,ah + out dx,al + mov al,99*64/100 + mul bl + mov al,ah + out dx,al + + ;----- + + mov al,0 + out dx,al + mov al,0 + out dx,al + mov al,0 + out dx,al + + mov al,10 + out dx,al + mov al,20 + out dx,al + mov al,35 + out dx,al + + mov al,20 + out dx,al + mov al,30 + out dx,al + mov al,45 + out dx,al + + mov al,30 + out dx,al + mov al,40 + out dx,al + mov al,60 + out dx,al +@@p1: + mov ax,cs:starframe + inc ax + mov cs:starframe,ax + cmp ax,1200 + jne @@st1 + mov cs:startxtp0,80 + mov cs:startxtopen,-256 + mov cs:startxtclose,1500 +@@st1: cmp ax,3200 + jne @@st2 + mov cs:startxtp0,101*80 + mov cs:startxtopen,-256 + mov cs:startxtclose,1500 +@@st2: cmp ax,1500 + jne @@st3 + mov cs:starlimit,STARS2 +@@st3: + call risetext + + call starfetch0 + cmp cs:starframe,1200 + ja @@stz + cmp cs:starframe,900 + ja @@stz0 + call staradd + jmp @@stz0 +@@stz: call staradd2 + ;mov al,1 + ;call setborder +@@stz0: + mov ax,es + mov ds,ax + + mov ax,cs:starvram + mov es,ax + xor di,di + mov dx,3c4h + mov ax,0102h + out dx,ax + mov si,0 + mov cx,100 +@@3: zzz=0 +; cmp di,cs:_nostar1 +; jl @@3g +; cmp di,cs:_nostar2 +; jg @@3g +; jmp @@3s +@@3g: REPT 40/4 + mov eax,ds:[si+zzz] + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM +@@3s: add si,40 + add di,80 + loop @@3 + xor di,di + mov si,4096 + mov dx,3c4h + mov ax,0202h + out dx,ax + mov cx,100 +@@7: zzz=0 +; cmp di,cs:_nostar1 +; jl @@7g +; cmp di,cs:_nostar2 +; jg @@7g +; jmp @@7s +@@7g: REPT 40/4 + mov eax,ds:[si+zzz] + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM +@@7s: add si,40 + add di,80 + loop @@7 + + mov ax,cs:emmpage4 + add ax,32 + and ax,63 + call fetch4ax + mov ds,ax + mov di,200*40 + mov si,99*40 + mov dx,3c4h + mov ax,0102h + out dx,ax + mov cx,100 +@@5: zzz=0 +; cmp di,cs:_nostar1 +; jl @@5g +; cmp di,cs:_nostar2 +; jg @@5g +; jmp @@5s +@@5g: REPT 40/4 + mov eax,ds:[si+zzz] + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM +@@5s: sub si,40 + add di,80 + loop @@5 + mov di,200*40 + mov si,99*40+4096 + mov dx,3c4h + mov ax,0202h + out dx,ax + mov cx,100 +@@8: zzz=0 +; cmp di,cs:_nostar1 +; jl @@8g +; cmp di,cs:_nostar2 +; jg @@8g +; jmp @@8s +@@8g: REPT 40/4 + mov eax,ds:[si+zzz] + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM +@@8s: sub si,40 + add di,80 + loop @@8 + + mov bx,2 + int 0fch + or ax,ax + jz @@aga + ret + + mov ax,0a000h + mov ds,ax + xor si,si + mov cx,40*400 + mov dx,0 +@@1: lodsb + shl al,1 + adc dx,0 + shl al,1 + adc dx,0 + shl al,1 + adc dx,0 + shl al,1 + adc dx,0 + shl al,1 + adc dx,0 + shl al,1 + adc dx,0 + shl al,1 + adc dx,0 + shl al,1 + adc dx,0 + loop @@1 + int 3 + ret +do_stars ENDP diff --git a/DDSTARS/STARS.OK b/DDSTARS/STARS.OK new file mode 100644 index 0000000..3abbea5 --- /dev/null +++ b/DDSTARS/STARS.OK @@ -0,0 +1,650 @@ +;included to koe.asm + +.386 + +include polyega.asm + +STARS equ 512 + +starvram dw 0a000h +emmhandle dw 0 +emmseg dw 0 +emmpage4 dw 0 +starlimit dw 0 +startxtopen dw 0 +startxtclose dw 0 +startxtp0 dw 0 +starframe dw 0 +starpalfade db 0,0 +_nostar1 dw 200 +_nostar2 dw 199 + +rows1 dw 200 dup(0) +rows dw 400 dup(0) + +star dw STARS dup(0,0,0,0) + +muldivx dw 256 dup(0) +muldivy dw 256 dup(0) + +ALIGN 2 +seed1 dw 1234 +seed2 dw 1234 +random PROC NEAR + push dx + mov dx,cs:seed2 + mov ax,cs:seed1 + shl ax,1 + jnc @@1 + xor ax,0f7ffh +@@1: mov cs:seed1,ax + sub dx,ax + xor ax,dx + rol dx,1 + mov cs:seed2,dx + pop dx + ret +random ENDP + +setborder PROC NEAR + push ax + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,11h+20h + out dx,al + pop ax + out dx,al + ret +setborder ENDP + +init_stars PROC NEAR + mov ax,13 + int 10h + + mov dx,3dah + in al,dx + mov dx,3c0h + xor al,al + REPT 16 + out dx,al + out dx,al + inc al + ENDM + mov al,20h + out dx,al + + mov dx,3d4h + mov al,9 + out dx,al + inc dx + in al,dx + and al,127 + out dx,al + + mov ax,0a000h + mov es,ax + xor di,di + mov cx,32768 + xor ax,ax + rep stosw + + mov ah,43h + mov bx,32 + int 67h + mov cs:emmhandle,dx + + mov ah,41h + int 67h + mov cs:emmseg,bx + + call clearsbu + + mov cx,200 + mov ax,0 + mov dx,320/8 + mov bx,OFFSET rows1 +@@4: mov cs:[bx],ax + add ax,dx + add bx,2 + loop @@4 + + mov cx,400 + mov ax,0 + mov dx,320/8 + mov bx,OFFSET rows +@@4b: mov cs:[bx],ax + add ax,dx + add bx,2 + loop @@4b + + mov ax,cs + mov es,ax + + mov di,OFFSET star + mov cx,STARS +@@3: mov al,cl + dec al + xor ah,ah + stosw + call random + and ax,1023 + sub ax,512 + stosw + call random + and ax,1023 + sub ax,512 + stosw + xor ax,ax + stosw + loop @@3 + + mov di,OFFSET muldivy + mov cx,256 + mov bp,130 +@@2b: mov dx,64 + xor ax,ax + div bp + shr ax,1 + stosw + add bp,4 + loop @@2b + + mov di,OFFSET muldivx + mov cx,256 + mov bp,130 +@@2c: mov dx,80 ;64 + xor ax,ax + div bp + shr ax,1 + stosw + add bp,4 + loop @@2c + + mov cs:starlimit,STARS + mov cs:starpalfade,0 + + mov cs:startxtopen,-256 + mov cs:startxtclose,800 + + mov cx,100 +@@sa: push cx + call staradd + pop cx + loop @@sa + ret +init_stars ENDP + +deinit_stars PROC NEAR + mov ah,45h + mov dx,cs:emmhandle + int 67h + ret +deinit_stars ENDP + +fetch4ax PROC NEAR + mov bx,ax + push ax + mov ax,4400h + shr bx,2 + mov dx,cs:emmhandle + int 67h + pop ax + and ax,3 + shl ax,12-4 + add ax,cs:emmseg + ret +fetch4ax ENDP + +clearsbu PROC NEAR + mov cx,128 + mov ax,0 +@@1: push cx + push ax + call fetch4ax + mov es,ax + mov cx,4096/4 + xor eax,eax + xor di,di + rep stosd + pop ax + pop cx + inc ax + loop @@1 + ret +clearsbu ENDP + +staradd PROC NEAR + mov ax,cs:emmpage4 + inc ax + and ax,127 + mov cs:emmpage4,ax + call fetch4ax + mov es,ax + + mov ax,cs + mov ds,ax + mov ax,ds:starlimit + or ax,ax + jz @@11 + dec ax + mov ds:starlimit,ax +@@11: mov bp,STARS + mov si,OFFSET star +@@1: movzx bx,ds:[si] + sub bl,2 + mov ds:[si],bl + jc @@4 + cmp bp,cs:starlimit + jb @@2 + shl bx,1 + mov ax,ds:[si+4] + imul ds:muldivy[bx] + shld dx,ax,2 + add dx,100 + cmp dx,99 + ja @@2 + mov cx,dx + mov ax,ds:[si+2] + imul ds:muldivx[bx] + mov bx,cx + shld dx,ax,2 + add dx,160 + cmp dx,319 + ja @@2 + mov cl,dl + and cl,7 + shr dx,3 + shl bx,1 + mov bx,ds:rows1[bx] + add bx,dx + mov ch,80h + shr ch,cl + or byte ptr es:[bx],ch +@@2: add si,8 + dec bp + jnz @@1 + ret +@@4: call random + and ax,1023 + sub ax,512 + mov cs:[si+2],ax + call random + and ax,1023 + sub ax,512 + mov cs:[si+4],ax + jmp @@2 +staradd ENDP + +risetext PROC NEAR + mov ax,cs:startxtopen + cmp ax,100 + jge @@12 + inc ax + mov cs:startxtopen,ax +@@12: mov dx,cs:startxtclose + cmp dx,0 + jle @@21 + dec dx + mov cs:startxtclose,dx +@@21: cmp dx,ax + jge @@22 + mov ax,dx +@@22: ;ax=startxtuse + + cmp ax,0 + jg @@tcc + jmp @@tc0 +@@tcc: cmp ax,1 + jg @@tnz + mov ax,2 +@@tnz: push ax + mov di,250 + sub di,ax + mov cs:_nostar2,ax + mov ax,40 + mul di + mov di,ax + inc di + mov cs:_nostar1,di + dec di + mov ax,SEG _textpic + mov ds,ax + mov si,040h + add si,cs:startxtp0 + pop cx + dec cx + + sub di,80 + mov dx,3c4h + mov ax,0f02h + out dx,ax + xor eax,eax + zzz=0 + REPT 80/4 + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + add di,80 + dec cx + jz @@tc0c + + mov dx,3c4h + mov ax,0f02h + out dx,ax + mov eax,-1 + zzz=0 + REPT 40/4 + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + add di,40 + dec cx + jz @@tc0 + dec cx + jz @@tc0b + + mov dx,3ceh + mov ax,0400h + out dx,ax + mov ax,01h+400h+800h + out dx,ax + +@@tc1: mov dx,3c4h + mov ax,0102h+400h+800h + out dx,ax + zzz=0 + REPT 40/4 + mov eax,ds:[si+zzz] + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + add si,40 + mov dx,3c4h + mov ax,0202h+400h+800h + out dx,ax + zzz=0 + REPT 40/4 + mov eax,ds:[si+zzz] + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + add si,40 + add di,40 + dec cx + jz @@tc0b + jmp @@tc1 + +@@tc0b: mov dx,3ceh + mov ax,0001h + out dx,ax + + mov dx,3c4h + mov ax,0f02h + out dx,ax + mov eax,-1 + zzz=0 + REPT 40/4 + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + add di,40 + + dec di + mov cs:_nostar2,di +@@tc0: ret +@@tc0c: mov dx,3c4h + mov ax,0f02h + out dx,ax + xor eax,eax + zzz=0 + REPT 80/4 + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM + ret +risetext ENDP + +do_stars PROC NEAR +@@aga: mov al,0 + ;call setborder + + mov dx,3d4h + mov ax,cs:starvram + cmp ax,0a000h + je @@sw1 + mov cs:starvram,0a000h + mov ax,400ch + jmp @@sw0 +@@sw1: mov cs:starvram,0a400h + mov ax,000ch +@@sw0: out dx,ax + call waitb + + mov al,5 + ;call setborder + + cmp cs:starpalfade,32 + ja @@p1 + + mov bl,cs:starpalfade + inc bl + mov cs:starpalfade,bl + shl bl,3 + jnc @@p2 + mov bl,255 +@@p2: + mov dx,3c8h + xor al,al + out dx,al + inc dx + + mov al,0 + out dx,al + mov al,0 + out dx,al + mov al,0 + out dx,al + + mov al,5 + mul bl + mov al,ah + out dx,al + mov al,35 + mul bl + mov al,ah + out dx,al + mov al,35 + mul bl + mov al,ah + out dx,al + + mov al,30 + mul bl + mov al,ah + out dx,al + mov al,50 + mul bl + mov al,ah + out dx,al + mov al,50 + mul bl + mov al,ah + out dx,al + + mov al,61 + mul bl + mov al,ah + out dx,al + mov al,61 + mul bl + mov al,ah + out dx,al + mov al,61 + mul bl + mov al,ah + out dx,al + + ;----- + + mov al,0 + out dx,al + mov al,0 + out dx,al + mov al,0 + out dx,al + + mov al,10 + out dx,al + mov al,20 + out dx,al + mov al,35 + out dx,al + + mov al,20 + out dx,al + mov al,30 + out dx,al + mov al,45 + out dx,al + + mov al,30 + out dx,al + mov al,40 + out dx,al + mov al,60 + out dx,al +@@p1: + mov ax,cs:starframe + inc ax + mov cs:starframe,ax + cmp ax,4 + jne @@st1 + mov cs:startxtp0,80 + mov cs:startxtopen,-256-100 + mov cs:startxtclose,800+100 +@@st1: cmp ax,1200 + jne @@st2 + mov cs:startxtp0,101*80 + mov cs:startxtopen,-256 + mov cs:startxtclose,800 +@@st2: + call risetext + + call staradd + + mov ax,es + mov ds,ax + xor si,si + + mov dx,3c4h + mov ax,0102h + out dx,ax + + mov ax,cs:starvram + mov es,ax + xor di,di + mov cx,100 +@@3: zzz=0 + cmp di,cs:_nostar1 + jl @@3g + cmp di,cs:_nostar2 + jg @@3g + jmp @@3s +@@3g: REPT 40/4 + mov eax,ds:[si+zzz] + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM +@@3s: add si,40 + add di,80 + loop @@3 + + mov ax,cs:emmpage4 + add ax,32 + and ax,127 + call fetch4ax + mov ds,ax + mov si,99*40 + mov cx,100 +@@5: zzz=0 + cmp di,cs:_nostar1 + jl @@5g + cmp di,cs:_nostar2 + jg @@5g + jmp @@5s +@@5g: REPT 40/4 + mov eax,ds:[si+zzz] + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM +@@5s: sub si,40 + add di,80 + loop @@5 + + mov dx,3c4h + mov ax,0202h + out dx,ax + + mov di,40 + mov ax,cs:emmpage4 + add ax,64 + and ax,127 + call fetch4ax + mov ds,ax + xor si,si + mov cx,100 +@@7: zzz=0 + cmp di,cs:_nostar1 + jl @@7g + cmp di,cs:_nostar2 + jg @@7g + jmp @@7s +@@7g: REPT 40/4 + mov eax,ds:[si+zzz] + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM +@@7s: add si,40 + add di,80 + loop @@7 + + mov ax,cs:emmpage4 + add ax,96 + and ax,127 + call fetch4ax + mov ds,ax + mov si,99*40 + mov cx,100 +@@8: zzz=0 + cmp di,cs:_nostar1 + jl @@8g + cmp di,cs:_nostar2 + jg @@8g + jmp @@8s +@@8g: REPT 40/4 + mov eax,ds:[si+zzz] + mov es:[di+zzz],eax + zzz=zzz+4 + ENDM +@@8s: sub si,40 + add di,80 + loop @@8 + +; mov dx,3c4h +; mov ax,0f02h +; out dx,ax +; mov cs:polysides,4 +; mov dword ptr cs:polyxy[0], 10000h*10+10+01000000h +; mov dword ptr cs:polyxy[4], 10000h*310+10+01000000h +; mov dword ptr cs:polyxy[8], 10000h*310+390+01000000h +; mov dword ptr cs:polyxy[12],10000h*10+390+01000000h +; int 3 +; call poly + + mov bx,2 + int 0fch + or ax,ax + jz @@aga + ret +do_stars ENDP diff --git a/DDSTARS/STARS.PRE b/DDSTARS/STARS.PRE new file mode 100644 index 0000000..25c6f72 --- /dev/null +++ b/DDSTARS/STARS.PRE @@ -0,0 +1,241 @@ +;included to koe.asm + +.386 + +STARS equ 4800 + +rows1 dw 100 dup(0) + dw 2*28 dup(64000) + dw 100 dup(0) + +d1seg dw 0 +d1segp dw 4 +d2seg dw 0 +d2segp dw 4 +d3seg dw 0 +d3segp dw 4 +d4seg dw 0 +d4segp dw 4 + +ALIGN 2 +seed1 dw 1234 +seed2 dw 1234h +random PROC NEAR + push bx + push cx + push dx + mov ax,ds:seed1 + mov bx,ds:seed2 + mov cx,ax + mov dx,bx + add cx,bx + add ax,bx + rol ax,cl + xor ax,dx + xchg cl,ch + add bx,cx + add dx,bx + add cx,ax + ror bx,1 + sbb ax,dx + mov ds:seed2,dx + mov ds:seed1,ax + pop dx + pop cx + pop bx + ret +random ENDP + +setborder PROC NEAR + push ax + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,11h+20h + out dx,al + pop ax + out dx,al + ret +setborder ENDP + +brandom PROC NEAR + call random + mov bx,ax + call random + rol ax,4 + xor ax,bx + ret +brandom ENDP + +ALIGN 2 +tmpx dw 0,0 +tmpy dw 0,0 + +init_stars_2 PROC NEAR +@@6: call brandom + shr ax,6 + sub ax,512 + cwd + shld dx,ax,7 + shl ax,7 + mov ds:tmpx[0],ax + mov ds:tmpx[2],dx + + call brandom + shr ax,6 + sub ax,512 + cwd + shld dx,ax,7 + shl ax,7 + mov ds:tmpy[0],ax + mov ds:tmpy[2],dx + + mov cx,128 + mov bp,64+1024 + mov si,di +@@5: mov ax,ds:tmpx[0] + mov dx,ds:tmpx[2] + idiv bp + add ax,100 + cmp ax,199 + ja @@7 + mov bx,ax + shl bx,1 + mov bx,ds:rows1[bx] + mov ax,ds:tmpy[0] + mov dx,ds:tmpy[2] + idiv bp + add ax,160 + cmp ax,319 + ja @@7 + add bx,ax + ;mov byte ptr fs:[bx],2 + mov es:[di],bx + add di,2 + jz @@8 + sub bp,8 + loop @@5 +@@7: jmp @@6 + +@@8: mov word ptr es:[si],64000 + add si,2 + jnz @@8 + ret +init_stars_2 ENDP + +init_stars PROC NEAR + mov ax,13h + int 10h + ;set screen width to 320-8 pixs + mov dx,3d4h + mov al,11h + out dx,al + inc dx + in al,dx + and al,127 + out dx,al + ; + mov ah,48h + mov bx,4096 + int 21h + mov cs:d1seg,ax + mov ah,48h + mov bx,4096 + int 21h + mov cs:d2seg,ax + mov ah,48h + mov bx,4096 + int 21h + mov cs:d3seg,ax + mov ah,48h + mov bx,4096 + int 21h + mov cs:d4seg,ax + + mov cx,200 + mov ax,0 + mov dx,320 + mov bx,OFFSET rows1 +@@4: mov cs:[bx],ax + add ax,dx + add bx,2 + loop @@4 + + mov ax,cs + mov ds,ax + mov ax,0a000h + mov fs,ax + + mov es,ds:d1seg + xor di,di + call init_stars_2 + + mov es,ds:d2seg + xor di,di + call init_stars_2 + + mov es,ds:d3seg + xor di,di + call init_stars_2 + + mov es,ds:d4seg + xor di,di + call init_stars_2 + + ret +init_stars ENDP + +do_stars_2 PROC NEAR + mov ax,7 + zzz=0 + REPT 256*4 + mov ebx,ds:[si+zzz+0] + mov es:[bx],ah + shr ebx,16 + mov es:[bx],al + zzz=zzz+64 + ENDM + ret +do_stars_2 ENDP + +do_stars PROC NEAR +@@aga: mov al,0 + call setborder + call waitb + mov al,1 + call setborder + + mov ax,0a000h + mov es,ax + + mov ds,cs:d1seg + mov si,cs:d1segp + add si,2 + mov cs:d1segp,si +; call do_stars_2 + + mov ds,cs:d2seg + mov si,cs:d2segp + add si,2 + mov cs:d2segp,si +; call do_stars_2 + + mov ds,cs:d3seg + mov si,cs:d3segp + add si,2 + mov cs:d3segp,si +; call do_stars_2 + + mov ds,cs:d4seg + mov si,cs:d4segp + add si,2 + mov cs:d4segp,si +; call do_stars_2 + + mov bx,2 + int 0fch + or ax,ax + jnz @@end + jmp @@aga +@@end: ret +do_stars ENDP diff --git a/DDSTARS/TEST/KOE.C b/DDSTARS/TEST/KOE.C new file mode 100644 index 0000000..2f9efa1 --- /dev/null +++ b/DDSTARS/TEST/KOE.C @@ -0,0 +1,24 @@ +#include +#include "graph.h" + +main() +{ + int x,y,z,sx,sy,a; + _setvideomode(_VRES16COLOR); + for(a=0;a<19200;a++) + { + x=a%26; + y=a/26%26; + z=a/26/26%26; + x=(x-13)*64; + y=(y-13)*64; + z=z*32+64; + sx=100*x/z+320; + sy=100*y/z+240; + if(a&1) _setcolor(15); + else _setcolor(3+8); + _setpixel(sx,sy); + } + getch(); + _setvideomode(_DEFAULTMODE); +} diff --git a/DDSTARS/TEST/KOE.EXE b/DDSTARS/TEST/KOE.EXE new file mode 100644 index 0000000..4f71ca6 Binary files /dev/null and b/DDSTARS/TEST/KOE.EXE differ diff --git a/DDSTARS/TEXTS.16 b/DDSTARS/TEXTS.16 new file mode 100644 index 0000000..e80ee9e Binary files /dev/null and b/DDSTARS/TEXTS.16 differ diff --git a/DDSTARS/TEXTS.LBM b/DDSTARS/TEXTS.LBM new file mode 100644 index 0000000..9a06879 Binary files /dev/null and b/DDSTARS/TEXTS.LBM differ diff --git a/DDSTARS/_TEXTPIC.OBK b/DDSTARS/_TEXTPIC.OBK new file mode 100644 index 0000000..2d2574a Binary files /dev/null and b/DDSTARS/_TEXTPIC.OBK differ diff --git a/DESIGN b/DESIGN new file mode 100644 index 0000000..8953804 --- /dev/null +++ b/DESIGN @@ -0,0 +1,219 @@ + S:E:C:O:N:D:::R:E:A:L:I:T:Y: + +[leffamusaa] + +- Setup screeni grafiikkatilaan, joka n„ytt„„ tekstilt„ +- Kun stuhvit valittu, lent„„ polygoniface kohti katsojaa muuttaen + ruudun valkoiseksi +- hidas fade mustaksi +- leffatyylitekstit mustalla + +" A +" FUTURE CREW +" production + +" First presented at +" Assembly '93 + + fade leve„„n horisonttikuvaan 960x480 + ^himme„ reunoilta, widescreen (35mm-70mm) + kuva alkaa scrollata hitaasti vasemmalle + tekstit p„„ll„,eiv„t scrollaa + +" Graphics by ... + + jyrin„ alkaa voimistua hiljalleen (surround) + +" Music by ... + + ... + + Music By:n kohdassa ylimassiivista musaa + ja ylisiisti„ grafua.. jokapuolella + v„lkkyy Purple Motion ja t„m„n j„lkeen + infra„„ni ylitse muiden hajoittaa kaiuttimet + ja kaikki koulun ikkunat.. loppujen lopuksi + partylaisten syd„met tahdistuvat bassobeatin tahtiin + ja kun sitten musiikki ep„tahdistuu, koko demoscene saa + yhden ison syd„nkohtauksen ja kuolee pois.. + lopulta demokone r„j„ht„„ ja sytytt„„ koko koulun tuleen + ja h„vitt„„ n„in kaiken todistusaineiston.. + +" Code by ... + + jyrin„ ns. t„ysill„ + suuri vektorialus lent„„ yli, pohjassa erikoisdetailia + 500 polygonia + lent„„ horisonttiin lujaa + v„l„ht„„ rengasvallina, kuten Startrek VI:n alussa Praxis + v„l„hdys kasvaa ja lent„„ kohti katsojaa (surround) + ruutu v„l„ht„„ +[pamaus, technoksi] + nopea fade, ensin logo mustavalkoiseen ja sitten v„rit. + + ruutu py”r„ht„„ ymp„ri (precalc alkutekstien aikana) + + 45 asteen k„„nn”s, lopuksi n„kyy vain ruudun 'reuna' + + toiselle puolelle levy„ 8 v„rin kuvio + + taso laskeutuu alasp„in jolloin p„„ll„ oleva kuva paljastuu + + jellyglenz tippuu (precalc) + + kun glenzi pys„htyy, shakkilauta laskeutuu pois ruudusta, + glenz pysyy paikallaan. + + toinen glenz tulee ruutuun korvaten shakkilaudan v„rit + + toinen glenzi lent„„ pois + + toinen pienenee ruudun keskelle + + ymp„rille tulee trugin dottitunneli (lineblit?) + + slerssin tunneli per„„n + + MCGA=>EGA + + teknopartti + + lopulta kolme vinoa palkkia j„„ ruutuun. reunimmaiset + scrollaavat pois, keskimm„inen muuttu 2D vektorianimaatioksi + ala SpaceBalls (delaylla). Animaation aihe on: paikallaan + juokseva kissa (autodeskist„). Animaation morphautuessa + neli”st„ tulee schhrlurchtsphssht „„niefekti. Kissa + juoksee paikallaan ja zoomatuu, kun sopivan kokeinen, + stensiloituu kivasti. + + taukoa, kuva muuttuu dotiksi kuten panicin lopussa, musa + loppuu. + + tauko (15 sec etc) + EGA=>MCGA + +[musa muuttuu] + + avaruusvektoripartti. + + dotin kohdasta lent„„ vektoriobjekti (sama kuin alku) + + objektin per„st„ tulevat t„hdet (out of hyperspace style) + + objekti kaartaa katsojan ymp„ri (surround kierto) + + kamera menee trackkaamaan + + kamera menee asteroidin pinnalle (leikkaus) + asteroidin pinnalla kamera paikallaan (horisonttibitmap) + + laukaistaan kahta erilaista hy”kk„ysalusta + + kamera takaisin ison alukseen, kulmasta jossa asteroidi/alukset + n„kyv„t taustalla (asteroidi bitmap) + + hy”kk„„j„t l„hestyv„t + + kamera katsoo omaa alusta hy”kk„„jien takaa + + kamera siirtyy oman aluksen sivulta + + laukaistaan puolustajat + + kaukaa kuva kun alukset l„hestyv„t + + alkaa taistelu. trackkaillan omia aluksia, omat ampuvat Xwing + tyylisi„ paukkuja, v„lill„ paikallaan olevaa kuvaa kauempaa. + (unrealin vektoripartin tyyppist„ nopeaa) + + ensin yksi vihollinen ohjuksella + + yksi omista tuhoutuu, musa ottaa huomioon, tauko + + viholliset tuhoutuvat kaikki l„hes samaan aikaan. + + h„vitt„j„ vet„„ voltit kohti kameraa + + musa rauhallistuu, kuva kaukaa, iso alus lent„„ kohti + + fade mustaan + +[musa demoistuu,ei teknoksikuitenkaan...] + + peiliscroll + - shakkilauta fadetaan kivasti + - pallo laskeuttuu + - scrolli alkaa "we have something to say" + + - pallo v„l„ht„„ dottipalloksi + - dottipallo leve„„ uudunkokoiseksi + - pisteet tasaiseksi gridiksi + - pisteet paisuvat t„ytt„en taustan valkoiseksi + + MCGA=>EGA + + desert dream stars + - loppuu siten ett„ vektoricube lent„„ kohti ja t„ytt„„ ruudun + - cube on lightsource siten ett„ musta kameraan p„in + - ruutu lopuksi musta + + smoke + - hetkellinen + + EGA=>MCGA + + Sinuslines 3D + - mustalla ruuulla kamera k„„ntyile + - alkaa tyhj„st„, pituus kasvaa + - poistuu menem„ll„ alhaalta ulos + + Siisti kuva! + - kuva tippuu desert dreams tyyliin + - tauko + + Linssi + - pomppii ohi + - kaksi pomppua maahan + - 3 v„ri shade + - kuva fadeautuu valkoiseksi + + Fullscreen kouru + - fadeautuu valkoisesta + Plasmacube + - ilmestyy yl„reunaan + - menee keskelle + - kouru loppuu + - cube suurenee + - cube tuplaantuu + - lopputulos musta ruutu + + - kamera laskeutuu alasp„in jolloin minivectorballsin lattia + ilmestyy + Minivectorballs + - kaikkea kivaa + - pomppuja etc + + Vuoriscroll + - vuori nousee minivectorballsin tason l„pi + - scrolli ilmesty + + Comanche canyon (water waves) + - aaltoileva merenpinta, kamera kiert„„ + - kamera nousee + - taivas tummene + +[leffamusaa] + + Uusi kuvakulma t„hdill„ ja alun aluksella + + + +-- Thanks for watching + lopputekstit -- + +other ideas: +;uusi vuosi bang +;py”riv„ tulisuihku joka polttaa maan ymp„rilt„) +;shadebobs +;2D jelloblock +;dotcuberise + diff --git a/DIS/DIS.ASM b/DIS/DIS.ASM new file mode 100644 index 0000000..8073d2f --- /dev/null +++ b/DIS/DIS.ASM @@ -0,0 +1,26 @@ +code SEGMENT para public 'CODE' + ASSUME cs:code + +rtext: db 13,10 + db 'Demo Int Server (DIS) V1.0 Copyright (C) 1993 The Future Crew',13,10 + include disdate.inc + db 13,10,'Installed (int fc).',13,10 + db "NOTE: This DIS server doesn't support copper or music syncronization!",13,10 + db '$',26 + +rstart: mov ax,cs + mov ds,ax + mov dx,OFFSET rtext + mov ah,9 + int 21h + call dis_setint + mov ax,3100h + mov dx,(rend-rstart+600)/16 + int 21h + +include disint.asm + +rend LABEL BYTE +code ENDS + END rstart + \ No newline at end of file diff --git a/DIS/DIS.EXE b/DIS/DIS.EXE new file mode 100644 index 0000000..60e88d4 Binary files /dev/null and b/DIS/DIS.EXE differ diff --git a/DIS/DIS.H b/DIS/DIS.H new file mode 100644 index 0000000..646e560 --- /dev/null +++ b/DIS/DIS.H @@ -0,0 +1,59 @@ +/* Demo Int Server (DIS) V1.0 - Header & documentation file */ + +extern int dis_version(void); +/* Initialize dis. IMPORTANT. This routine must be called at start of each +** demo part, it will clear the exitkey flag and do other stuff as well... +** returns version number +** 0x100=V1.0 +** 0=dis not installed! +*/ + +extern int dis_indemo(void); +/* Returns status if the actual demo is running. +** 0=part run from dos +** 1=part run from demo (no mode switches etc) +*/ + +extern int dis_waitb(void); +/* waits for border, retuns number of frames since last call. +** (currently returns always 1) +*/ + +extern int dis_exit(void); +/* returns 1 if part should exit, 0 if not. +** Currently any key press sets dis_exit return status to 1. +*/ + +extern void dis_partstart(void); +/* initializes dis (calls dis_version), if dis is not detected +** exits to dos with an error msg. +*/ + +extern void * dis_msgarea(int areanumber); +/* returns a pointer to a 64 byte interpart communications area. +** areanumber is 0..3 +*/ + +extern int dis_muscode(int); +/* returns a music syncronization code. As a parameter, give the +** code you are waiting, so a skip can be easily done by DIS. +*/ + +extern int dis_musplus(void); +/* returns a music syncronization code. As a parameter, give the +** code you are waiting, so a skip can be easily done by DIS. +*/ + +extern int dis_musrow(int); +/* returns a music syncronization code. As a parameter, give the +** code you are waiting, so a skip can be easily done by DIS. +*/ + +extern void dis_setcopper(int routine_number,void (*routine)(void)); +/* routine=1(top of screen)/2(bottom of screen)/3(retrace) +** routine=pointer to routine +*/ + +void _dis_setmframe(int frame); +int _dis_getmframe(void); +int _dis_sync(void); diff --git a/DIS/DIS.MAP b/DIS/DIS.MAP new file mode 100644 index 0000000..eb40b65 --- /dev/null +++ b/DIS/DIS.MAP @@ -0,0 +1,8 @@ + + Start Stop Length Name Class + + 00000H 00070H 00071H CODE CODE + +Program entry point at 0000:005A +Warning: No stack + diff --git a/DIS/DIS.OBJ b/DIS/DIS.OBJ new file mode 100644 index 0000000..23ea144 Binary files /dev/null and b/DIS/DIS.OBJ differ diff --git a/DIS/DISC.ASM b/DIS/DISC.ASM new file mode 100644 index 0000000..8d6361e --- /dev/null +++ b/DIS/DISC.ASM @@ -0,0 +1,173 @@ +;DIS - C interface, Large memory model + +CBEG MACRO ;C/Assembler procedure begin + push bp + mov bp,sp + push si + push di + push ds + ENDM + +CEND MACRO ;C/Assembler procedure end + pop ds + pop di + pop si + pop bp + ret + ENDM + +movpar MACRO reg,par ;loads parameter [par(0..)] to register [reg] + mov reg,[bp+par*2+6] + ENDM + +text_disc SEGMENT para public 'CODE' + ASSUME cs:text_disc + LOCALS + +public _dis_version ;int _dis_version(void) +_dis_version PROC FAR + xor ax,ax + mov es,ax + mov bx,es:[0fch*4+0] + mov es,es:[0fch*4+2] + cmp es:[bx-2],0fc0h + jne @@1 + cmp es:[bx-4],0fc0h + jne @@1 + xor bx,bx + int 0fch +@@1: ret +_dis_version ENDP + +public _dis_waitb ;int _dis_waitb(void) +_dis_waitb PROC FAR + mov bx,1 + int 0fch + ret +_dis_waitb ENDP + +error_nodis db 'ERROR: DIS not loaded.$' + +public _dis_partstart ;void _dis_partstart(void) +_dis_partstart PROC FAR + call _dis_version + cmp ax,0 + jne @@1 + mov ax,cs + mov ds,ax + mov dx,OFFSET error_nodis + mov ah,9 + int 21h + mov ax,4c03h + int 21h +@@1: ret +_dis_partstart ENDP + +public _dis_exit ;int _dis_exit(void) +_dis_exit PROC FAR + mov bx,2 + int 0fch + ret +_dis_exit ENDP + +public _dis_indemo ;int _dis_indemo(void) +_dis_indemo PROC FAR + mov bx,3 + int 0fch + ret +_dis_indemo ENDP + +public _dis_msgarea ;void *_dis_msgarea(void) +_dis_msgarea PROC FAR + push bp + mov bp,sp + mov ax,[bp+6] + mov bx,5 + int 0fch + pop bp + ret +_dis_msgarea ENDP + +public _dis_muscode ;int _dis_muscode(void) +_dis_muscode PROC FAR + push bp + mov bp,sp + mov ax,[bp+6] + mov bx,6 + int 0fch + pop bp + ret +_dis_muscode ENDP + +public _dis_musplus ;int _dis_musplus(void) +_dis_musplus PROC FAR + push bp + mov bp,sp + mov ax,[bp+6] + mov bx,6 + int 0fch + mov ax,dx + pop bp + ret +_dis_musplus ENDP + +public _dis_musrow ;int _dis_musrow(void) +_dis_musrow PROC FAR + push bp + mov bp,sp + mov bx,6 + int 0fch + mov ax,bx + pop bp + ret +_dis_musrow ENDP + +public _dis_setcopper ;void _dis_copper(int routine_number,void *routine) +_dis_setcopper PROC FAR + push bp + mov bp,sp + mov ax,[bp+6] + mov cx,[bp+8] + mov dx,[bp+10] + mov bx,7 + int 0fch + pop bp + ret +_dis_setcopper ENDP + +public _dis_setmframe ;void _dis_setmframe(int frame) +_dis_setmframe PROC FAR + push bp + mov bp,sp + mov dx,[bp+6] + mov ax,1 + mov bx,9 + int 0fch + pop bp + ret +_dis_setmframe ENDP + +public _dis_getmframe ;void _dis_getmframe(void) +_dis_getmframe PROC FAR + push bp + mov bp,sp + xor ax,ax + mov bx,9 + int 0fch + pop bp + ret +_dis_getmframe ENDP + +public _dis_sync ;void _dis_sync(void) +_dis_sync PROC FAR + push bp + mov bp,sp + mov bx,10 + int 0fch + pop bp + ret +_dis_sync ENDP + +text_disc ENDS + END + \ No newline at end of file diff --git a/DIS/DISC.OBJ b/DIS/DISC.OBJ new file mode 100644 index 0000000..9a0bf56 Binary files /dev/null and b/DIS/DISC.OBJ differ diff --git a/DIS/DISDATE.INC b/DIS/DISDATE.INC new file mode 100644 index 0000000..00a3107 --- /dev/null +++ b/DIS/DISDATE.INC @@ -0,0 +1 @@ +db 'BETA VERSION - Compiled: 07/26/93 03:15:53 ' \ No newline at end of file diff --git a/DIS/DISINT.ASM b/DIS/DISINT.ASM new file mode 100644 index 0000000..60b80cb --- /dev/null +++ b/DIS/DISINT.ASM @@ -0,0 +1,463 @@ +;Actual DIS server routines +;========================== +;note: lines with TEMP! are temporary to be replaced by smarter +;techniques in the future... + +LOCALS +.386 +ALIGN 16 + +;±±±±±±±±±±±±±±±±±±±± Variables ±±±±±±±±±±±±±±±±±± +exitflag dw 0 ;1=exit key pressed +indemoflag dw 0 ;1=inside the great big ultra cool demo +passmuscode dw 0 + +ALIGN 4 +msgarea0 db 64 dup(0) +msgarea1 db 64 dup(0) +msgarea2 db 64 dup(0) +msgarea3 db 64 dup(0) + +;±±±±±±±±±±±±±± List of service routines ±±±±±±±±±±±± +service0 LABEL WORD + dw OFFSET version_0 + dw OFFSET waitb_1 + dw OFFSET exit_2 + dw OFFSET indemo_3 + dw OFFSET loader_4 + dw OFFSET msgarea_5 + dw OFFSET muscode_6 + dw OFFSET setcopper_7 + dw OFFSET fastvmode_8 + dw OFFSET musframe_9 + dw OFFSET sync_10 +service9 LABEL WORD + +;±±±±±±±±±±±±±±±±±±±± General stuff ±±±±±±±±±±±±±±±±±± + +dis_oldint dd ? + +dis_setint PROC NEAR + push ds + xor ax,ax + mov ds,ax + mov ax,word ptr ds:[0fch*4+0] + mov bx,word ptr ds:[0fch*4+2] + mov word ptr cs:dis_oldint[0],ax + mov word ptr cs:dis_oldint[2],bx + mov word ptr ds:[0fch*4+0],OFFSET dis_int + mov word ptr ds:[0fch*4+2],cs + pop ds + ret +dis_setint ENDP + +dis_resetint PROC NEAR + xor ax,ax + mov ds,ax + mov ax,word ptr cs:dis_oldint[0] + mov bx,word ptr cs:dis_oldint[2] + mov word ptr ds:[0fch*4+0],ax + mov word ptr ds:[0fch*4+2],bx + ret +dis_resetint ENDP + + dw 0fc0h ;signature for dis + dw 0fc0h ;installation check +dis_int PROC FAR ;interrupt 0fch server, BX=function number + sti + shl bx,1 + cmp bx,(service9-service0) + jae @@1 + call cs:service0[bx] +@@1: iret +dis_int ENDP + +;±±±±±±±±±±±±±±±±±±±± Service Routines ±±±±±±±±±±±±±±±±±± + +;entry: - +; exit: AX=version +;descr: - +version_0 PROC NEAR + ;indemo? + IFDEF INDEMO + mov ax,1 + ELSE + mov ax,0 + ENDIF + mov cs:indemoflag,ax + ;initialize + mov cs:passmuscode,0 + mov cs:exitflag,0 + ;return version + mov ax,0100h + ret +version_0 ENDP + +ff PROC FAR + IFDEF INDEMO + push es + mov es,cs:stmikseg + mov bx,es:_np_ord + inc bx + xor ax,ax + push ax + push bx + call _zgotosong + add sp,4 + pop es + ENDIF + ret +ff ENDP + +checkkeys PROC NEAR + IFDEF INDEMO + cmp cs:forcebreak,0 + jne @@3 + ENDIF + call ctrldown + jc @@6 + mov ah,1 ;TEMP! + int 16h + jz @@3 + mov ah,0 + int 16h + cmp al,'0' + jne @@9 + pusha + push ds + push es + mov ax,0fcfch + mov bx,1 + int 33h + pop es + pop ds + popa + ret +@@9: cmp al,'9' + jne @@8 + pusha + push ds + push es + mov ax,0fcfch + mov bx,2 + int 33h + pop es + pop ds + popa + ret +@@8: cmp al,'1' + jne @@5 + call ff +@@5: cmp al,27 + jne @@4 +@@6: mov cs:exitflag,1 +@@4: mov cs:passmuscode,1 +@@3: ret +checkkeys ENDP + +;entry: - +; exit: - +;descr: Waits for border start +waitb_1 PROC NEAR + call checkkeys + IFDEF INDEMO + sti + mov ax,cs:copperframecount +@@v: cmp cs:copperframecount,ax + je @@v +@@q: mov ax,cs:copperframecount + mov cs:copperframecount,0 + ELSE + mov dx,3dah +@@1: in al,dx + test al,8 + jnz @@1 +@@2: in al,dx + test al,8 + jz @@2 + mov ax,1 ;number of frames taken ;TEMP! + ENDIF + ret +waitb_1 ENDP + +;entry: - +; exit: AX=return +;descr: returns 1 if part should exit. +exit_2 PROC NEAR + call checkkeys + mov ax,cs:exitflag + ret +exit_2 ENDP + +;entry: - +; exit: AX=return +;descr: returns 1 if inside demo (and not testing from dos) +indemo_3 PROC NEAR + mov ax,cs:indemoflag + ret +indemo_3 ENDP + +;entry: AX=area desired (0..3) +; exit: DX:AX=pointer to msgarea +;descr: returns a pointer to interpart communications area. +; There is ONLY 64 bytes of space in the area, DON'T OVERFLOW IT :-) +msgarea_5 PROC NEAR + cmp ax,1 + je @@1 + cmp ax,2 + je @@2 + cmp ax,3 + je @@3 +@@0: mov dx,cs + mov ax,OFFSET msgarea0 + ret +@@1: mov dx,cs + mov ax,OFFSET msgarea1 + ret +@@2: mov dx,cs + mov ax,OFFSET msgarea2 + ret +@@3: mov dx,cs + mov ax,OFFSET msgarea3 + ret +msgarea_5 ENDP + +;Loader functions (not for parts) +;entry: AX=0/1 +; exit: - +;descr: AX=0: restores dos process id +; AX=1: sets dos process id to the loader +; AX=100h: call _zloadinstrument(dx) +; AX=101h: call _zinitmodule(dx:0) +; This is used to load the music in name of the loader! +loader_4 PROC NEAR + IFDEF INDEMO + call loaderservices + ENDIF + ret +loader_4 ENDP + +;entry: AX=code you want (are waiting for) +; exit: AX=current code,BX=row +muscode_6 PROC NEAR + push ax + call checkkeys + pop ax + IFDEF INDEMO + push es + mov es,cs:stmikseg + mov ax,es:_np_zinfo + mov bx,es:_np_row + mov cx,es:_np_ord + mov dx,-32 + cmp es:_np_zplus,0 + je @@1a + cmp es:_np_zplus,1 + je @@1b + cmp es:_np_zplus,2 + je @@1e +@@1eb: cmp bx,32 + ja @@1b +@@1e: mov dx,bx + cmp dx,32 + jb @@1a + mov dx,-32 + jmp @@1a +@@1b: ;plus coming + mov dx,bx + sub dx,64 + cmp dx,-32 + jge @@1a + mov dx,-32 +@@1a: mov bx,es:_np_row + pop es + ELSE + cmp cs:passmuscode,0 + jne @@1 + xor ax,ax + ENDIF + ret +@@1: mov cs:passmuscode,0 + ret +muscode_6 ENDP + +;entry: AX=number of copper interrupt to capture: +; 0=after display start (about scan line 25) +; 1=just before retrace (AVOID USING THIS IF POSSIBLE) +; 2=in the retrace +; DX:CX=far pointer to routine (0:0=remove routine) +; The routine pointed to must end in a RETF. It must save any +; 386 registers it uses (including FS/GS) +; exit: - +;descr: sets the specified copper interrupt to call the specified routine. +; IMPORTANT: The part must reset the copper int before it exits! +setcopper_7 PROC NEAR + IFDEF INDEMO + or dx,dx + jnz @@1 + or cx,cx + jnz @@1 + mov dx,cs + mov cx,OFFSET copper_intretf +@@1: cmp ax,0 + jne @@2 + mov word ptr cs:copper_int0[0],cx + mov word ptr cs:copper_int0[2],dx +@@2: cmp ax,1 + jne @@3 + mov word ptr cs:copper_int1[0],cx + mov word ptr cs:copper_int1[2],dx +@@3: cmp ax,2 + jne @@4 + mov word ptr cs:copper_int2[0],cx + mov word ptr cs:copper_int2[2],dx +@@4: ENDIF + ret +setcopper_7 ENDP + +;entry: AX=area (0..3) containing the saved VGA state. +; exit: - +;descr: Quicksets the desired vga mode (takes one frame) +fastvmode_8 PROC NEAR ;DOESN'T WORK!-( + IFDEF INDEMO + push si + push ds + call msgarea_5 ;dx:ax=ds:ax + mov si,ax + mov ax,cs + mov ds,ax + ;data now at ds:si + push si + call waitb_1 + pop si + mov dx,3dah + in al,dx + ;Syncronous reset + mov dx,3c4h + mov ax,0200h + out dx,ax + ;Clear CRTC protection flag + mov dx,3d4h + mov al,011h + out dx,al + inc dx + in al,dx + and al,not 128 + out dx,al + ;Set misc register + mov al,ds:[si] + inc si + mov dx,3c2h + out dx,al + ;Set Sequencer (3C4) + mov dx,3c4h + xor al,al + REPT 04h+1 + mov ah,ds:[si] + inc si + out dx,ax + inc al + ENDM + ;Set CRTC (3D4) + mov dx,3d4h + xor al,al + REPT 018h+1 + mov ah,ds:[si] + inc si + out dx,ax + inc al + ENDM + ;Set GFX controller (3CE) + mov dx,3ceh + xor al,al + REPT 08h+1 + mov ah,ds:[si] + inc si + out dx,ax + inc al + ENDM + ;Set Attribute controller (3C0) + mov dx,3dah + in al,dx + mov dx,3c0h + zzz=0 + REPT 014h+1 + mov al,zzz + out dx,al + mov al,ds:[si] + out dx,al + inc si + zzz=zzz+1 + ENDM + ;Enable display, enable PEL mask + mov dx,3c0h + mov al,20h + out dx,al + mov dx,3c6h + mov al,0ffh + out dx,al + pop ds + pop si + ELSE + mov ax,13h + int 10h + ENDIF + ret +fastvmode_8 ENDP + +;entry: AX=1 : set frame to DX +; AX=0 : read frame to AX +; exit: AX=frame) +;descr: controls/returns music frame numbers +musframe_9 PROC NEAR + IFDEF INDEMO + push es + mov es,cs:stmikseg + cmp ax,0 + je @@1 + mov es:_np_zframe,dx +@@1: mov ax,es:_np_zframe + pop es + ELSE + xor ax,ax + ENDIF + ret +musframe_9 ENDP + +IFDEF INDEMO +ordersync1 LABEL BYTE ;startpart +dw 0000h,0 +dw 0200h,1 +dw 0300h,2 +dw 032fh,3 +dw 042fh,4 +dw 052fh,5 +dw 062fh,6 +dw 072fh,7 +dw 082fh,8 +dw 0900h,9 +dw 0d00h,10 +;dw 0800h,8 +;dw 0c00h,9 +;dw 0f00h,10 +dw 3d00h,1 +dw 3f00h,2 +dw 4100h,3 +dw 4200h,4 +ENDIF + +sync_10 PROC NEAR + IFDEF INDEMO + mov es,cs:stmikseg + mov dh,byte ptr es:_np_ord + mov dl,byte ptr es:_np_row + mov bx,OFFSET ordersync1 + mov cx,16 +@@2: cmp dx,cs:[bx] + jbe @@1 + add bx,4 + loop @@2 +@@1: mov ax,cs:[bx-2] + ENDIF + ret +sync_10 ENDP diff --git a/DIS/DISTEST.C b/DIS/DISTEST.C new file mode 100644 index 0000000..24c8ee0 --- /dev/null +++ b/DIS/DISTEST.C @@ -0,0 +1,26 @@ +#include +#include "dis.h" + +main() +{ + int a; + a=dis_version(); + if(!a) + { + printf("\nDIS not installed!\n"); + return(1); + } + else + { + printf("\nDIS version %04X installed.\n",a); + } + printf("\nPress any key to exit.\n"); + a=0; + while(!dis_exit()) + { + a+=dis_waitb(); + printf("%i frames waited.\r",a); + } + printf("\n\n"); + return(0); +} diff --git a/DIS/DISTEST.EXE b/DIS/DISTEST.EXE new file mode 100644 index 0000000..2eb436c Binary files /dev/null and b/DIS/DISTEST.EXE differ diff --git a/DIS/DISTEST.OBJ b/DIS/DISTEST.OBJ new file mode 100644 index 0000000..a819804 Binary files /dev/null and b/DIS/DISTEST.OBJ differ diff --git a/DIS/DODATE.EXE b/DIS/DODATE.EXE new file mode 100644 index 0000000..b93efca Binary files /dev/null and b/DIS/DODATE.EXE differ diff --git a/DIS/MAKEFILE b/DIS/MAKEFILE new file mode 100644 index 0000000..8ceff06 --- /dev/null +++ b/DIS/MAKEFILE @@ -0,0 +1,22 @@ +all : dis.exe distest.exe + +objs= + +asm_f = /ML /m2 /s /JJUMPS +c_f = /AL /c /W3 + +.asm.obj : + tasm $(asm_f) $< + +.c.obj : + cl /qc $(c_f) $< + +dis.obj : dis.asm disint.asm + ..\util\dodate "db 'BETA VERSION - Compiled:" "'" > disdate.inc + tasm $(asm_f) dis.asm + +dis.exe : dis.obj + link dis.obj,dis.exe; + +distest.exe : distest.obj disc.obj + link /E distest.obj+disc.obj,distest.exe; diff --git a/DIS/NOTES b/DIS/NOTES new file mode 100644 index 0000000..e9c9be4 --- /dev/null +++ b/DIS/NOTES @@ -0,0 +1,10 @@ +0 version +1 waitborder, returns number frames +2 keybhit 0 ei, 1=quit +3 indemo + +. set framecounter +. get framecounter +. insert copper routine +. remove copper routine +. get equpointer diff --git a/DIS/README b/DIS/README new file mode 100644 index 0000000..34b31f0 --- /dev/null +++ b/DIS/README @@ -0,0 +1,19 @@ +Demo Interrupt Server - For Internal FC distribution +==================================================== + +Version is 1.0á, this is still in development, and will be untill +< Unreal 2 | [ Rectum ] [Impact] | Potato | ? > is finished. + +Read dis.h for function descriptions. + +makefile guess (microsoft nmake) +dis.h C header file for routines in disc.asm +disc.asm C interface routines for DIS (also usable from asm) +dis.asm Resident DIS server main program +disint.asm Actual DIS interrupt server +distest.c C test program for DIS +notes Notes... Nothing special + +The disc.asm(obj) is the easiest way to call dis from C. If you want +to call it from asm, see the disc.asm and copy routines from there +or include it to your asm. \ No newline at end of file diff --git a/DOTS/A b/DOTS/A new file mode 100644 index 0000000..d01757e Binary files /dev/null and b/DOTS/A differ diff --git a/DOTS/ASM.ASM b/DOTS/ASM.ASM new file mode 100644 index 0000000..c466db1 --- /dev/null +++ b/DOTS/ASM.ASM @@ -0,0 +1,250 @@ +include clink.inc +code SEGMENT para public 'CODE' +ASSUME cs:code + +.386 + +MAXDOTS equ 1024 + +BOTTOM equ 8000 + +public _gravitybottom +_gravitybottom dw BOTTOM + +public _bpmin,_bpmax +_bpmin dw 30000 +_bpmax dw -30000 + +public _gravity +_gravity dw 0 + +public _dotnum +_dotnum dw 0 + +public _gravityd +_gravityd dw 16 + +dw -1280 +dw -960 +dw -640 +dw -320 +public _rows +_rows dw 200 dup(0) + +public _dot +_dot LABEL WORD +dot dw MAXDOTS dup(0,0,0,0,0,0,0,0) ;x,y,z,oldposshadow,oldpos,-,-,- + +public _rotsin,_rotcos +_rotsin dw 0 +_rotcos dw 0 + +public _bgpic +_bgpic dw 0,0 + +public _depthtable1,_depthtable2,_depthtable3,_depthtable4 +_depthtable1 dd 128 dup(0) +_depthtable2 dd 128 dup(0) +_depthtable3 dd 128 dup(0) +_depthtable4 dd 128 dup(0) + +public _drawdots +_drawdots PROC FAR + CBEG + mov ax,0a000h + mov es,ax + mov ax,cs + mov ds,ax + mov fs,cs:_bgpic[2] + mov cx,cs:_dotnum + mov si,OFFSET dot +@@1: push cx + + mov ax,ds:[si+0] ;X + imul ds:_rotsin + mov ax,ax + mov cx,dx + mov ax,ds:[si+4] ;Z + imul ds:_rotcos + sub ax,bx + sub dx,cx + mov bp,dx + add bp,9000 + + mov ax,ds:[si+0] ;X + imul ds:_rotcos + mov bx,ax + mov cx,dx + mov ax,ds:[si+4] ;Z + imul ds:_rotsin + add ax,bx + adc dx,cx + shrd ax,dx,8 + sar dx,8 + + mov bx,ax + mov cx,dx + shrd ax,dx,3 + sar dx,3 + add ax,bx + adc dx,cx + + idiv bp + add ax,160 + push ax + cmp ax,319 + ja @@2 + + ;shadow + + xor ax,ax + mov dx,8 + idiv bp + add ax,100 + cmp ax,199 + ja @@2 + mov bx,ax + shl bx,1 + mov bx,ds:_rows[bx] + pop ax + add bx,ax + push ax + + mov di,ds:[si+6] + mov ax,fs:[di] + mov es:[di],ax + mov ax,87+87*256 + mov word ptr es:[bx],ax + mov ds:[si+6],bx + + ;ball + + mov ax,ds:_gravity + add ds:[si+14],ax + mov ax,ds:[si+2] ;Y + add ax,ds:[si+14] + cmp ax,ds:_gravitybottom + jl @@4 + push ax + mov ax,ds:[si+14] + neg ax + imul cs:_gravityd + sar ax,4 + mov ds:[si+14],ax + pop ax + add ax,ds:[si+14] +@@4: mov ds:[si+2],ax + cwd + shld dx,ax,6 + shl ax,6 + idiv bp + add ax,100 + cmp ax,199 + ja @@3 + mov bx,ax + shl bx,1 + mov bx,ds:_rows[bx] + pop ax + add bx,ax + + mov di,ds:[si+8] + mov eax,fs:[di] + mov es:[di],eax + add di,320 + mov eax,fs:[di] + mov es:[di],eax + add di,320 + mov eax,fs:[di] + mov es:[di],eax +; add di,320 +; mov eax,fs:[di] +; mov es:[di],eax + shr bp,6 + and bp,not 3 + + cmp bp,cs:_bpmin + jge @@t1 + mov cs:_bpmin,bp +@@t1: cmp bp,cs:_bpmax + jle @@t2 + mov cs:_bpmax,bp +@@t2: + mov ax,word ptr ds:_depthtable1[bp] + mov word ptr es:[bx+1],ax + mov eax,ds:_depthtable2[bp] + mov dword ptr es:[bx+320],eax + mov ax,word ptr ds:_depthtable3[bp] + mov word ptr es:[bx+641],ax + mov ds:[si+8],bx + +@@z: pop cx + add si,16 + loop @@1 +@@0: CEND + +@@2: mov di,ds:[si+8] + mov eax,fs:[di] + mov es:[di],eax + add di,320 + mov eax,fs:[di] + mov es:[di],eax + add di,320 + mov eax,fs:[di] + mov es:[di],eax + mov di,ds:[si+6] + mov ds:[si+6],ax + mov ax,fs:[di] + mov es:[di],ax + pop bx + pop cx + add si,16 + loop @@1 + jmp @@0 +@@3: mov di,ds:[si+8] + mov eax,fs:[di] + mov es:[di],eax + add di,320 + mov eax,fs:[di] + mov es:[di],eax + add di,320 + mov eax,fs:[di] + mov es:[di],eax + pop bx + pop cx + add si,16 + loop @@1 + jmp @@0 +_drawdots ENDP + +PUBLIC _setpalette +_setpalette PROC FAR + push bp + mov bp,sp + push si + push di + push ds + mov si,[bp+6] + mov ds,[bp+8] + mov dx,3c8h + mov al,0 + out dx,al + inc dx + mov cx,768 + rep outsb + pop ds + pop di + pop si + pop bp + ret +_setpalette ENDP + +_face LABEL WORD +public _face +include face.inc +dw 30000,30000,30000 + +PUBLIC _sin1024 +include sin1024.inc + +code ENDS +END diff --git a/DOTS/ASM.OBJ b/DOTS/ASM.OBJ new file mode 100644 index 0000000..6cad78a Binary files /dev/null and b/DOTS/ASM.OBJ differ diff --git a/DOTS/CLINK.INC b/DOTS/CLINK.INC new file mode 100644 index 0000000..3d5effb --- /dev/null +++ b/DOTS/CLINK.INC @@ -0,0 +1,41 @@ +FIXWORD MACRO ;go to word boundary + if ($-start) mod 1 + db 0 + endif + ENDM + +CDS MACRO + mov ax,cs + mov ds,ax + ENDM + +CBEG MACRO ;C/Assembler procedure begin + push bp + mov bp,sp + push si + push di + push ds + ENDM + +CEND MACRO ;C/Assembler procedure end + pop ds + pop di + pop si + pop bp + ret + ENDM + +CBEG0 MACRO ;C/Assembler procedure begin, minimal + push bp + mov bp,sp + ENDM + +CEND0 MACRO ;C/Assembler procedure end, minimal + pop bp + ret + ENDM + +movpar MACRO reg,par ;loads parameter [par(0..)] to register [reg] + mov reg,[bp+par*2+6] + ENDM + diff --git a/DOTS/CUT b/DOTS/CUT new file mode 100644 index 0000000..0dd2c9c --- /dev/null +++ b/DOTS/CUT @@ -0,0 +1,86 @@ + #if 0 + switch(mode=c) + { + case 0: + for(a=0;a + +char buf[1024]; + +main() +{ + FILE *f1; + int a,b,c=0; + float x,y,z; + f1=fopen("face.asc","rt"); + while(!feof(f1)) + { + fgets(buf,1024,f1); + fgets(buf,1024,f1); + if(!memcmp(buf,"Vertex ",7)) + { + if(c) + { + sscanf(buf,"Vertex %i: X: %f Y: %f Z: %f",&a,&x,&y,&z); + printf("dw %i,%i,%i\n",(int)(x*1000),-(int)(z*1000),(int)(y*1000)); + } + else c=1; + } + } + fclose(f1); +} diff --git a/DOTS/FACE.EXE b/DOTS/FACE.EXE new file mode 100644 index 0000000..419e449 Binary files /dev/null and b/DOTS/FACE.EXE differ diff --git a/DOTS/FACE.INC b/DOTS/FACE.INC new file mode 100644 index 0000000..301b1c0 --- /dev/null +++ b/DOTS/FACE.INC @@ -0,0 +1 @@ +dw 2248,-2306,0 diff --git a/DOTS/MAIN.C b/DOTS/MAIN.C new file mode 100644 index 0000000..8bc0af6 --- /dev/null +++ b/DOTS/MAIN.C @@ -0,0 +1,291 @@ +#include +#include +#include +#include +#include +#include +#include "..\dis\dis.h" + +extern int face[]; + +extern int bpmin,bpmax; + +extern char *bgpic; +extern int rotsin,rotcos; +extern int rows[]; +extern long depthtable1[]; +extern long depthtable2[]; +extern long depthtable3[]; +extern long depthtable4[]; + +extern int dotnum; + +extern void drawdots(void); + +char far *vram=(char far *)0xa0000000L; + +char pal[768]; +char pal2[768]; + +extern sin1024[]; + +int isin(int deg) +{ + return(sin1024[deg&1023]); +} + +int icos(int deg) +{ + return(sin1024[(deg+256)&1023]); +} + +extern struct +{ + int x; + int y; + int z; + int old1; + int old2; + int old3; + int old4; + int yadd; +} dot[]; + +extern int gravity; +extern int gravitybottom; +extern int gravityd; + +void setborder(int color) +{ + _asm + { + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,11h+32 + out dx,al + mov al,color + out dx,al + } +} + +int cols[]={ +0,0,0, +4,25,30, +8,40,45, +16,55,60}; +int dottaul[1024]; + +main(int argc,char *argv[]) +{ + int timer=30000; + int dropper,repeat; + int frame=0; + int rota=-1*64; + int fb=0; + int rot=0,rots=0; + int a,b,c,d,i,j,mode; + int grav,gravd; + int f=0; + dis_partstart(); + dotnum=512; + for(a=0;a15) c=15; + c=15-c; + depthtable1[a]=0x202+0x04040404*c; + depthtable2[a]=0x02030302+0x04040404*c; + depthtable3[a]=0x202+0x04040404*c; + //depthtable4[a]=0x02020302+0x04040404*c; + } + bgpic=halloc(64000L,1L); + memcpy(bgpic,vram,64000); + a=0; + for(b=64;b>=0;b--) + { + for(c=0;c<768;c++) + { + a=pal[c]-b; + if(a<0) a=0; + pal2[c]=a; + } + dis_waitb(); + dis_waitb(); + outp(0x3c8,0); + for(c=0;c<768;c++) outp(0x3c9,pal2[c]); + } + + while(!dis_exit() && frame<2450) + { + //setborder(0); + repeat=dis_waitb(); + if(frame>2300) setpalette(pal2); + //setborder(1); + if(dis_indemo()) + { + a=dis_musplus(); + if(a>-4 && a<0) break; + } + while(repeat--) + { + frame++; + if(frame==500) f=0; + i=dottaul[j]; + j++; j%=dotnum; + if(frame<500) + { + dot[i].x=isin(f*11)*40; + dot[i].y=icos(f*13)*10-dropper; + dot[i].z=isin(f*17)*40; + dot[i].yadd=0; + } + else if(frame<900) + { + dot[i].x=icos(f*15)*55; + dot[i].y=dropper; + dot[i].z=isin(f*15)*55; + dot[i].yadd=-260; + } + else if(frame<1700) + { + a=sin1024[frame&1023]/8; + dot[i].x=icos(f*66)*a; + dot[i].y=8000; + dot[i].z=isin(f*66)*a; + dot[i].yadd=-300; + } + else if(frame<2360) + { + /* + a=rand()/128+32; + dot[i].y=8000-a*80; + b=rand()&1023; + a+=rand()&31; + dot[i].x=sin1024[b]*a/3+(a-50)*7; + dot[i].z=sin1024[(b+256)&1023]*a/3+(a-40)*7; + dot[i].yadd=300; + if(frame>1640 && !(frame&31) && grav>-2) grav--; + */ + dot[i].x=rand()-16384; + dot[i].y=8000-rand()/2; + dot[i].z=rand()-16384; + dot[i].yadd=0; + if(frame>1900 && !(frame&31) && grav>0) grav--; + } + else if(frame<2400) + { + a=frame-2360; + for(b=0;b<768;b+=3) + { + c=pal[b+0]+a*3; + if(c>63) c=63; + pal2[b+0]=c; + c=pal[b+1]+a*3; + if(c>63) c=63; + pal2[b+1]=c; + c=pal[b+2]+a*4; + if(c>63) c=63; + pal2[b+2]=c; + } + } + else if(frame<2440) + { + a=frame-2400; + for(b=0;b<768;b+=3) + { + c=63-a*2; + if(c<0) c=0; + pal2[b+0]=c; + pal2[b+1]=c; + pal2[b+2]=c; + } + } + if(dropper>4000) dropper-=100; + rotcos=icos(rot)*64; rotsin=isin(rot)*64; + rots+=2; + if(frame>1900) + { + rot+=rota/64; + rota--; + } + else rot=isin(rots); + f++; + gravity=grav; + gravityd=gravd; + } + drawdots(); + } + if(!dis_indemo()) + { + _asm mov ax,3h + _asm int 10h + } + return(0); +} diff --git a/DOTS/MAIN.OBJ b/DOTS/MAIN.OBJ new file mode 100644 index 0000000..daf42bf Binary files /dev/null and b/DOTS/MAIN.OBJ differ diff --git a/DOTS/MAKEFILE b/DOTS/MAKEFILE new file mode 100644 index 0000000..945ebad --- /dev/null +++ b/DOTS/MAKEFILE @@ -0,0 +1,24 @@ +all : dots.exe face.exe + +face.exe : face.c + cl /qc /AL face.c + face > face.inc + +objs=main.obj asm.obj ..\dis\disc.obj + +asm_f = /ML /m2 /s /JJUMPS +c_f = /AL /c /W3 + +.asm.obj : + tasm $(asm_f) $< + +.c.obj : + cl /qc $(c_f) $< + +dots.exe : $(objs) + link /E $(objs),dots.exe,nul; + copy dots.exe ..\main\data\minvball.exe + +asm.asm : face.inc + + diff --git a/DOTS/SIN1024.INC b/DOTS/SIN1024.INC new file mode 100644 index 0000000..6614fbe --- /dev/null +++ b/DOTS/SIN1024.INC @@ -0,0 +1,33 @@ +_sin1024 LABEL WORD +dw 0,1,3,4,6,7,9,10,12,14,15,17,18,20,21,23,25,26,28,29,31,32,34,36,37,39,40,42,43,45,46,48 +dw 49,51,53,54,56,57,59,60,62,63,65,66,68,69,71,72,74,75,77,78,80,81,83,84,86,87,89,90,92,93,95,96 +dw 97,99,100,102,103,105,106,108,109,110,112,113,115,116,117,119,120,122,123,124,126,127,128,130,131,132,134,135,136,138,139,140 +dw 142,143,144,146,147,148,149,151,152,153,155,156,157,158,159,161,162,163,164,166,167,168,169,170,171,173,174,175,176,177,178,179 +dw 181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,211 +dw 212,213,214,215,216,217,217,218,219,220,221,221,222,223,224,225,225,226,227,227,228,229,230,230,231,232,232,233,234,234,235,235 +dw 236,237,237,238,238,239,239,240,241,241,242,242,243,243,244,244,244,245,245,246,246,247,247,247,248,248,249,249,249,250,250,250 +dw 251,251,251,251,252,252,252,252,253,253,253,253,254,254,254,254,254,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255 +dw 256,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,254,254,254,254,253,253,253,253,252,252,252,252,251,251,251 +dw 251,250,250,250,249,249,249,248,248,247,247,247,246,246,245,245,244,244,244,243,243,242,242,241,241,240,239,239,238,238,237,237 +dw 236,235,235,234,234,233,232,232,231,230,230,229,228,227,227,226,225,225,224,223,222,221,221,220,219,218,217,217,216,215,214,213 +dw 212,211,211,210,209,208,207,206,205,204,203,202,201,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182 +dw 181,179,178,177,176,175,174,173,171,170,169,168,167,166,164,163,162,161,159,158,157,156,155,153,152,151,149,148,147,146,144,143 +dw 142,140,139,138,136,135,134,132,131,130,128,127,126,124,123,122,120,119,117,116,115,113,112,110,109,108,106,105,103,102,100,99 +dw 97,96,95,93,92,90,89,87,86,84,83,81,80,78,77,75,74,72,71,69,68,66,65,63,62,60,59,57,56,54,53,51 +dw 49,48,46,45,43,42,40,39,37,36,34,32,31,29,28,26,25,23,21,20,18,17,15,14,12,10,9,7,6,4,3,1 +dw 0,-1,-3,-4,-6,-7,-9,-10,-12,-14,-15,-17,-18,-20,-21,-23,-25,-26,-28,-29,-31,-32,-34,-36,-37,-39,-40,-42,-43,-45,-46,-48 +dw -49,-51,-53,-54,-56,-57,-59,-60,-62,-63,-65,-66,-68,-69,-71,-72,-74,-75,-77,-78,-80,-81,-83,-84,-86,-87,-89,-90,-92,-93,-95,-96 +dw -97,-99,-100,-102,-103,-105,-106,-108,-109,-110,-112,-113,-115,-116,-117,-119,-120,-122,-123,-124,-126,-127,-128,-130,-131,-132,-134,-135,-136,-138,-139,-140 +dw -142,-143,-144,-146,-147,-148,-149,-151,-152,-153,-155,-156,-157,-158,-159,-161,-162,-163,-164,-166,-167,-168,-169,-170,-171,-173,-174,-175,-176,-177,-178,-179 +dw -181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,-192,-193,-194,-195,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-211 +dw -212,-213,-214,-215,-216,-217,-217,-218,-219,-220,-221,-221,-222,-223,-224,-225,-225,-226,-227,-227,-228,-229,-230,-230,-231,-232,-232,-233,-234,-234,-235,-235 +dw -236,-237,-237,-238,-238,-239,-239,-240,-241,-241,-242,-242,-243,-243,-244,-244,-244,-245,-245,-246,-246,-247,-247,-247,-248,-248,-249,-249,-249,-250,-250,-250 +dw -251,-251,-251,-251,-252,-252,-252,-252,-253,-253,-253,-253,-254,-254,-254,-254,-254,-254,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255 +dw -256,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-254,-254,-254,-254,-254,-254,-253,-253,-253,-253,-252,-252,-252,-252,-251,-251,-251 +dw -251,-250,-250,-250,-249,-249,-249,-248,-248,-247,-247,-247,-246,-246,-245,-245,-244,-244,-244,-243,-243,-242,-242,-241,-241,-240,-239,-239,-238,-238,-237,-237 +dw -236,-235,-235,-234,-234,-233,-232,-232,-231,-230,-230,-229,-228,-227,-227,-226,-225,-225,-224,-223,-222,-221,-221,-220,-219,-218,-217,-217,-216,-215,-214,-213 +dw -212,-211,-211,-210,-209,-208,-207,-206,-205,-204,-203,-202,-201,-200,-199,-198,-197,-196,-195,-194,-193,-192,-191,-190,-189,-188,-187,-186,-185,-184,-183,-182 +dw -181,-179,-178,-177,-176,-175,-174,-173,-171,-170,-169,-168,-167,-166,-164,-163,-162,-161,-159,-158,-157,-156,-155,-153,-152,-151,-149,-148,-147,-146,-144,-143 +dw -142,-140,-139,-138,-136,-135,-134,-132,-131,-130,-128,-127,-126,-124,-123,-122,-120,-119,-117,-116,-115,-113,-112,-110,-109,-108,-106,-105,-103,-102,-100,-99 +dw -97,-96,-95,-93,-92,-90,-89,-87,-86,-84,-83,-81,-80,-78,-77,-75,-74,-72,-71,-69,-68,-66,-65,-63,-62,-60,-59,-57,-56,-54,-53,-51 +dw -49,-48,-46,-45,-43,-42,-40,-39,-37,-36,-34,-32,-31,-29,-28,-26,-25,-23,-21,-20,-18,-17,-15,-14,-12,-10,-9,-7,-6,-4,-3,-1 diff --git a/END/ASM.ASM b/END/ASM.ASM new file mode 100644 index 0000000..f5fe2be --- /dev/null +++ b/END/ASM.ASM @@ -0,0 +1,119 @@ +code SEGMENT para public 'CODE' + ASSUME cs:code +.386 +LOCALS + +PUBLIC _inittwk +_inittwk PROC FAR + push bp + mov bp,sp + push si + push di + push ds + ;clear palette +; mov dx,3c8h +; xor al,al +; out dx,al +; inc dx +; mov cx,768 +;@@1: out dx,al +; loop @@1 + ;400 rows + mov dx,3d4h + mov ax,00009h + out dx,ax + ;tweak + mov dx,3d4h + mov ax,00014h + out dx,ax + mov ax,0e317h + out dx,ax + mov dx,3c4h + mov ax,0604h + out dx,ax + ; + mov dx,3c4h + mov ax,0f02h + out dx,ax + mov ax,0a000h + mov es,ax + xor di,di + mov cx,32768 + xor ax,ax + rep stosw + ; + pop ds + pop di + pop si + pop bp + ret +_inittwk ENDP + +PUBLIC _lineblit +_lineblit PROC FAR + push bp + mov bp,sp + push si + push di + push ds + mov di,[bp+6] + mov es,[bp+8] + mov si,[bp+10] + mov ds,[bp+12] + zpl=0 + REPT 4 + mov dx,3c4h + mov ax,02h+(100h shl zpl) + out dx,ax + zzz=0 + REPT 80/2 + mov al,ds:[si+(zzz+0)*4+zpl] + mov ah,ds:[si+(zzz+1)*4+zpl] + mov es:[di+zzz],ax + zzz=zzz+2 + ENDM + zpl=zpl+1 + ENDM + pop ds + pop di + pop si + pop bp + ret +_lineblit ENDP + +REPOUTSB MACRO + local l1 +l1: mov al,ds:[si] + inc si + out dx,al + dec cx + jnz l1 + ENDM + +PUBLIC _setpalarea +_setpalarea PROC FAR + push bp + mov bp,sp + push si + push di + push ds + mov si,[bp+6] + mov ds,[bp+8] + mov ax,[bp+10] + mov dx,3c8h + out dx,al + inc dx + mov cx,[bp+12] + shl cx,1 + add cx,ax + REPOUTSB + pop ds + pop di + pop si + pop bp + ret +_setpalarea ENDP + +code ENDS + END + \ No newline at end of file diff --git a/END/ASM.OBJ b/END/ASM.OBJ new file mode 100644 index 0000000..3d4b3d7 Binary files /dev/null and b/END/ASM.OBJ differ diff --git a/END/DOPIC.BAT b/END/DOPIC.BAT new file mode 100644 index 0000000..8daaf51 --- /dev/null +++ b/END/DOPIC.BAT @@ -0,0 +1,3 @@ +..\util\lbm2p pic.lbm pic.uh +..\util\doobj pic.uh _pic _pic.obk +nmake diff --git a/END/DP_PREFS b/END/DP_PREFS new file mode 100644 index 0000000..8f0ef71 Binary files /dev/null and b/END/DP_PREFS differ diff --git a/END/END.C b/END/END.C new file mode 100644 index 0000000..60cf8b0 --- /dev/null +++ b/END/END.C @@ -0,0 +1,130 @@ +#include +#include "..\dis\dis.h" + +#include "readp.c" + +extern char pic[]; + +char *vram=(char *)0xa0000000L; + +char *scroller[]={ +" S e c o n d R e a l i t y ", +" ", +" has entirely been created by ", +" the Future Crew in 1993 ", +" ", +" First presented at ", +" Assembly 1993 - Finland ", +/*" ", +" ", +" credits... ", +" ", +" (this is surely the best ", +" endscroller ever!) ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +*/}; + +char pal2[768]; +char palette[768]; +char rowbuf[640]; + +main() +{ + int a,b,c,y; + dis_partstart(); + _asm + { + mov dx,3c0h + mov al,11h + out dx,al + mov al,255 + out dx,al + mov al,20h + out dx,al + } + dis_waitb(); + outp(0x3c8,0); + for(a=0;a<768-3;a++) outp(0x3c9,63); +// _asm mov ax,13h+80h +// _asm int 10h +// inittwk(); + _asm + { + mov dx,3d4h + mov ax,000ch + out dx,ax + mov ax,000dh + out dx,ax + mov al,9 + out dx,al + inc dx + in al,dx + and al,not 80h + and al,not 31 + out dx,al + mov dx,3c0h + mov al,11h + out dx,al + mov al,0 + out dx,al + mov al,32 + out dx,al + } + dis_waitb(); + outp(0x3c8,0); + for(a=0;a<768-3;a++) outp(0x3c9,63); + for(a=0;a<32;a++) dis_waitb(); + + readp(palette,-1,pic); + for(y=0;y<400;y++) + { + readp(rowbuf,y,pic); + lineblit(vram+(unsigned)y*80U,rowbuf); + } + + for(c=0;c<=128;c++) + { + for(a=0;a<768-3;a++) pal2[a]=((128-c)*63+palette[a]*c)/128; + dis_waitb(); + setpalarea(pal2,0,255); + } + for(a=0;a<5000 && !dis_exit();a++) + { + dis_waitb(); + if(dis_musplus()>-16) break; + } + for(c=63;c>=0;c--) + { + for(a=0;a<768-3;a++) pal2[a]=(palette[a]*c)/64; + dis_waitb(); + setpalarea(pal2,0,255); + } + /* + _asm mov ax,4 + _asm int 10h + outp(0x3c8,0); outp(0x3c9,0); outp(0x3c9,0); outp(0x3c9,0); + for(a=0;a<768-3;a++) outp(0x3c9,40); + for(b=0;b<25;b++) printf("\n"); + for(a=0;a<24 && !kbhit();a++) + { + printf("%s\n",scroller[a]); + for(b=0;b<20;b++) dis_waitb(); + } + */ +} diff --git a/END/END.EXE b/END/END.EXE new file mode 100644 index 0000000..fc664bd Binary files /dev/null and b/END/END.EXE differ diff --git a/END/END.OBJ b/END/END.OBJ new file mode 100644 index 0000000..9653674 Binary files /dev/null and b/END/END.OBJ differ diff --git a/END/END2.EXE b/END/END2.EXE new file mode 100644 index 0000000..a0caf55 Binary files /dev/null and b/END/END2.EXE differ diff --git a/END/FUTURE_8.LBM b/END/FUTURE_8.LBM new file mode 100644 index 0000000..086e282 Binary files /dev/null and b/END/FUTURE_8.LBM differ diff --git a/END/MAKEFILE b/END/MAKEFILE new file mode 100644 index 0000000..f9e38ef --- /dev/null +++ b/END/MAKEFILE @@ -0,0 +1,24 @@ +all : end.exe + +# objects + +objs=end.obj asm.obj _pic.obk + +# option flags + +asm_f = /ML /m9 /s /JJUMPS +c_f = /AL /c /W3 + +# general compile orders + +.asm.obj : + tasm $(asm_f) $< + +.c.obj : + cl /qc $(c_f) $< + +end.exe : $(objs) + link /E $(objs)+..\dis\disc.obj,end.exe,nul; + copy end.exe ..\main\data\endlogo.exe + + diff --git a/END/NUTS.LBM b/END/NUTS.LBM new file mode 100644 index 0000000..b4cf2d1 Binary files /dev/null and b/END/NUTS.LBM differ diff --git a/END/PIC.LBM b/END/PIC.LBM new file mode 100644 index 0000000..b4cf2d1 Binary files /dev/null and b/END/PIC.LBM differ diff --git a/END/PIC.UH b/END/PIC.UH new file mode 100644 index 0000000..03d1242 Binary files /dev/null and b/END/PIC.UH differ diff --git a/END/READP.C b/END/READP.C new file mode 100644 index 0000000..67cb5ef --- /dev/null +++ b/END/READP.C @@ -0,0 +1,64 @@ +struct st_readp +{ + int magic; + int wid; + int hig; + int cols; + int add; +}; + +void readp(char *dest,int row,char *src) +{ + int bytes,a,b; + struct st_readp *hdr; + hdr=(struct st_readp *)src; + if(row==-1) + { + memcpy(dest,src+16,hdr->cols*3); + return; + } + if(row>=hdr->hig) return; + src+=hdr->add*16; + while(row) + { + src+=*(int *)src; + src+=2; + row--; + } + bytes=*(int *)src; + src+=2; + _asm + { + push si + push ds + push di + push es + mov cx,bytes + lds si,src + add cx,si + les di,dest + l1: mov al,ds:[si] + inc si + or al,al + jns l2 + mov ah,al + and ah,7fh + mov al,ds:[si] + inc si + l4: mov es:[di],al + inc di + dec ah + jnz l4 + cmp si,cx + jb l1 + jmp l3 + l2: mov es:[di],al + inc di + cmp si,cx + jb l1 + l3: pop es + pop di + pop ds + pop si + } +} diff --git a/END/SM.COM b/END/SM.COM new file mode 100644 index 0000000..fc9c5a2 Binary files /dev/null and b/END/SM.COM differ diff --git a/END/TMP.BBM b/END/TMP.BBM new file mode 100644 index 0000000..04a9f64 Binary files /dev/null and b/END/TMP.BBM differ diff --git a/END/_PIC.OBK b/END/_PIC.OBK new file mode 100644 index 0000000..08beacd Binary files /dev/null and b/END/_PIC.OBK differ diff --git a/ENDPIC/ASM.ASM b/ENDPIC/ASM.ASM new file mode 100644 index 0000000..aa77140 --- /dev/null +++ b/ENDPIC/ASM.ASM @@ -0,0 +1,110 @@ +code SEGMENT para public 'CODE' + ASSUME cs:code +.386 +LOCALS + +PUBLIC _inittwk +_inittwk PROC FAR + push bp + mov bp,sp + push si + push di + push ds + ;clear palette + mov dx,3c8h + xor al,al + out dx,al + inc dx + mov cx,768 +@@1: out dx,al + loop @@1 + ;400 rows + mov dx,3d4h + mov ax,00009h + out dx,ax + ;tweak + mov dx,3d4h + mov ax,00014h + out dx,ax + mov ax,0e317h + out dx,ax + mov dx,3c4h + mov ax,0604h + out dx,ax + ; + mov dx,3c4h + mov ax,0f02h + out dx,ax + mov ax,0a000h + mov es,ax + xor di,di + mov cx,32768 + xor ax,ax + rep stosw + ; + pop ds + pop di + pop si + pop bp + ret +_inittwk ENDP + +PUBLIC _lineblit +_lineblit PROC FAR + push bp + mov bp,sp + push si + push di + push ds + mov di,[bp+6] + mov es,[bp+8] + mov si,[bp+10] + mov ds,[bp+12] + zpl=0 + REPT 4 + mov dx,3c4h + mov ax,02h+(100h shl zpl) + out dx,ax + zzz=0 + REPT 80/2 + mov al,ds:[si+(zzz+0)*4+zpl] + mov ah,ds:[si+(zzz+1)*4+zpl] + mov es:[di+zzz],ax + zzz=zzz+2 + ENDM + zpl=zpl+1 + ENDM + pop ds + pop di + pop si + pop bp + ret +_lineblit ENDP + +PUBLIC _setpalarea +_setpalarea PROC FAR + push bp + mov bp,sp + push si + push di + push ds + mov si,[bp+6] + mov ds,[bp+8] + mov ax,[bp+10] + mov dx,3c8h + out dx,al + inc dx + mov cx,[bp+12] + shl cx,1 + add cx,ax + rep outsb + pop ds + pop di + pop si + pop bp + ret +_setpalarea ENDP + +code ENDS + END + \ No newline at end of file diff --git a/ENDPIC/ASM.OBJ b/ENDPIC/ASM.OBJ new file mode 100644 index 0000000..55a1065 Binary files /dev/null and b/ENDPIC/ASM.OBJ differ diff --git a/ENDPIC/BEG.C b/ENDPIC/BEG.C new file mode 100644 index 0000000..8abe674 --- /dev/null +++ b/ENDPIC/BEG.C @@ -0,0 +1,50 @@ +#include +#include "..\dis\dis.h" + +#include "readp.c" + +extern char pic[]; + +char *vram=(char *)0xa0000000L; + +char pal2[768]; +char palette[768]; +char rowbuf[640]; + +main() +{ + int a,b,c,y; + dis_partstart(); + _asm mov ax,13h + _asm int 10h + inittwk(); + _asm + { + mov dx,3c0h + mov al,11h + out dx,al + mov al,255 + out dx,al + mov al,20h + out dx,al + } + + readp(palette,-1,pic); + for(y=0;y<400;y++) + { + readp(rowbuf,y,pic); + lineblit(vram+(unsigned)y*80U,rowbuf); + } + + for(c=0;c<=128;c++) + { + for(a=0;a<768-3;a++) pal2[a]=((128-c)*63+palette[a]*c)/128; + dis_waitb(); + setpalarea(pal2,0,255); + } + for(a=0;a<300 && !dis_exit();a++) + { + dis_waitb(); + if(dis_muscode(0xf0)==0xf0) break; + } +} diff --git a/ENDPIC/BEG.EXE b/ENDPIC/BEG.EXE new file mode 100644 index 0000000..ffb4c3d Binary files /dev/null and b/ENDPIC/BEG.EXE differ diff --git a/ENDPIC/BEG.OBJ b/ENDPIC/BEG.OBJ new file mode 100644 index 0000000..1dbab2e Binary files /dev/null and b/ENDPIC/BEG.OBJ differ diff --git a/ENDPIC/DP_PREFS b/ENDPIC/DP_PREFS new file mode 100644 index 0000000..8f0ef71 Binary files /dev/null and b/ENDPIC/DP_PREFS differ diff --git a/ENDPIC/MAKEFILE b/ENDPIC/MAKEFILE new file mode 100644 index 0000000..ba4dc0b --- /dev/null +++ b/ENDPIC/MAKEFILE @@ -0,0 +1,24 @@ +all : beg.exe + +# objects + +objs=beg.obj asm.obj + +# option flags + +asm_f = /ML /m9 /s /JJUMPS +c_f = /AL /c /W3 + +# general compile orders + +.asm.obj : + tasm $(asm_f) $< + +.c.obj : + cl /qc $(c_f) $< + +beg.exe : $(objs) + link /E $(objs)+_pic.obk+..\dis\disc.obj,beg.exe,nul; + copy beg.exe ..\main\data\beglogo.exe + + diff --git a/ENDPIC/PIC.LBM b/ENDPIC/PIC.LBM new file mode 100644 index 0000000..aab3a64 Binary files /dev/null and b/ENDPIC/PIC.LBM differ diff --git a/ENDPIC/PIC.UH b/ENDPIC/PIC.UH new file mode 100644 index 0000000..ae94b22 Binary files /dev/null and b/ENDPIC/PIC.UH differ diff --git a/ENDPIC/READP.C b/ENDPIC/READP.C new file mode 100644 index 0000000..67cb5ef --- /dev/null +++ b/ENDPIC/READP.C @@ -0,0 +1,64 @@ +struct st_readp +{ + int magic; + int wid; + int hig; + int cols; + int add; +}; + +void readp(char *dest,int row,char *src) +{ + int bytes,a,b; + struct st_readp *hdr; + hdr=(struct st_readp *)src; + if(row==-1) + { + memcpy(dest,src+16,hdr->cols*3); + return; + } + if(row>=hdr->hig) return; + src+=hdr->add*16; + while(row) + { + src+=*(int *)src; + src+=2; + row--; + } + bytes=*(int *)src; + src+=2; + _asm + { + push si + push ds + push di + push es + mov cx,bytes + lds si,src + add cx,si + les di,dest + l1: mov al,ds:[si] + inc si + or al,al + jns l2 + mov ah,al + and ah,7fh + mov al,ds:[si] + inc si + l4: mov es:[di],al + inc di + dec ah + jnz l4 + cmp si,cx + jb l1 + jmp l3 + l2: mov es:[di],al + inc di + cmp si,cx + jb l1 + l3: pop es + pop di + pop ds + pop si + } +} diff --git a/ENDPIC/SRTITLE.LBM b/ENDPIC/SRTITLE.LBM new file mode 100644 index 0000000..1cd01f7 Binary files /dev/null and b/ENDPIC/SRTITLE.LBM differ diff --git a/ENDPIC/SRTITLE.U b/ENDPIC/SRTITLE.U new file mode 100644 index 0000000..d4a4a75 Binary files /dev/null and b/ENDPIC/SRTITLE.U differ diff --git a/ENDPIC/TMP.BBM b/ENDPIC/TMP.BBM new file mode 100644 index 0000000..04a9f64 Binary files /dev/null and b/ENDPIC/TMP.BBM differ diff --git a/ENDPIC/_PIC.OBK b/ENDPIC/_PIC.OBK new file mode 100644 index 0000000..5099751 Binary files /dev/null and b/ENDPIC/_PIC.OBK differ diff --git a/ENDSCRL/ASMYT.ASM b/ENDSCRL/ASMYT.ASM new file mode 100644 index 0000000..6939656 --- /dev/null +++ b/ENDSCRL/ASMYT.ASM @@ -0,0 +1,75 @@ + IDEAL + MODEL large + P386 + +CODESEG + +PUBLIC C waitvr + +PROC C waitvr + + mov dx, 03dah +@@loop1: + in al, dx + test al, 08h + jnz @@loop1 +@@loop2: + in al, dx + test al, 08h + jz @@loop2 + + ret +ENDP + +PUBLIC C setstart + +PROC setstart + + ARG start:word + + push bp + mov bp,sp + + mov bx, [start] + mov dx, 03d4h + mov al, 0dh + mov ah, bl + out dx, ax + mov al, 0ch + mov ah, bh + out dx, ax + + pop bp + ret +ENDP + +PUBLIC C setrgbpalette + +PROC C setrgbpalette + + ARG pal:word, r:word, g:word, b:word + + mov dx, 3c8h + mov ax, [pal] + out dx, al + + inc dx + mov ax, [r] + out dx, al + mov ax, [g] + out dx, al + mov ax, [b] + out dx, al + + ret +ENDP + + +ENDS + +SEGMENT asdf byte use16 private 'FAR_DATA' +PUBLIC C font +LABEL font +INCLUDE 'fona.inc' +ENDS +END diff --git a/ENDSCRL/ASMYT.OBJ b/ENDSCRL/ASMYT.OBJ new file mode 100644 index 0000000..0a8cad3 Binary files /dev/null and b/ENDSCRL/ASMYT.OBJ differ diff --git a/ENDSCRL/ENDSCRL.DSK b/ENDSCRL/ENDSCRL.DSK new file mode 100644 index 0000000..dc7ba79 Binary files /dev/null and b/ENDSCRL/ENDSCRL.DSK differ diff --git a/ENDSCRL/ENDSCRL.EXE b/ENDSCRL/ENDSCRL.EXE new file mode 100644 index 0000000..ad42279 Binary files /dev/null and b/ENDSCRL/ENDSCRL.EXE differ diff --git a/ENDSCRL/ENDSCRL.PRJ b/ENDSCRL/ENDSCRL.PRJ new file mode 100644 index 0000000..3b0fd1f Binary files /dev/null and b/ENDSCRL/ENDSCRL.PRJ differ diff --git a/ENDSCRL/ENDSCROL.TXT b/ENDSCRL/ENDSCROL.TXT new file mode 100644 index 0000000..129567a --- /dev/null +++ b/ENDSCRL/ENDSCROL.TXT @@ -0,0 +1,118 @@ +Lerto has coded this hilariously fantastic +piece of non-interactive software +entertainment soon available to you all! + +There has been quite a fucking lot of +job to be done here and Mika's phone +has been ringing helluva lot. + +The guys' daily rhythm has gone haywire, as +they yesterday went to sleep at 6:00 a.m. +and woke up at 13:00. Farkin' great... + +Now Pixel (who seemingly Sucks?) has a giant +job to be done: to perfectly smooth a +37-frame animation of a bald man's face +saying "I am not an atomic playboy" ... guess +it'll take days to finish... at least it will +keep him out of our way ;-). + + + + - - - + + +And now do you know what is +coming up, kids? +A font test!!! Yeah!!!! + +Here goes: + +abcdefghijklmnopqrstuvwxyz +ABCDEFGHIJKLMNOPQRSTUVWXYZ +1234567890!?;:-,.=+ + +(why certainly I know my ABC...) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ENDSCRL/FONA.INC b/ENDSCRL/FONA.INC new file mode 100644 index 0000000..8cc03e8 --- /dev/null +++ b/ENDSCRL/FONA.INC @@ -0,0 +1,2813 @@ + db 0,0,0,0,0,0,0,0,1,2,2,1,0,0,0 + db 0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3 + db 3,2,1,0,0,0,0,0,0,1,2,3,3,3,3,3 + db 3,2,1,3,0,3,3,3,3,3,3,3,3,3,3,3 + db 3,2,1,0,0,0,0,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,3,0,0,0,0,1,2,3,3,3,3,3,3 + db 3,2,1,3,0,0,0,3,3,3,3,3,3,3,0,0 + db 0,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3 + db 3,3,0,0,0,0,0,3,3,3,3,3,3,3,3,3 + db 0,3,3,3,3,3,3,3,0,0,0,0,3,3,3,3 + db 3,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0 + db 0,0,0,3,3,3,3,3,1,0,0,0,0,0,0,0 + db 0,3,3,3,3,3,0,3,3,3,3,2,1,0,0,0 + db 0,0,0,3,3,3,3,3,3,0,0,0,0,1,2,3 + db 3,3,3,3,3,2,1,0,0,0,0,3,3,3,3,3 + db 3,3,3,3,2,1,0,0,0,0,0,0,1,2,3,3 + db 3,3,3,3,2,1,0,0,0,0,3,3,3,3,3,3 + db 3,3,3,3,2,1,0,0,0,0,0,0,0,1,2,3 + db 3,3,3,3,3,2,1,3,0,0,3,3,3,3,3,3 + db 3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,0 + db 0,0,0,3,3,3,3,3,3,0,3,3,3,3,3,3 + db 3,3,0,0,0,0,3,3,3,3,3,3,0,3,3,3 + db 3,3,3,0,0,3,3,3,3,3,3,3,0,0,0,0 + db 3,3,3,3,3,3,0,3,3,3,3,3,3,0,0,0 + db 0,0,3,3,3,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,3,3,3,3,3,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 1,2,3,3,3,2,1,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,3,3,3,3,3,0,0,0 + db 0,0,0,0,0,0,0,0,3,3,3,3,3,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,1,2,3,3,3,3,3,3,2 + db 1,0,0,0,0,0,0,1,2,3,0,0,0,0,0,1 + db 2,3,3,3,3,3,3,2,1,0,0,0,1,2,3,3 + db 3,3,3,3,2,1,0,0,0,0,0,0,0,0,0,0 + db 1,2,3,3,0,0,0,0,0,3,3,3,3,3,3,3 + db 3,3,2,0,0,0,0,0,0,1,2,3,3,3,3,3 + db 2,1,0,0,3,3,3,3,3,3,3,3,3,3,3,2 + db 0,0,1,2,3,3,3,3,2,1,0,0,0,0,0,1 + db 2,3,3,3,3,3,2,1,0,0,0,3,3,3,0,0 + db 0,0,3,3,3,3,3,3,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,3,3,3,0,0,0 + db 3,3,3,0,0,0,0,3,3,3,0,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,2,3,3,2,1,0,0,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,1,2,3,2,1 + db 0,0,0,0,2,3,3,3,2,0,0,1,2,3,3,3 + db 0,0,0,3,3,3,0,0,0,0,1,2,3,3,3,2 + db 0,0,0,0,0,3,3,3,0,0,0,0,0,1,2,3 + db 3,0,0,0,3,3,3,0,0,0,0,0,1,2,3,3 + db 0,0,0,2,3,3,3,2,1,0,0,1,2,3,3,3 + db 0,0,0,0,0,3,3,3,0,0,0,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,1,3,3,2,1,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,3,3,3,2,0,0,0,0,0,0,0,1,3,3,3 + db 0,0,0,0,0,3,3,3,2,1,0,0,0,0,0,0 + db 0,3,3,0,0,0,0,1,2,3,3,3,2,1,1,2 + db 3,3,3,2,1,0,0,0,0,3,3,3,0,0,1,2 + db 3,3,2,0,0,0,0,2,3,3,3,2,1,1,2,3 + db 3,3,2,0,0,0,0,0,3,3,3,0,0,0,1,2 + db 3,3,2,0,0,0,0,0,1,3,3,2,1,0,0,1 + db 2,3,3,3,0,0,3,3,2,1,0,3,3,3,0,1 + db 2,3,3,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 0,3,3,0,0,0,0,1,2,3,3,2,0,0,0,0 + db 0,0,0,1,3,2,0,0,0,0,1,3,3,3,1,0 + db 0,0,1,3,3,3,1,0,0,0,0,0,0,1,3,2 + db 1,0,0,1,2,3,3,2,1,0,0,0,0,0,1,2 + db 3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,1,3,3,2,1 + db 1,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,1,2,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,1,3,3,2,1,0,0,1,2,3,3,1,0,0 + db 0,1,2,3,3,3,0,0,0,0,1,2,3,2,1,0 + db 0,1,2,3,2,1,0,1,3,3,2,1,0,0,1,2 + db 3,2,1,0,0,0,0,0,0,0,0,1,2,3,3,3 + db 0,0,0,0,0,3,3,3,3,3,3,3,3,2,0,0 + db 0,0,0,1,2,3,3,2,1,0,0,2,3,3,2,0 + db 3,3,3,3,3,3,3,3,3,3,2,1,0,1,3,3 + db 2,1,1,2,3,3,1,0,0,0,1,3,3,2,1,0 + db 1,2,3,3,1,0,0,3,3,3,0,0,3,3,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,3,3,3,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,3,3,0,0,0,0,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 1,3,3,3,3,2,0,0,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,1,2,3,2,0,0,0,2 + db 3,3,3,2,0,0,0,0,0,1,2,3,0,0,0,3 + db 3,3,0,0,0,0,0,1,2,3,3,3,2,0,0,0 + db 0,3,3,3,0,0,0,0,0,0,1,2,3,0,0,0 + db 3,3,3,0,0,0,0,0,0,1,2,3,0,0,2,3 + db 3,3,2,0,0,0,0,0,0,1,2,3,0,0,0,0 + db 0,3,3,3,0,0,0,0,0,0,0,3,3,3,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,3,3,3,0,0 + db 0,0,0,1,2,3,2,1,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3 + db 3,1,0,0,0,0,0,0,2,3,3,3,0,0,0,0 + db 0,3,3,3,3,2,1,0,0,0,0,0,0,3,3,0 + db 0,0,0,2,3,3,3,2,0,0,0,0,2,3,3,3 + db 2,0,0,0,0,3,3,3,0,0,0,0,2,3,3,2 + db 0,0,2,3,3,3,2,1,0,0,1,2,3,3,3,2 + db 0,0,0,0,3,3,3,0,0,0,0,0,2,3,3,2 + db 0,0,0,0,2,3,2,1,0,0,0,0,0,1,2,3 + db 0,0,3,2,0,0,0,3,3,3,0,0,0,2,3,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,0,3,3,0 + db 0,0,0,0,1,3,3,3,1,0,0,0,0,0,0,2 + db 3,1,0,0,0,0,0,2,3,3,2,0,0,0,0,2 + db 3,3,2,0,0,0,0,0,0,2,3,1,0,0,0,0 + db 1,2,3,3,2,1,0,0,0,1,2,3,2,1,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,2,3,3,1,0,3,2,1,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,1,2,3,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,3 + db 2,1,0,0,0,0,1,2,3,3,1,0,3,3,3,3 + db 3,3,0,0,0,0,2,3,2,1,0,0,0,0,1,3 + db 3,2,0,2,3,2,1,0,0,0,0,1,3,3,2,0 + db 0,0,0,0,0,0,1,2,3,3,3,3,0,0,0,0 + db 0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,2 + db 3,2,1,0,0,0,0,1,2,3,3,0,3,2,1,0 + db 0,0,1,2,3,2,1,0,0,2,3,2,0,0,0,1 + db 2,3,2,0,0,1,3,3,2,1,0,0,0,1,2,3 + db 3,1,0,3,3,3,0,3,3,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,3,3,0,0,0,0,0,3,3,0,0,3,3,3 + db 0,0,0,0,0,0,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,3,3,0,0,3,3,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,2,3,2,2 + db 3,3,1,0,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,1,3,3,0,0,1,3,3,3,3,1 + db 0,0,0,0,0,0,0,3,0,0,0,3,3,3,0,0 + db 0,0,0,0,1,3,3,3,3,1,0,0,0,3,3,3 + db 0,0,0,0,0,0,0,1,3,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,1,3,0,1,3,3,3,3,1,0 + db 0,0,0,0,0,0,1,3,0,0,0,0,0,3,3,3 + db 0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,3,3,3,0,0,0,0,1,2 + db 3,2,1,0,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,0,0,0,0,0,0,3,3,3,3,2,0,0 + db 0,0,0,1,3,3,3,3,0,0,0,0,0,3,3,2 + db 3,3,2,1,0,0,0,0,0,3,3,0,0,0,1,3 + db 3,3,3,1,0,0,0,0,1,3,3,3,3,1,0,0 + db 0,3,3,3,0,0,0,0,1,3,3,3,0,1,3,3 + db 3,3,1,0,0,0,0,1,3,3,3,3,1,0,0,0 + db 3,3,3,0,0,0,0,0,1,3,3,3,0,0,0,0 + db 3,3,2,1,0,0,0,0,0,0,1,3,0,0,3,1 + db 0,0,0,3,3,3,0,0,0,1,3,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0 + db 0,2,3,3,2,0,0,0,0,0,1,3,2,0,0,0 + db 0,0,0,1,3,3,3,1,0,0,0,1,3,3,3,0 + db 0,0,0,0,1,3,2,0,0,0,0,0,0,1,2,3 + db 3,2,1,0,1,2,3,2,1,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,1,2,3,3,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,2,3,3,1,0,0,0 + db 0,0,0,1,3,3,2,0,0,0,0,3,3,3,0,0 + db 0,0,2,3,3,3,0,0,0,0,0,3,3,3,0,2 + db 3,3,2,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,1,2,3,2,3,3,3,0,0,0,0,0,3,0,0 + db 0,0,0,0,0,0,0,0,0,0,1,3,3,1,0,0 + db 0,0,0,2,3,3,2,0,3,1,0,0,0,1,2,3 + db 2,1,0,0,0,3,3,2,1,0,0,0,1,3,3,0 + db 0,2,3,3,1,0,0,0,0,0,1,3,3,2,0,3 + db 3,3,0,3,3,3,3,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3 + db 0,0,0,0,0,3,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,0,0,3,3,3,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,1,3,2,1,1,2,3,2,0 + db 0,0,0,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 1,2,3,2,0,0,2,3,3,3,2,0,0,0,0,0 + db 0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0 + db 0,2,3,3,3,2,0,0,0,3,3,3,0,0,0,1 + db 3,0,0,0,0,0,0,0,3,3,3,0,0,0,1,3 + db 0,0,0,0,0,2,3,3,3,2,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,3,3,3,0,0,0,1,2,3,2,1,0,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 0,0,0,0,0,3,3,2,3,3,1,0,0,0,0,2 + db 3,3,3,3,0,0,0,0,0,3,3,1,2,3,3,2 + db 1,0,0,0,0,3,3,0,0,0,2,3,3,3,2,0 + db 0,0,0,0,0,2,3,3,3,2,0,0,0,3,3,3 + db 0,0,0,0,1,3,3,3,0,2,3,3,3,2,0,0 + db 0,0,0,0,2,3,3,3,2,0,0,0,3,3,3,0 + db 0,0,0,0,1,3,3,3,0,0,0,0,2,3,3,2 + db 2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,0,0,3,3,0,0,0,0,0,0,1,3,3 + db 3,1,0,0,0,0,2,3,1,0,0,0,0,0,0,0 + db 2,3,3,2,0,0,0,0,2,3,3,1,0,0,0,0 + db 2,3,1,0,0,0,0,0,0,0,1,2,3,3,2,1 + db 2,3,2,1,0,0,0,0,0,1,2,3,3,3,3,3 + db 2,1,0,0,0,0,0,0,3,3,3,2,3,3,3,3 + db 2,1,0,0,0,0,0,1,2,3,3,3,3,3,2,1 + db 0,0,0,1,2,3,3,3,3,2,3,3,3,0,0,0 + db 0,0,1,2,3,3,3,3,3,2,1,0,0,3,3,3 + db 3,3,3,3,3,0,0,0,0,0,1,2,3,3,3,3 + db 3,3,2,0,0,0,0,0,3,3,3,2,3,3,3,3 + db 2,1,0,0,0,0,3,3,3,3,3,0,0,0,0,0 + db 0,0,3,3,3,3,3,0,0,0,3,3,3,0,0,3 + db 3,3,3,3,3,3,0,0,0,0,3,3,3,0,0,0 + db 3,3,3,3,3,1,2,3,3,2,1,1,2,3,3,3 + db 2,1,0,0,0,0,3,3,3,3,3,2,3,3,3,3 + db 2,1,0,0,0,0,0,1,2,3,3,3,3,3,2,1 + db 0,0,3,3,3,3,3,2,3,3,3,3,2,1,0,0 + db 0,0,0,1,2,3,3,3,3,2,3,3,3,0,0,0 + db 3,3,3,3,3,1,2,3,3,2,1,0,0,1,2,3 + db 3,3,3,2,3,0,0,3,3,3,3,3,3,3,3,0 + db 3,3,3,3,3,0,0,0,3,3,3,3,3,0,0,0 + db 3,3,3,3,3,3,2,0,0,0,0,3,3,3,3,0 + db 3,3,3,3,3,3,3,0,0,2,3,3,3,3,2,0 + db 0,3,3,3,3,3,3,0,3,3,3,3,3,3,0,0 + db 0,3,3,3,3,3,0,3,3,3,3,3,3,3,0,0 + db 0,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3 + db 3,3,3,3,0,3,3,3,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,3,3,3,0,0,0,0,1,2 + db 3,3,0,0,0,0,1,3,3,2,0,1,2,3,3,0 + db 0,0,0,1,3,3,2,0,0,0,0,0,1,2,3,2 + db 1,3,3,3,0,0,0,0,0,3,0,0,0,0,0,0 + db 0,0,0,0,0,0,2,3,3,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,1,2,3,2,1,0,0,0 + db 0,2,3,3,2,1,0,1,2,3,2,0,0,3,3,3 + db 0,0,0,0,0,0,0,3,3,3,0,3,3,3,0,0 + db 3,3,3,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0 + db 3,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3 + db 3,3,3,3,0,3,3,3,3,3,3,3,3,3,0,3 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,2,3,1,0,0,1,3,3,1,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,1,2,3,3,1 + db 0,0,3,3,3,3,1,0,0,0,0,0,0,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,1,3,3 + db 3,3,0,0,0,3,3,3,0,0,1,2,3,0,0,0 + db 0,0,0,0,3,3,3,0,0,1,2,3,0,0,0,0 + db 0,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,3,3,3,0,0,0,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,3 + db 3,3,0,0,1,2,3,2,1,0,0,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,3,3,1,3,3,2,0,0,0,1,3,2,3,3,3 + db 0,0,0,0,0,3,3,0,1,2,3,3,2,1,0,0 + db 0,3,3,0,0,0,3,3,3,3,1,0,0,0,0,0 + db 0,1,3,3,3,3,0,0,0,3,3,3,0,0,0,0 + db 2,3,3,2,0,3,3,3,3,1,0,0,0,0,0,0 + db 1,3,3,3,3,0,0,0,3,3,3,0,0,0,0,0 + db 2,3,3,2,0,0,0,0,1,2,3,3,3,3,2,2 + db 1,1,0,0,0,0,0,0,0,0,0,3,3,3,0,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 0,3,3,0,0,0,0,0,0,0,2,3,3,2,0,0 + db 0,1,3,2,0,0,0,0,0,0,0,0,1,3,3,3 + db 1,0,0,0,1,3,3,2,0,0,0,1,3,2,0,0 + db 0,0,0,0,0,0,0,1,2,3,3,3,3,2,1,0 + db 0,0,0,0,0,2,3,1,0,0,1,2,3,3,1,0 + db 0,0,0,0,3,3,3,3,2,1,1,2,3,3,1,0 + db 0,0,1,3,3,2,1,0,0,2,3,2,0,0,1,3 + db 3,2,1,0,2,3,3,3,3,0,0,0,0,1,3,3 + db 2,1,0,0,2,3,3,1,0,0,0,3,3,3,0,0 + db 0,0,0,0,0,1,2,3,2,1,0,1,2,3,3,1 + db 0,0,0,0,3,3,3,3,2,1,1,2,3,3,1,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,3,3,3,0,0,1,2,3,2,1 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,3,3 + db 3,2,3,2,2,3,3,2,3,2,1,2,3,3,1,0 + db 0,0,0,0,3,3,3,3,2,1,1,2,3,3,1,0 + db 0,0,1,3,3,2,1,0,1,2,3,3,1,0,0,0 + db 3,3,3,3,2,1,1,2,3,3,2,0,0,0,2,3 + db 3,2,1,1,2,3,3,3,3,0,0,0,0,0,3,3 + db 3,2,3,2,1,3,3,0,1,2,3,2,1,1,2,3 + db 3,0,0,0,0,3,3,3,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,3,3,3,0,0,0,0,0,2,3 + db 3,2,0,0,0,0,0,2,3,2,0,0,0,0,2,3 + db 3,1,0,0,0,0,0,3,3,1,0,0,0,0,1,3 + db 2,0,0,0,0,1,2,3,2,1,0,0,1,2,3,2 + db 1,0,0,0,0,2,3,3,1,0,0,0,0,0,1,3 + db 2,0,0,0,0,3,2,1,0,0,0,1,2,3,2,1 + db 0,3,3,3,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,0,0,0 + db 0,1,2,3,2,1,0,0,0,0,0,0,0,0,1,2 + db 3,3,1,0,0,0,0,1,2,3,2,1,0,3,3,3 + db 0,0,0,0,0,3,2,3,3,3,3,3,2,1,0,0 + db 0,0,3,3,3,1,2,3,3,3,3,2,1,0,0,0 + db 0,0,0,0,2,3,3,1,0,0,0,0,0,1,3,3 + db 3,3,3,3,3,2,1,0,0,2,3,3,1,0,0,0 + db 0,0,1,3,3,3,0,3,3,3,0,0,0,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,3,3,3,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,3,3,3,3,0,0,0 + db 0,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3 + db 2,0,0,0,0,2,3,2,0,0,0,0,0,0,0,0 + db 3,3,3,3,3,3,3,3,3,3,2,1,0,0,3,3 + db 3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,0,0,3,3,3,3,0,0 + db 0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0 + db 3,3,3,3,3,3,3,3,0,0,0,0,0,3,3,3 + db 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,3,3,3,0,1 + db 2,3,2,1,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0 + db 2,3,3,1,0,0,2,3,1,3,3,3,0,0,0,0 + db 0,3,3,0,0,1,2,3,3,2,1,0,0,3,3,0 + db 0,0,3,3,3,3,0,0,0,0,0,0,0,0,3,3 + db 3,3,0,0,0,3,3,3,0,0,1,2,3,3,2,0 + db 0,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3 + db 3,0,0,0,3,3,3,0,0,0,1,2,3,3,2,1 + db 0,0,0,0,0,0,1,2,2,3,3,3,3,3,2,1 + db 0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,0,3,3,0 + db 0,0,0,0,0,0,1,3,3,3,1,0,0,2,3,1 + db 0,0,0,0,0,0,0,0,0,2,3,3,2,0,0,0 + db 2,3,3,3,1,0,0,2,3,1,0,0,0,0,0,0 + db 0,0,0,0,1,2,3,3,2,1,0,0,0,0,0,0 + db 0,2,3,3,1,0,0,1,3,3,2,0,0,0,0,0 + db 3,3,3,2,0,0,0,0,2,3,3,1,0,1,3,3 + db 2,0,0,0,2,3,2,1,0,1,3,3,2,1,0,0 + db 1,2,3,3,3,0,0,0,1,3,3,2,0,0,0,0 + db 0,3,3,2,0,0,0,3,3,3,0,0,0,0,0,0 + db 0,2,3,3,1,0,0,0,1,3,3,2,0,0,0,0 + db 3,3,3,2,1,0,0,1,3,3,2,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,3,3,3,0,1,2,3,2,1,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,3,3,3,3,2,1 + db 1,3,3,3,2,1,0,1,3,3,2,0,0,0,0,0 + db 3,3,3,2,1,0,0,1,3,3,2,0,0,0,2,3 + db 3,1,0,0,0,1,3,3,2,0,0,0,3,3,3,2 + db 1,0,0,1,2,3,3,1,0,1,3,3,2,1,0,0 + db 1,2,3,3,3,0,0,0,0,0,3,3,3,3,1,0 + db 2,3,2,0,2,3,2,1,0,0,1,2,3,0,0,0 + db 0,3,3,3,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,1,3,3,3,1,0 + db 0,0,1,3,2,0,0,0,0,0,1,3,3,2,0,0 + db 0,0,1,3,3,2,0,0,0,0,2,3,1,0,0,0 + db 0,0,1,2,3,2,1,0,2,3,2,1,0,0,0,0 + db 0,1,3,3,2,0,0,0,0,0,2,3,1,0,0,0 + db 0,3,1,0,0,0,1,2,3,2,1,0,0,3,3,3 + db 0,0,0,0,0,0,0,0,3,3,3,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,0,0,0,1,2,3,3,2 + db 0,0,0,0,0,0,0,0,2,3,3,3,2,1,0,0 + db 0,0,1,2,3,2,1,0,0,3,3,3,0,0,0,0 + db 0,3,3,2,1,0,1,2,3,3,2,0,0,0,3,3 + db 3,2,3,2,1,1,2,3,3,1,0,0,0,0,0,1 + db 3,3,2,0,0,0,0,0,0,0,1,2,3,3,3,3 + db 3,3,2,0,0,1,3,3,2,1,0,0,0,1,2,3 + db 3,3,0,3,3,3,0,0,0,0,0,0,0,3,3,3 + db 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,3,3,3,0,3,3 + db 3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3 + db 3,0,0,0,3,3,0,0,3,3,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,2,3,1,0,0,0 + db 0,1,3,3,1,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,1,2,3,2,1,0,3,3,3,3,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,0 + db 0,0,0,0,0,0,3,3,3,3,0,0,0,3,3,3 + db 0,0,1,2,3,0,0,0,0,0,0,0,3,3,3,0 + db 0,1,2,3,0,0,0,0,0,3,3,3,3,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3 + db 0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,3,3,3,1,2,3,3,3,2 + db 1,0,0,0,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,0,0,0,0,0,0,3,3,0,1,3,3,2 + db 0,0,3,2,0,3,3,3,0,0,0,0,0,3,3,0 + db 0,0,1,2,3,3,2,1,0,3,3,0,0,0,3,3 + db 3,3,0,0,0,0,0,0,0,0,3,3,3,3,0,0 + db 0,3,3,3,3,3,3,3,2,1,0,0,0,3,3,3 + db 3,0,0,0,0,0,0,0,0,3,3,3,3,0,0,0 + db 3,3,3,3,3,3,3,3,3,2,1,0,0,0,0,0 + db 0,0,0,0,0,1,1,2,2,3,3,3,1,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0 + db 0,0,0,2,3,3,2,1,1,3,2,0,0,0,0,0 + db 0,0,0,0,0,1,3,3,3,1,0,1,3,2,3,3 + db 2,0,1,3,2,0,0,0,0,0,0,0,0,0,0,0 + db 1,3,3,3,2,1,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,3,3,3,1 + db 0,0,0,0,1,3,3,2,0,2,3,3,1,0,0,0 + db 0,0,0,0,0,2,3,3,1,0,0,0,0,1,3,3 + db 3,0,0,0,2,3,3,1,0,0,0,0,0,3,3,3 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,3,3,3 + db 0,0,0,0,0,3,3,3,0,0,0,0,3,3,3,1 + db 0,0,0,0,3,3,3,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,3,3,3,0,0,0,3,3 + db 3,1,2,3,2,1,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,3,3,3,2,1,0,0,3,3,3 + db 1,0,0,0,3,3,3,0,0,0,0,0,3,3,3,1 + db 0,0,0,0,3,3,3,0,0,0,3,3,3,0,0,0 + db 0,0,3,3,3,0,0,0,3,3,3,1,0,0,0,0 + db 1,3,3,2,0,2,3,3,1,0,0,0,0,1,3,3 + db 3,0,0,0,0,0,3,3,3,2,0,0,0,0,0,0 + db 2,3,3,3,2,1,0,0,1,0,0,0,0,3,3,3 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,2,3,3,2,0,0,0,2,3 + db 1,0,0,0,0,0,0,2,3,3,1,0,0,0,2,3 + db 3,3,1,0,0,0,3,2,0,0,0,0,0,0,0,1 + db 2,3,2,2,3,2,1,0,0,0,0,0,0,0,2,3 + db 3,1,0,0,0,1,3,2,0,0,0,0,0,0,0,0 + db 0,1,2,3,2,1,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,3,3,3,0,0 + db 0,0,0,0,0,1,2,3,3,2,1,0,0,0,0,0 + db 0,0,0,0,0,0,1,2,3,3,2,1,0,1,2,3 + db 2,1,0,0,0,3,3,3,0,0,0,0,0,3,2,0 + db 0,0,0,0,2,3,3,1,0,0,3,3,3,3,2,1 + db 0,0,0,2,3,3,1,0,0,0,0,2,3,3,1,0 + db 0,0,0,0,0,0,1,3,3,1,1,2,3,3,3,1 + db 0,0,1,2,3,2,1,1,2,3,3,3,3,3,0,3 + db 3,3,0,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,3,0,3,3,3,3,3,3 + db 3,3,3,0,3,3,3,3,3,3,3,3,3,0,0,3 + db 3,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,1,3,3,3,3,3,3,3,3,3,3 + db 2,0,0,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,1,2,3,2,0,3,3,3,3,1,0,0,0,0,0 + db 0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0 + db 0,1,3,3,3,3,0,0,0,3,3,3,0,0,0,1 + db 3,0,0,0,0,0,0,0,3,3,3,0,0,0,1,3 + db 0,0,0,0,0,3,3,3,3,1,0,0,0,0,3,3 + db 3,3,3,3,3,3,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,3,3,3,2,3,2,2,3,3,2,1,0,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 0,0,0,0,0,3,3,0,0,2,3,3,1,2,3,1 + db 0,3,3,3,0,0,0,0,0,3,3,0,0,0,0,1 + db 2,3,3,2,1,3,3,0,0,0,3,3,3,3,1,0 + db 0,0,0,0,0,1,3,3,3,3,0,0,0,3,3,3 + db 0,0,0,0,0,0,0,0,0,3,3,3,3,0,0,0 + db 0,0,0,0,0,3,3,3,3,0,0,0,3,3,3,0 + db 0,0,1,2,3,3,2,1,0,0,0,0,2,0,0,0 + db 0,0,0,0,1,2,3,3,2,0,0,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,1 + db 3,3,3,2,2,3,1,0,0,0,0,0,0,0,0,0 + db 0,0,2,3,3,2,1,2,3,1,3,3,3,1,2,3 + db 1,0,0,0,0,0,0,0,0,0,0,1,2,3,2,3 + db 3,2,1,0,0,0,0,0,0,0,1,2,3,3,3,3 + db 3,3,3,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,3,3,3,0,3,3,3,0,0,0,0,0,0,0,0 + db 0,3,3,3,0,0,0,0,0,0,3,3,3,0,0,0 + db 3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,3 + db 3,3,0,0,0,0,0,0,0,2,3,3,1,0,0,0 + db 1,3,3,2,0,0,0,0,3,3,3,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,3,3,3,2,3,3 + db 2,1,0,0,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,3,3,3,1,0,0,0,3,3,3,0,0,0,0 + db 3,3,3,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 3,3,3,0,0,0,3,3,3,0,0,0,0,0,3,3 + db 3,0,0,0,3,3,3,0,0,0,0,0,0,3,3,3 + db 0,3,3,3,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,3,3,3,1,0,0,0,0,0,0,0,2,3,3 + db 3,3,2,1,0,0,0,0,0,3,3,3,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,1,3,3,3,1,0,1,3,2,0,0,0,0 + db 0,0,0,1,3,3,2,0,0,1,3,3,3,3,2,0 + db 0,1,3,2,0,0,0,0,0,0,0,0,1,3,3,3 + db 2,1,0,0,0,0,0,0,0,0,1,3,3,2,0,0 + db 0,2,3,1,0,0,0,0,0,0,0,0,1,2,3,2 + db 1,0,0,0,0,3,3,3,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,3,3,3,0,0,0,0,0,1 + db 2,3,3,2,1,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,2,3,3,2,0,2,3,2,1,0,0,0 + db 0,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0 + db 1,3,3,2,0,0,3,3,3,2,0,0,0,0,0,1 + db 3,3,2,0,0,0,0,3,3,3,0,0,0,0,0,0 + db 0,1,3,2,1,0,0,1,2,3,3,2,0,0,0,0 + db 2,3,3,3,3,2,1,3,3,3,0,3,3,3,0,0 + db 0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,3,3,3,0,0,0,0,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,3,3,3,3,3,3,3,3,3,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,2,3,1,0,0,0,0,0,0,2,3,3,1,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,1,3 + db 3,0,2,3,3,3,2,0,0,0,0,0,0,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,2,3,3 + db 3,2,0,0,0,3,3,3,0,0,0,0,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 0,2,3,3,3,2,0,0,0,0,0,0,0,3,3,3 + db 0,0,0,0,0,3,3,3,0,0,0,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,3,3,3,0,0,0,0,1 + db 2,3,2,0,0,0,3,3,3,0,0,0,0,0,0,3 + db 3,3,3,2,1,1,2,3,3,2,1,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,3,3,0,0,1,3,3,2,3,2,0,0,3,3,3 + db 0,0,0,0,0,3,3,0,0,0,0,0,1,2,3,3 + db 2,3,3,0,0,0,2,3,3,3,2,0,0,0,0,0 + db 0,2,3,3,3,2,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,0,0,2,3,3,3,0,0,1,1,1,0,0 + db 1,3,3,3,2,0,0,0,3,3,3,0,0,0,0,0 + db 2,3,3,2,0,0,0,0,3,0,0,0,0,0,0,0 + db 0,1,2,3,3,0,0,0,0,0,0,3,3,3,0,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 0,3,3,0,0,0,0,0,0,0,0,0,2,3,3,3 + db 3,2,0,0,0,0,0,0,0,0,0,0,0,0,1,3 + db 3,3,2,3,2,0,2,3,3,2,3,2,0,0,0,0 + db 0,0,0,0,0,0,1,2,3,2,1,2,3,3,2,1 + db 0,0,0,0,1,2,3,3,2,1,0,0,3,3,3,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,3,3,3 + db 0,3,3,3,0,0,0,0,0,0,0,0,0,3,3,3 + db 0,0,0,0,0,0,3,3,3,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,0 + db 0,0,0,0,0,1,3,3,2,1,0,1,2,3,3,1 + db 0,0,0,0,3,3,3,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,3,3,3,3,2,2,3,2,1,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,3,3 + db 3,0,0,0,0,3,3,3,0,0,0,0,3,3,3,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,3,3,3,0 + db 0,0,3,3,3,0,0,0,0,0,3,3,3,0,0,0 + db 3,3,3,0,0,0,0,0,0,3,3,3,0,3,3,3 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,0,0,0,1,2,3,3,3 + db 2,1,0,0,0,3,3,3,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 2,3,3,2,1,2,3,1,0,0,0,0,0,0,0,0 + db 2,3,3,1,0,2,3,1,1,3,3,1,1,2,3,1 + db 0,0,0,0,0,0,0,1,2,3,2,3,2,1,0,0 + db 0,0,0,0,0,0,0,2,3,3,1,0,1,3,2,0 + db 0,0,0,0,0,0,0,1,2,3,2,1,0,0,0,0 + db 0,3,3,3,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,3,3,3,0,0,0,0,1,2,3,2,1,0 + db 0,0,0,0,0,0,0,1,2,3,2,1,0,0,0,0 + db 1,3,3,3,0,3,3,3,3,3,3,3,3,3,3,3 + db 3,3,3,0,1,2,3,2,1,0,0,0,0,3,3,3 + db 0,0,2,3,3,1,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,2,3,1 + db 0,0,0,0,1,3,3,3,0,0,0,0,0,0,0,0 + db 0,0,0,3,3,2,0,3,3,3,0,0,0,0,0,3 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,3,3,3,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,1,3,2,0 + db 0,0,0,0,0,0,1,3,3,2,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,1,3,2,0,1,3 + db 3,3,3,1,0,0,0,0,0,0,0,1,0,0,0,3 + db 3,3,0,0,0,0,0,0,1,3,3,3,3,1,0,0 + db 0,3,3,3,0,0,0,0,0,0,0,1,3,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,0,1,3,3 + db 3,3,1,0,0,0,0,0,1,3,3,3,0,0,0,0 + db 0,3,3,3,0,0,0,0,0,0,0,3,3,3,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,2,3,3,3,0 + db 0,0,3,3,3,0,0,0,0,0,0,3,3,3,2,1 + db 0,0,1,2,3,3,2,1,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,1,3,0,0,0,3,3,0 + db 0,0,2,3,3,3,1,0,0,3,3,3,0,0,0,0 + db 0,3,3,0,0,0,0,0,0,1,2,3,3,3,3,0 + db 0,0,1,3,3,3,3,1,0,0,0,0,1,3,3,3 + db 3,1,0,0,0,3,3,3,0,0,0,0,0,0,0,0 + db 0,1,3,3,3,1,2,3,3,3,2,0,2,3,3,3 + db 1,0,0,0,3,3,3,0,0,0,0,0,1,3,3,3 + db 0,0,0,0,3,2,0,0,0,0,0,0,0,0,1,3 + db 3,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0 + db 0,0,3,3,3,1,0,0,0,0,0,0,1,3,3,0 + db 0,0,0,0,0,0,0,0,1,3,3,3,3,1,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,2,3,3,3,3 + db 1,0,1,3,3,3,3,1,0,0,0,0,0,0,0,0 + db 0,1,2,3,2,1,0,1,2,3,3,2,1,0,0,0 + db 2,3,3,2,0,0,0,1,3,3,3,0,0,0,0,0 + db 3,3,3,1,0,0,0,0,1,3,3,2,0,2,3,3 + db 1,0,0,0,0,0,0,0,0,2,3,3,1,0,0,0 + db 0,1,3,3,3,0,0,0,2,3,3,1,0,0,0,0 + db 0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0 + db 0,0,2,3,3,3,3,3,3,2,1,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,3,3,3,2,1,1,2,3,2,1,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,3,3,3,0,0,0 + db 0,3,3,3,0,0,0,0,3,3,3,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,3,3,3,0,0,0,3,3 + db 3,0,0,0,0,0,3,3,3,0,0,0,3,3,3,1 + db 0,0,0,0,1,3,3,2,0,2,3,3,1,0,0,0 + db 0,1,3,3,3,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,0,3,0,0,0,0,1,2,3,3,2,0,0 + db 0,3,3,3,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,1,3,3,3,0,0,0,0,0,0,0,1,3,3,3 + db 2,3,2,0,0,0,0,0,0,0,0,0,1,3,3,2 + db 1,3,2,0,0,2,3,2,2,3,2,0,0,0,0,0 + db 0,0,1,2,3,2,1,2,3,2,1,0,0,0,0,0 + db 0,0,0,1,3,3,2,1,2,3,1,0,0,0,0,0 + db 0,0,1,2,3,2,1,0,0,0,0,0,0,2,3,3 + db 1,0,0,0,0,0,0,1,3,3,2,0,0,0,0,3 + db 3,3,0,0,0,0,2,3,2,1,0,0,0,0,0,0 + db 1,3,0,2,3,2,1,0,0,0,0,0,1,3,3,2 + db 0,0,0,0,0,0,0,0,0,3,3,3,0,0,0,0 + db 2,3,2,1,0,0,0,0,1,3,3,3,0,0,1,3 + db 3,1,0,0,0,0,0,1,3,3,2,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,0,3,3,1,0,0,0,0 + db 1,3,3,2,0,1,2,3,2,1,0,0,0,0,1,3 + db 3,1,0,3,3,3,0,0,0,0,0,3,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,1,2,3,1,0,0,0,0,0 + db 0,0,0,2,3,3,1,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,1,2,3,2,0,0,2,3,3,3,2 + db 0,0,0,0,0,1,2,3,0,0,0,3,3,3,0,0 + db 0,0,0,1,2,3,3,3,2,0,0,0,0,3,3,3 + db 0,0,0,0,0,0,1,2,3,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,2,3,3,3,2,0 + db 0,0,0,0,2,3,3,3,0,0,0,0,0,3,3,3 + db 0,0,0,0,0,0,0,3,3,3,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,3,3,2,2,0,0,1,3,3 + db 2,0,0,0,0,0,0,3,3,3,1,0,0,0,0,1 + db 2,3,3,2,1,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,1,2,3,0,0,0,3,3,0,0,0,1,3 + db 3,2,0,0,0,3,3,3,0,0,0,0,0,3,3,0 + db 0,0,0,0,0,0,1,2,3,3,3,0,0,0,0,2 + db 3,3,3,2,1,0,0,0,2,3,3,3,2,0,0,0 + db 0,3,3,3,0,0,0,0,0,0,0,0,0,0,2,3 + db 3,2,3,2,1,2,3,1,3,3,3,2,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,3,3,3,1,0,1,0 + db 3,3,2,1,0,0,0,0,0,1,2,3,2,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,0,2,3 + db 3,2,0,0,0,0,0,0,2,3,2,0,0,0,0,0 + db 0,0,0,0,0,2,3,3,2,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,1,3,3,3,2,0,0,0,2 + db 3,3,2,0,0,0,0,0,0,0,0,0,1,2,3,2 + db 1,0,0,0,1,2,3,3,2,1,0,0,2,3,3,1 + db 0,0,0,2,3,3,3,0,1,0,0,0,3,3,3,2 + db 0,0,0,0,2,3,3,1,0,1,3,3,2,0,0,0 + db 0,0,1,1,0,1,3,3,2,1,0,0,1,2,3,3 + db 3,0,0,0,1,3,3,2,1,0,0,0,0,2,3,2 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,1,3,3 + db 3,2,1,0,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,3,3,3,0,0,0,3,3 + db 3,1,0,0,1,2,3,2,1,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,3,3,3,0,0,0,0,3,3,3 + db 0,0,0,0,3,3,3,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,3,3,3,0,0,0,2,3,3,1,0,0 + db 0,1,3,3,2,0,0,0,3,3,3,2,1,0,0,1 + db 2,3,3,1,0,1,3,3,2,1,0,0,1,2,3,3 + db 3,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 3,2,1,0,0,0,0,3,3,2,0,0,0,3,3,3 + db 0,0,1,0,0,0,2,3,3,1,0,0,0,2,3,3 + db 3,0,0,0,0,0,0,0,0,2,3,3,3,3,1,0 + db 0,0,0,0,0,0,0,0,0,2,3,3,3,3,0,0 + db 0,1,3,3,3,3,1,0,0,0,0,0,0,1,2,3 + db 2,1,0,1,2,3,2,1,0,0,0,0,0,0,0,0 + db 2,3,3,2,3,2,0,0,0,0,0,0,0,1,2,3 + db 2,1,0,0,0,0,1,3,0,1,3,3,2,1,0,0 + db 0,0,1,2,3,3,1,0,0,0,0,3,3,3,0,0 + db 0,0,3,3,1,0,0,0,0,0,0,1,2,3,0,2 + db 3,2,1,0,0,0,0,1,2,3,3,1,0,0,0,0 + db 0,0,0,0,0,3,3,3,0,0,0,0,2,3,2,1 + db 0,0,0,0,2,3,3,2,0,0,0,2,3,2,1,0 + db 0,0,0,2,3,3,1,0,0,0,0,3,3,3,0,0 + db 0,0,0,0,0,2,3,2,1,0,0,1,2,3,3,1 + db 0,2,3,2,1,0,0,0,0,1,2,3,2,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,3,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,1,2,3,2,0,0,0,0,0,0,0,0,0,1 + db 3,3,2,1,0,0,0,0,3,3,3,0,0,0,0,0 + db 1,2,3,3,1,0,0,0,2,3,3,3,2,0,0,1 + db 2,3,3,2,0,0,0,3,3,3,0,0,0,0,1,2 + db 3,3,3,2,0,0,0,0,0,3,3,3,0,0,0,0 + db 0,1,2,3,3,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,0,2,3,3,3,2,1,0,1,2 + db 3,3,3,3,0,0,0,0,0,3,3,3,0,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,2,3,2,1,0,1,2,3,3,1,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,1,2,3,3 + db 2,1,0,0,0,0,3,3,3,0,0,0,0,0,1,2 + db 3,3,0,0,0,3,3,0,0,0,0,2,2,1,0,0 + db 0,3,3,3,0,0,0,0,0,3,3,0,0,0,0,0 + db 0,0,0,1,2,3,3,0,0,0,0,1,2,3,3,3 + db 2,1,1,2,3,3,3,2,1,0,0,0,0,3,3,3 + db 0,0,0,0,0,0,0,0,0,0,0,2,3,3,3,1 + db 0,1,3,3,3,3,2,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,2,3,3,2,1,3,0,3,3,3,3 + db 2,1,0,1,2,3,3,2,1,0,0,0,0,0,0,3 + db 3,3,0,0,0,0,0,0,0,0,1,3,3,3,2,1 + db 0,0,1,2,3,3,1,0,0,0,0,0,0,0,0,0 + db 0,1,2,2,1,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,2,3,3,1,0,0,0,1,2,2,1,0 + db 0,0,0,0,0,0,0,1,2,3,2,1,0,0,0,0 + db 0,1,2,3,3,2,1,0,1,3,3,2,1,1,2,3 + db 2,3,3,2,3,0,0,0,3,3,2,3,2,1,1,2 + db 3,3,1,0,0,0,1,3,3,2,1,0,1,2,3,3 + db 0,0,1,3,3,2,1,1,2,3,2,3,3,0,0,0 + db 0,1,3,3,2,1,0,1,2,3,2,1,0,0,0,3 + db 3,3,0,0,0,0,0,0,0,1,2,3,3,3,3,3 + db 3,3,2,1,0,0,0,0,3,3,3,0,0,0,0,0 + db 3,3,3,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,3,3,3,0,0,0 + db 0,1,2,3,2,1,0,0,0,0,3,3,3,0,0,0 + db 0,0,3,3,3,1,0,0,0,3,3,3,1,0,0,0 + db 3,3,3,1,0,0,0,0,3,3,3,0,0,0,0,0 + db 3,3,3,0,0,0,1,3,3,2,1,0,1,2,3,3 + db 1,0,0,0,3,3,3,3,2,1,1,2,3,3,2,0 + db 0,0,2,3,3,2,1,1,2,3,3,3,3,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,3,3,3,2 + db 1,0,2,3,3,1,0,0,0,2,3,3,0,2,3,0 + db 0,0,1,3,3,2,1,1,2,3,2,3,3,0,0,0 + db 0,0,0,0,0,1,3,3,3,2,0,0,0,0,0,0 + db 0,0,0,0,0,1,2,3,3,2,0,0,0,0,1,3 + db 3,2,0,0,0,0,0,0,1,2,3,2,1,0,0,0 + db 1,2,3,2,1,0,0,0,0,0,0,0,1,3,3,3 + db 3,1,0,0,0,0,0,0,1,2,3,2,1,0,0,0 + db 0,1,2,3,0,0,1,3,3,2,1,0,0,1,2,3 + db 3,1,0,0,0,0,0,3,3,3,0,0,0,0,3,3 + db 3,3,3,3,3,3,3,3,3,3,0,1,3,3,2,1 + db 0,0,1,2,3,3,1,0,0,0,0,0,0,0,0,0 + db 0,3,3,3,0,0,0,0,1,3,3,2,1,0,1,2 + db 3,3,2,1,0,0,0,1,2,3,2,1,0,1,2,3 + db 3,1,0,0,0,0,0,3,3,3,0,0,0,0,0,0 + db 0,1,3,3,2,0,1,2,3,3,1,0,0,1,2,3 + db 2,1,0,1,2,3,3,2,1,0,0,3,3,3,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,3,3,3,3 + db 0,3,3,3,0,3,3,3,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,3,3,3,0,0,0,0,0,0,0,0 + db 0,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3 + db 3,3,3,3,0,0,0,0,0,3,3,3,3,3,3,3 + db 3,0,3,3,3,3,3,3,3,3,3,3,3,3,2,1 + db 0,0,0,0,0,1,2,3,3,3,3,3,3,2,1,0 + db 0,3,3,3,3,3,3,3,3,3,3,3,3,2,1,0 + db 0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3 + db 3,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0 + db 0,0,0,0,1,2,3,3,3,3,3,3,2,1,3,3 + db 0,0,0,3,3,3,3,3,3,3,0,0,0,3,3,3 + db 3,3,3,3,0,3,3,3,3,3,3,3,3,3,0,1 + db 2,3,3,3,3,3,2,1,0,0,0,0,0,3,3,3 + db 3,3,3,3,0,0,0,3,3,3,3,3,3,3,3,0 + db 3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3 + db 3,3,3,3,3,0,0,1,1,0,0,3,3,3,3,3 + db 3,3,0,3,3,3,3,3,3,0,0,0,0,0,0,0 + db 1,2,3,0,0,0,0,0,0,1,2,3,3,3,3,3 + db 3,2,1,0,0,0,0,3,3,3,3,3,3,3,0,0 + db 0,0,0,0,0,0,0,0,1,2,3,3,3,3,3,3 + db 2,1,0,0,0,0,3,3,3,3,3,3,3,0,0,0 + db 0,1,2,3,3,3,2,0,3,0,1,2,3,3,3,3 + db 3,2,1,0,0,0,0,0,3,3,3,3,3,3,3,3 + db 3,0,0,0,0,0,0,1,2,3,3,3,3,3,3,3 + db 2,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 1,2,2,0,0,0,0,0,1,1,0,0,0,0,0,0 + db 0,0,0,3,3,3,3,3,0,0,0,0,0,3,3,3 + db 3,3,3,0,0,1,2,3,3,3,3,2,1,2,3,3 + db 2,0,0,0,3,2,0,2,3,3,3,3,2,1,0,0 + db 0,0,0,1,2,3,3,3,3,3,2,1,0,0,0,1 + db 2,3,3,3,3,2,1,2,3,3,3,0,0,0,1,2 + db 3,3,3,3,3,2,1,0,0,3,3,3,3,3,3,3 + db 0,0,0,0,1,2,3,2,1,0,0,0,1,2,3,2 + db 1,0,3,3,3,3,3,3,3,0,0,0,3,3,3,3 + db 3,0,3,3,3,3,3,3,3,0,0,0,0,0,0,0 + db 3,3,3,0,3,3,3,3,3,3,3,0,0,3,3,3 + db 3,3,3,0,3,3,3,3,3,3,3,0,3,3,3,3 + db 3,3,3,0,0,3,3,3,3,0,0,0,3,3,3,3 + db 3,0,3,3,3,3,3,3,3,0,0,0,3,3,3,3 + db 3,0,0,1,2,3,3,3,3,3,2,1,0,0,0,0 + db 3,3,3,2,3,3,3,3,2,1,0,0,0,0,0,1 + db 2,3,3,3,3,2,3,3,3,0,0,0,3,3,3,3 + db 3,3,3,0,0,0,0,0,3,1,2,3,3,3,3,2 + db 1,0,0,0,0,1,2,3,3,3,2,0,0,0,0,1 + db 2,3,3,3,3,2,1,2,3,3,3,0,0,0,0,0 + db 0,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,1,2,2,0,0,0,0,0,0,2,2,1,0,0 + db 0,0,0,0,3,3,3,3,3,0,0,0,3,3,3,3 + db 3,3,0,0,0,0,0,0,0,2,3,3,2,0,0,0 + db 0,0,0,0,2,3,3,3,3,3,3,3,3,3,3,3 + db 0,0,0,1,2,3,3,3,3,3,3,2,1,0,0,0 + db 3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3 + db 3,3,3,3,3,3,0,0,1,2,3,3,3,3,3,3 + db 2,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3 + db 3,3,0,0,0,1,2,3,3,3,3,3,2,1,0,0 + db 0,0,0,0,1,2,3,3,3,3,3,2,1,0,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,0,1,2 + db 3,3,3,3,2,1,0,0,0,0,1,2,3,3,3,3 + db 3,2,1,0,0,0,0,3,3,3,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,0,0,3,3,0,3,3,3 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,3,3,3,0,0,0,0,0,0,0,0,0,3,3,3 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,1,2,3,3,0,1,2 + db 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 2,3,3,1,0,0,0,0,0,1,3,3,2,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,3,3,3,2,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,3,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,1,2,3,3,1,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,1,2,3,3,3,3,1,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,2,3,3,1 + db 0,0,0,0,0,1,3,3,2,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,2,3,2,0,0,1,3,3,2,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,3,3,3,2,1 + db 2,3,3,1,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,0 + db 0,0,0,3,3,3,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,1,2,3,2,1,0,0,0 + db 1,2,3,2,1,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3 + db 2,0,1,2,3,3,1,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,3,3,3,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,2,3,2,1,2,3,3,1,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,3,3,3,0,3,3,3 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,1,2,3,3,3,3,3,3,3,2,1 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,2,3,3,3,3 + db 2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3 + db 3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,3,3,3,3,3,3,3,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,2,3,3,3,2,1,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0 diff --git a/ENDSCRL/FONA.LBM b/ENDSCRL/FONA.LBM new file mode 100644 index 0000000..5934682 Binary files /dev/null and b/ENDSCRL/FONA.LBM differ diff --git a/ENDSCRL/FONA.UH b/ENDSCRL/FONA.UH new file mode 100644 index 0000000..ba22b5a Binary files /dev/null and b/ENDSCRL/FONA.UH differ diff --git a/ENDSCRL/LBM2U.EXE b/ENDSCRL/LBM2U.EXE new file mode 100644 index 0000000..e3613f6 Binary files /dev/null and b/ENDSCRL/LBM2U.EXE differ diff --git a/ENDSCRL/MAIN.C b/ENDSCRL/MAIN.C new file mode 100644 index 0000000..b250d2b --- /dev/null +++ b/ENDSCRL/MAIN.C @@ -0,0 +1,125 @@ +#include +#include +#include +#include "i:\u2\dis\dis.h" + +#define FONAY 30 + +extern void waitvr(void); +extern void setstart(int); +extern void setrgbpalette(int p, int r, int g, int b); + +extern char far font[31][1500]; +char *fonaorder="ABCDEFGHIJKLMNOPQRSTUVWXabcdefghijklmnopqrstuvwxyz0123456789!?,.:()+-*='"; +int fonap[256]; +int fonaw[256]; + +char tbuf[FONAY][640]; + +main() { + dis_partstart(); + dis_waitb(); + asm mov ax, 0eh + asm int 10h // 640x350 16c + asm mov ax, 9h + asm mov dx, 3d4h + asm out dx, ax + setrgbpalette(1,20,20,20); + setrgbpalette(2,40,40,40); + setrgbpalette(3,60,60,60); + setrgbpalette(4,60,60,60); + setrgbpalette(5,60,60,60); + setrgbpalette(6,60,60,60); + setrgbpalette(7,60,60,60); + setrgbpalette(8,60,60,60); + setrgbpalette(9,60,60,60); + setrgbpalette(10,60,60,60); + setrgbpalette(11,60,60,60); + setrgbpalette(12,60,60,60); + setrgbpalette(13,60,60,60); + setrgbpalette(14,60,60,60); + setrgbpalette(15,60,60,60); + + init(); + + while(!dis_exit()) + { + if(dis_waitb()==1) dis_waitb(); + do_scroll(); + } + } + +char far text[64000]="Testing Testing\0PIXEL SUCKS\0ABCDEFGHIJKLMNOPQRSTUVWXYZ\0abcdefghijklmnopqrsuvwxyz\0Testing Testing\0PIXEL SUCKS\0ABCDEFGHIJKLMNOPQRSTUVWXYZ\0abcdefghijklmnopqrsuvwxyz\0Testing Testing\0PIXEL SUCKS\0ABCDEFGHIJKLMNOPQRSTUVWXYZ\0abcdefghijklmnopqrsuvwxyz\0Testing Testing\0PIXEL SUCKS\0ABCDEFGHIJKLMNOPQRSTUVWXYZ\0abcdefghijklmnopqrsuvwxyz\0Testing Testing\0PIXEL SUCKS\0ABCDEFGHIJKLMNOPQRSTUVWXYZ\0abcdefghijklmnopqrsuvwxyz\0Testing Testing\0PIXEL SUCKS\0ABCDEFGHIJKLMNOPQRSTUVWXYZ\0abcdefghijklmnopqrsuvwxyz\0"; +char *tptr=text; +int tstart=0,chars=0; +int mtau[8]={128,64,32,16,8,4,2,1}; + +char textline[100]; +char scanbuf[4][80]; + +do_scroll() + { + static int yscrl=0; + static int line=0; + int a,b,c,x,y,m; + + if(line==0) + { + for(a=0,tstart=0,chars=0;*tptr!='\n';a++,chars++) + { + textline[a]=*tptr; + tstart+=fonaw[*tptr++]+2; + } + textline[a]=*tptr++; tstart=(639-tstart)/2; + } + memset(scanbuf,0,80*4); + + for(a=0,x=tstart;a +#include +#include +#include +#include + +extern char unpack_start,unpack_end; +extern char unpack_crc0,unpack_crc1; +extern char unpack_stack0,unpack_stack1; +extern char unpack_data,unpack_dataend,unpack_data2,unpack_code; +extern char unpack_crypt1; +extern char unpack_crypt2; +extern char unpack_crypt3; +extern char unpack_crypt4; +extern char unpack_crypt10; +extern char unpack_crypt11; +extern char unpack_crypt12; +extern char unpack_crypt13; +extern char unpack_crypt14; +extern char unpack_crypt15; +extern char unpack_crypt16; +extern char unpack_endcrypt; +int unpack_len,unpack_stacklen; + +int protect(FILE *fin,FILE *fout,int lastone); + +int lzexeoff=0; + +int exerand(void) +{ + int a; + a=rand(); + if(a<4096) return(0); + else if(a<8192) return(rand()&0xf); + else if(a<16384) return(rand()&0x7f); + else return(rand()); +} + +void error(int a) +{ + switch(a) + { + case 0 : printf("Done!\n"); break; + case 1 : printf("File not packed with LZEXE!\n"); + if(lzexeoff) return; + break; + case 2 : printf("File input/output error!\n"); break; + case 3 : printf("Internal error #1\n"); break; + case 4 : printf("Internal error #2\n"); break; + case 5 : printf("File open error!\n"); break; + default : printf("Unknown error!\n"); break; + } + exit(1); +} + +char storage[8192]; + +long mcrc=0; +int mcrcon=0; +int passes=2; + +main(int argc,char *argv[]) +{ + FILE *fin,*fout; + char str1[64],str2[64],str3[64]; + int a; + time_t tm; + + /* logotexts */ + printf("Future Protector IV Release 1.1 Copyright (C) 1991 Sami Tammilehto\n"); + if(argc==1) + { + printf("To use. Use. Illegal use prohibited. Legal switches allowed.\n"); + return(0); + } + for(a=1;a10) *(argv[a]+2+8)=0; + sscanf(argv[a]+2,"%lX",&mcrc); + case 'l' : + lzexeoff=1; + break; + } + + /* inits */ + unpack_len=&unpack_end-&unpack_start; + if(unpack_len>4000) error(4); + unpack_stacklen=&unpack_stack1-&unpack_stack0; + srand((unsigned)time(&tm)); + + memcpy(storage,&unpack_start,unpack_len); + + /* filenames/backup handling */ + if(strchr(argv[1],'.')) *strchr(argv[1],'.')=0; + strupr(argv[1]); + strcpy(str1,argv[1]); + strcat(str1,".OLD"); + strcpy(str2,argv[1]); + strcat(str2,".TMP"); + strcpy(str3,argv[1]); + strcat(str3,".EXE"); + if(passes==1) + { + strcpy(str2,str3); + } + { + FILE *f1; + printf("Opening %s\n",str3); + f1=fopen(str3,"rb"); + if(f1==NULL) error(5); + for(a=0;a<28;a++) fgetc(f1); + if(fgetc(f1)!='L') error(1); + else if(fgetc(f1)!='Z') error(1); + else if(fgetc(f1)!='9') error(1); + else if(fgetc(f1)!='1') error(1); + fclose(f1); + } + remove(str1); + rename(str3,str1); + remove(str2); + printf("Protecting %s (backup saved as %s).\n",str3,str1); + printf("Size increase %i bytes. ",2*(&unpack_end-&unpack_start)); + if(mcrc) + { + printf("Machine code %08lXh entered. ",mcrc); + } + printf("\n"); + /* protect */ + fin=fopen(str1,"rb"); + fout=fopen(str2,"wb"); + printf("%s->%s\n",str1,str2); + if(!fin || !fout) error(2); + a=protect(fin,fout,0); + if(a) error(a); + fclose(fin); + fclose(fout); + if(passes>1) + { + /* pass 2 */ + memcpy(&unpack_start,storage,unpack_len); + fin=fopen(str2,"rb"); + fout=fopen(str3,"wb"); + printf("%s->%s\n",str2,str3); + if(!fin || !fout) error(2); + a=protect(fin,fout,1/*final*/); + if(a) error(a); + fclose(fin); + fclose(fout); + remove(str2); /* remove tmp */ + } + /* return, 0 for no errors */ + return(a); +} + +int calccrc(char *start,char *end) +{ + unsigned char *p; + int len=end-start; + int crc=0,a; + p=(char *)start; + for(a=0;a>16L; + } + while(!ferror(fin) && !ferror(fout)) + { + cnt=fread(tmp,1,16384,fin); + if(cnt==0) break; + if(cnt<16384) + { + for(cnt;cnt&15;cnt++) + { + tmp[cnt]=(char)exerand(); + } + } + if(cnt&15) return(3); + amax=cnt/2; + for(a=0;a>4)-2; + + /* modify unpacker code */ + { + unsigned *p; + p=(unsigned *)&unpack_data; + /* set data1 (addresses) */ + p[0]=header[11]; /* cs */ + p[1]=header[10]; /* ip */ + p[2]=header[7]; /* ss */ + p[3]=header[8]; /* sp */ + p[4]=cs0para; /* cs0 */ + /* set data2 */ + p=(unsigned *)&unpack_data2; + p[0]=regkey; /* key */ + p[1]=mcrcon; /* MACHINE CRC? */ + p[2]=key1; /* key */ + p[3]=key2; /* key */ + /* randomize stack */ + for(a=0;a +#include +#include + +main(int argc,char *argv[]) +{ + FILE *f1; + extern int _osmajor; + extern int _osminor; + unsigned crc0,crc1; + time_t tl,ot; + int a; + double d; + if(argc!=2) + { + return(0); + } + if(memcmp(argv[1],"code",4)) + { + return(0); + } + if(_osmajor<3) + { + printf("DOS 3+ required."); + return(0); + } + /*if(*argv[0]!='A' && *argv[0]!='B') + { + printf("Run from the original disk, please."); + return(0); + }*/ + if(!strstr(argv[0],"EXE")) + { + printf("Run from the original disk, please.."); + return(0); + } + memcpy(strstr(argv[0],"EXE"),"DAT",3); + f1=fopen(argv[0],"at"); + if(f1==NULL) + { + printf("Run from the original disk, please..."); + return(0); + } + _asm + { + push si + push di + xor si,si + xor di,di + push ds + ers5: mov ax,0ff00h + ers6: mov ds,ax + mov bx,0 + mov cx,1024 + mcrc1: add si,ds:[bx] + ers1: add di,ds:[bx+2] + ers2: rol si,1 + ers3: add bx,4 + ers4: loop mcrc1 + pop ds + mov crc0,si + mov crc1,di + xor ax,ax + mov cs:[ers1],ax + mov cs:[ers2],ax + mov cs:[ers3],ax + mov cs:[ers4],ax + mov cs:[ers5],ax + mov cs:[ers6],ax + mov cs:[ers1+2],ax + mov cs:[ers2+2],ax + mov cs:[ers3+2],ax + mov cs:[ers4+2],ax + mov cs:[ers5+2],ax + mov cs:[ers6+2],ax + pop di + pop si + mov ah,08h + mov dl,128 + mov dh,0 + int 13h + cmp dh,0 + je jjj1 + add crc0,cx + add crc1,dx + jjj1: nop + } + time(&tl); + fprintf(f1,"%sDos version %i.%i",ctime(&tl),_osmajor,_osminor); + fprintf(f1,"\t["); + fprintf(f1,"%04X",crc1); + fprintf(f1,"%04X",crc0); + fprintf(f1,"%04X",(crc1^0xffff)); + fprintf(f1,"%04X",(crc0^0xffff)); + fprintf(f1,"]\n\n"); + fclose(f1); + printf("["); + printf("%04X",crc1); + printf("%04X",crc0); + printf("%04X",(crc1^0xffff)); + printf("%04X",(crc0^0xffff)); + printf("]"); + return(0); +} diff --git a/FCP/PRINT.DAT b/FCP/PRINT.DAT new file mode 100644 index 0000000..e6c2152 --- /dev/null +++ b/FCP/PRINT.DAT @@ -0,0 +1,72 @@ +Sun Jan 05 19:40:23 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Sun Jan 05 19:51:32 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Sun Jan 05 19:51:47 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Fri Jan 10 19:03:52 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Fri Jan 10 19:57:45 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Mon Jan 13 19:52:57 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Sun Jan 19 17:37:37 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Sun Jan 19 22:00:40 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Sun Jan 19 22:01:07 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Sun Jan 19 22:01:18 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Sun Jan 19 22:04:03 1992 +Dos version 5.0 [F65CE69909A31966] + +Mon Jan 20 17:38:49 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Tue Feb 04 17:38:20 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Tue Feb 04 17:38:43 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Fri Apr 24 16:52:33 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Fri Apr 24 16:52:34 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Fri Apr 24 16:52:36 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Fri Apr 24 16:53:07 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Fri Apr 24 16:54:04 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Sat May 02 22:46:04 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Sat May 02 22:46:12 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Thu Aug 13 17:46:58 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Wed Nov 04 00:50:37 1992 +Dos version 5.0 [432D5E0CBCD2A1F3] + +Sat Jan 30 22:22:53 1993 +Dos version 5.0 [432D5E0CBCD2A1F3] + diff --git a/FCP/PRINT.EXE b/FCP/PRINT.EXE new file mode 100644 index 0000000..7324b73 Binary files /dev/null and b/FCP/PRINT.EXE differ diff --git a/FCP/PROTTEST.EX0 b/FCP/PROTTEST.EX0 new file mode 100644 index 0000000..7249d49 Binary files /dev/null and b/FCP/PROTTEST.EX0 differ diff --git a/FCP/PROTTEST.EXE b/FCP/PROTTEST.EXE new file mode 100644 index 0000000..c73b3ec Binary files /dev/null and b/FCP/PROTTEST.EXE differ diff --git a/FCP/TEST.BAT b/FCP/TEST.BAT new file mode 100644 index 0000000..7100128 --- /dev/null +++ b/FCP/TEST.BAT @@ -0,0 +1,4 @@ +echo off +:alku +prottest +goto alku \ No newline at end of file diff --git a/FCP/TMP b/FCP/TMP new file mode 100644 index 0000000..df22b38 --- /dev/null +++ b/FCP/TMP @@ -0,0 +1 @@ +[432D5E0CBCD2A1F3] \ No newline at end of file diff --git a/FCP/UNPACK.ASM b/FCP/UNPACK.ASM new file mode 100644 index 0000000..c0d70c7 --- /dev/null +++ b/FCP/UNPACK.ASM @@ -0,0 +1,471 @@ +NOJUMPS + +calccrc MACRO start,end + local l1 + mov cx,OFFSET end-OFFSET start + mov si,OFFSET start +l1: add dl,cs:[si] + adc dh,0 + rol dx,1 + inc si + loop l1 + ENDM +uncryptxor MACRO beg,key + local l1 + mov bx,OFFSET beg + mov ax,key + mov cx,(OFFSET _unpack_endcrypt-OFFSET beg)/2 +l1: xor ds:[bx],ax + add bx,2 + dec cx + jnz l1 + ENDM +uncryptadd MACRO beg,key ;actually sub, uncrypts add-crypting + local l1 + mov bx,OFFSET beg + mov ax,key + mov cx,(OFFSET _unpack_endcrypt-OFFSET beg)/2 +l1: sub ds:[bx],ax + add bx,2 + dec cx + jnz l1 + ENDM + +unp_text SEGMENT para public 'CODE' + ASSUME cs:unp_text + PUBLIC _unpack_start,_unpack_end + PUBLIC _unpack_data,_unpack_dataend,_unpack_data2,_unpack_code + PUBLIC _unpack_stack0,_unpack_stack1 + PUBLIC _unpack_crc0,_unpack_crc1 + PUBLIC _unpack_crypt1 ;add 5f27h - INC + PUBLIC _unpack_crypt2 ;xor 4493h - INC + PUBLIC _unpack_crypt3 ;add 0073h - INC + PUBLIC _unpack_crypt4 ;xor 4536h - none + PUBLIC _unpack_crypt10 ;xor 0666h - none + PUBLIC _unpack_crypt11 ;add 0656h - DEC + PUBLIC _unpack_crypt12 ;xor 0466h - DEC + PUBLIC _unpack_crypt13 ;add 0663h - none + PUBLIC _unpack_crypt14 ;add DX - none + PUBLIC _unpack_crypt15 ;xor 5cach - none + PUBLIC _unpack_crypt16 ;add 3fach - INC + PUBLIC _unpack_endcrypt +_unpack_start LABEL BYTE + + db 'FCP/IV' ;Future Protector IV + +_unpack_code LABEL BYTE +startup PROC NEAR + mov sp,OFFSET _unpack_stack1 +io21data LABEL BYTE + ret +pntds2 LABEL WORd + jmp cs:[farjump+2] +startup ENDP +int_iret PROC FAR + iret +int_iret ENDP + +ALIGN 2 +_unpack_stack0 LABEL BYTE + dw 50 dup(5555h) +_unpack_stack1 LABEL BYTE + dw OFFSET step1 + dw 0 ;popped by step 1 => DS + dw OFFSET step2 + dw OFFSET step3 + dw OFFSEt step4 +stck1: dw OFFSET stepx1 ;the cracker blew it :-) + dw 0fff0h,0000h +disk0 dw 0 +disk1 dw 0 +vram dw 01234h +hboottxt db '.;*',13,0 +pntds dw 0 + +_unpack_crc0 LABEL BYTE + +.386P +step1 PROC NEAR + in al,21h + mov cs:io21data,al + mov al,255 + out 21h,al + cli + mov cs:pntds,ds + pop ds + cld + ;disk detect + mov ah,08h + mov dl,128 + mov dh,0 + int 13h + cmp dh,0 + je jjj1 + mov cs:disk0,cx + mov cs:disk1,dx +jjj1: ;video detect + mov ah,0fh + int 10h + cmp al,7 + je ismda + mov cs:vram,0800h+1234h +ismda: add cs:vram,0b000h-01234h + ;processor detect, at return: BP=0=real BP=1=protected mode + push sp ; 86/186 will push SP-2; + pop ax ; 286/386 will push SP. + cmp ax, sp + jz not86 ; If equal, SP was pushed + ;8086/80186 +noprot: mov bp,0 + ret +not86: smsw cx ; Protected? Machine status -> CX + ror cx,1 ; Protection bit -> carry flag + jnc noprot ; Real mode if no carry + mov bp,1 + ret +step1 ENDP +.8086 + +step3 PROC NEAR + ;DS=CS now (in step 2) + ;uncode crap + mov byte ptr cs:int1code,40h ;INC AX + int 3 ;clc set at step2's end + uncryptadd _unpack_crypt1,5f27h + ret +step3 ENDP + +ints PROC FAR ;SingleStep/DEBUG +int_01: stc +int_03: push bp + mov bp,sp + jnc int2 + push bx + mov bx,ss:[bp+2] ;ip + cmp byte ptr cs:[bx],49h ;inc cx + jne int1 +int1code: inc bx +int1: pop bx +int3: pop bp + iret +int2: xor ss:[bp+6],256 + mov bp,cs:stck1to + mov word ptr cs:[stck1],bp + jmp int3 +ints000: +ints ENDP + +_unpack_crc1 LABEL BYTE + +itable LABEL WORD +itablelen equ 4 + dw OFFSET int_iret,0f000h ;int 0 + dw OFFSET int_01,0f000h ;int 1 + dw OFFSET int_iret,0f000h ;int 2 + dw OFFSET int_03,0f000h ;int 3 +;Stack contents on ints: +; [bp+6]: flags +; [bp+4]: cs +; [bp+2]: ip +; [bp+0]: bp + +_startzeroing LABEL BYTE + +step2 PROC NEAR ;WARNING! ROUTINE OVERWRITTEN BY INNER STACK + mov cs:hboottxt[0],'b' + ;set interrupts + mov bx,'FG' + mov si,OFFSET itable + xor di,di + mov cx,itablelen + mov dx,'JM' + mov cs:hboottxt[1],'C' +st2a: segcs + lodsw + xchg ds:[di],ax + mov cs:[si-2],ax + mov ax,cs + xchg ds:[di+2],ax + mov cs:[si],ax + add si,2 + add di,4 + loop st2a + ;carry=0 for di won't rotate + mov di,dx ;='JM' + mov dx,OFFSET hboottxt + mov ax,cs + mov ds,ax + mov si,bx ;='FG' ;if this enabled, ICE will reboot + mov ax,0911h + ret +step2 ENDP + +stepx1 PROC NEAR + mov ax,0f000h + retf ;reboots +stepx1 ENDP + +_unpack_crypt1 LABEL BYTE + +step4 PROC NEAR + ;DS=CS + mov ax,cs:pntds + mov cs:pntds2,ax + uncryptxor _unpack_crypt2,4493h +_unpack_crypt2 LABEL BYTE + uncryptadd _unpack_crypt3,0073h +_unpack_crypt3 LABEL BYTE + jmp stp4o +stck1to dw OFFSET step5 +hboottxt2 db 'Bc*',13,0 +stp4o: sub ax,ax + mov si,'FG' + mov di,'JM' + mov ax,0911h + mov dx,OFFSET hboottxt2 + clc + int 3 + uncryptxor _unpack_crypt4,4536h + ret ;goes to step5 +step4 ENDP + +_unpack_crypt4 LABEL BYTE + +innerstack LABEL BYTE + dw OFFSET stepx1 + +step5 PROC NEAR + ;enter inner stack + mov sp,OFFSET innerstack + uncryptxor _unpack_crypt10,0666h +_unpack_crypt10 LABEL BYTE +i1c0: mov dx,0656h + sub ax,ax + mov es,ax + mov ax,es:[6] + mov bx,cs + cmp ax,bx + je i1c1 + mov word ptr cs:[i1c0+1],0CA3Fh + mov dx,3FC1H +i1c1: cmp word ptr es:[4],OFFSET int_01 + je i1c2 + mov word ptr cs:[i1c0+1],0CA3Fh + mov dx,3CF2H +i1c2: mov byte ptr cs:int1code,48h ;DEC AX + sub ax,ax + int 3 + uncryptadd _unpack_crypt11,dx +_unpack_crypt11 LABEL BYTE + uncryptxor _unpack_crypt12,0466h +_unpack_crypt12 LABEL BYTE + mov byte ptr cs:int1code,40h ;INC AX + sub ax,ax + int 3 + uncryptadd _unpack_crypt13,0663h +_unpack_crypt13 LABEL BYTE + ;calc checksum of exe start + xor dx,dx + mov byte ptr cs:int1code,43h ;INC BX + calccrc _unpack_crc0,_unpack_crc1 + uncryptadd _unpack_crypt14,0 ;dx +_unpack_crypt14 LABEL BYTE + uncryptxor _unpack_crypt15,5CACh +_unpack_crypt15 LABEL BYTE + mov byte ptr cs:int1code,40h ;INC AX + sub ax,ax + int 3 + uncryptadd _unpack_crypt16,3FACh +_unpack_crypt16 LABEL BYTE + mov word ptr cs:innerstack,OFFSET execute + sub ax,ax + int 3 + ret +step5 ENDP + +ALIGN 2 + +execute PROC NEAR + ;unpack data + mov dx,cs:pntds2 + add dx,10h + xor si,si + xor di,di + cmp cs:mcrcon,0 + je exec11 + ;calc machine crc + mov ax,0ff00h + mov ds,ax + mov bx,0 + mov cx,1024 +mcrc1: add si,ds:[bx] + add di,ds:[bx+2] + rol si,1 + add bx,4 + loop mcrc1 + add si,cs:disk0 + add di,cs:disk1 +exec11: add si,cs:regcs + add di,cs:regip + add si,cs:regsp + add di,cs:regss + add si,cs:regkey + add di,cs:regkey + mov cx,cs:regcs0 +exec1: mov ds,dx + sub ds:[0],si + sub ds:[2],di + xor si,5354h + xor di,1525h + sub ds:[4],si + sub ds:[6],di + add si,1234h + ror si,1 + add di,4321h + rol di,1 + sub ds:[8],si + sub ds:[10],di + xor si,5354h + xor di,1525h + sub ds:[12],si + sub ds:[14],di + add si,1234h + ror si,1 + add di,4321h + rol di,1 + inc dx + add si,ds:[0] + add di,ds:[8] + add si,ds:[2] + add di,ds:[10] + add si,ds:[4] + add di,ds:[12] + add si,ds:[6] + add di,ds:[14] + loop exec1 + mov bp,OFFSET errormsg1 + cmp si,cs:keychk0 + jne error + cmp di,cs:keychk1 + jne error + cld +_endzeroing LABEL BYTE ;may overflow a byte, but who cares + mov dx,cs:pntds2 + mov ax,cs + mov es,ax + mov cx,(OFFSET _endzeroing-OFFSET _startzeroing+1)/2 + mov di,OFFSET _startzeroing + mov ax,'..' + rep stosw + call resetints + mov al,cs:io21data + out 21h,al + mov ax,cs + mov es,ax + mov cx,OFFSET _startzeroing-OFFSET _unpack_code + mov di,OFFSET _unpack_code + mov al,'.' + rep stosb + ;load stack and cs:ip for the actual program and run it. + mov ds,dx + mov es,dx + mov bx,cs + mov cx,cs:regcs0 + mov ax,cs:regss + add ax,bx + sub ax,cx + mov ss,ax + mov sp,cs:regsp + add cs:regcs,bx + sub cs:regcs,cx + push cs:regcs + push cs:regip + mov cs:regcs,ax + mov cs:regip,ax + mov cs:regss,ax + mov cs:regcs0,ax + mov cs:keychk1,ax + mov cs:regkey,ax + sti + jmp endprg2 + +_endzeroing2 LABEL BYTE +error: ;destroy and exit with error at OFFSET BP + cld + mov dx,cs:pntds2 + mov ax,cs + mov es,ax + mov cx,(OFFSET _endzeroing2-OFFSET _startzeroing+1)/2 + mov di,OFFSET _startzeroing + mov ax,'..' + rep stosw + call resetints + mov al,cs:io21data + out 21h,al + mov ax,cs + mov es,ax + mov di,OFFSET _unpack_code + mov cx,OFFSET _startzeroing-OFFSET _unpack_code + mov al,'.' + rep stosb + mov cs:regcs,ax + mov cs:regip,ax + mov cs:regss,ax + mov cs:regcs0,ax + mov cs:keychk1,ax + mov cs:regkey,ax + mov sp,OFFSET _unpack_data + sti + jmp endprg1 +execute ENDP + +resetints PROC NEAR + ;reset interrupts + xor ax,ax + mov es,ax + mov si,OFFSET itable + xor di,di + mov cx,itablelen*2 +st20a: segcs + lodsw + stosw + loop st20a + ret +resetints ENDP + + ALIGN 2 +_unpack_data LABEL BYTE +farjump LABEL DWORD +regcs dw 0 +regip dw 0 +regss dw 0 +regsp dw 0 +regcs0 dw 0 +errormsg1 db 'File corrupted!$' +_unpack_data2 LABEL BYTE +regkey dw 0 +mcrcon dw 0 ;1=machine crc enabled +keychk0 dw 0 +keychk1 dw 0 +_unpack_dataend LABEL BYTE + + ALIGN 2 + +endprg1: ;**************** + mov dx,bp + mov ax,cs + mov ds,ax + mov ah,9h + int 21h + mov ax,4c03h + int 21h +endprg2: ;**************** + retf + + ALIGN 2 +_unpack_endcrypt LABEL BYTE + db 000h,0fch +_unpack_end LABEL BYTE +unp_text ENDS + END + \ No newline at end of file diff --git a/FCP/UNPACK.LST b/FCP/UNPACK.LST new file mode 100644 index 0000000..1716485 --- /dev/null +++ b/FCP/UNPACK.LST @@ -0,0 +1,739 @@ +Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 1 +unpack.ASM + + + + 1 NOJUMPS + 2 + 3 calccrc MACRO start,end + 4 local l1 + 5 mov cx,OFFSET end-OFFSET start + 6 mov si,OFFSET start + 7 l1: add dl,cs:[si] + 8 adc dh,0 + 9 rol dx,1 + 10 inc si + 11 loop l1 + 12 ENDM + 13 uncryptxor MACRO beg,key + 14 local l1 + 15 mov bx,OFFSET beg + 16 mov ax,key + 17 mov cx,(OFFSET _unpack_endcrypt-OFFSET beg)/2 + 18 l1: xor ds:[bx],ax + 19 add bx,2 + 20 dec cx + 21 jnz l1 + 22 ENDM + 23 uncryptadd MACRO beg,key ;actually sub, uncrypts add-crypting + 24 local l1 + 25 mov bx,OFFSET beg + 26 mov ax,key + 27 mov cx,(OFFSET _unpack_endcrypt-OFFSET beg)/2 + 28 l1: sub ds:[bx],ax + 29 add bx,2 + 30 dec cx + 31 jnz l1 + 32 ENDM + 33 + 34 0000 unp_text SEGMENT para public 'CODE' + 35 ASSUME cs:unp_text + 36 PUBLIC _unpack_start,_unpack_end + 37 PUBLIC _unpack_data,_unpack_dataend,_unpack_data2,_unpack_code + 38 PUBLIC _unpack_stack0,_unpack_stack1 + 39 PUBLIC _unpack_crc0,_unpack_crc1 + 40 PUBLIC _unpack_crypt1 ;add 5f27h - INC + 41 PUBLIC _unpack_crypt2 ;xor 4493h - INC + 42 PUBLIC _unpack_crypt3 ;add 0073h - INC + 43 PUBLIC _unpack_crypt4 ;xor 4536h - none + 44 PUBLIC _unpack_crypt10 ;xor 0666h - none + 45 PUBLIC _unpack_crypt11 ;add 0656h - DEC + 46 PUBLIC _unpack_crypt12 ;xor 0466h - DEC + 47 PUBLIC _unpack_crypt13 ;add 0663h - none + 48 PUBLIC _unpack_crypt14 ;add DX - none + 49 PUBLIC _unpack_crypt15 ;xor 5cach - none + 50 PUBLIC _unpack_crypt16 ;add 3fach - INC + 51 PUBLIC _unpack_endcrypt + 52 0000 _unpack_start LABEL BYTE + 53 + 54 0000 46 43 50 2F 49 56 db 'FCP/IV' ;Future Protector IV + 55 + 56 0006 _unpack_code LABEL BYTE + 57 0006 startup PROC NEAR + Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 2 +unpack.ASM + + + + 58 0006 BC 0074r mov sp,OFFSET _unpack_stack1 + 59 0009 io21data LABEL BYTE + 60 0009 C3 ret + 61 000A pntds2 LABEL WORd + 62 000A 2E: FF 2E 0468r jmp cs:[farjump+2] + 63 000F startup ENDP + 64 000F int_iret PROC FAR + 65 000F CF iret + 66 0010 int_iret ENDP + 67 + 68 ALIGN 2 + 69 0010 _unpack_stack0 LABEL BYTE + 70 0010 32*(5555) dw 50 dup(5555h) + 71 0074 _unpack_stack1 LABEL BYTE + 72 0074 0091r dw OFFSET step1 + 73 0076 0000 dw 0 ;popped by step 1 => DS + 74 0078 0139r dw OFFSET step2 + 75 007A 00EBr dw OFFSET step3 + 76 007C 017Er dw OFFSEt step4 + 77 007E 017Ar stck1: dw OFFSET stepx1 ;the cracker blew it :-) + 78 0080 FFF0 0000 dw 0fff0h,0000h + 79 0084 0000 disk0 dw 0 + 80 0086 0000 disk1 dw 0 + 81 0088 1234 vram dw 01234h + 82 008A 2E 3B 2A 0D 00 hboottxt db '.;*',13,0 + 83 008F 0000 pntds dw 0 + 84 + 85 0091 _unpack_crc0 LABEL BYTE + 86 + 87 .386P + 88 0091 step1 PROC NEAR + 89 0091 E4 21 in al,21h + 90 0093 2E: A2 0009r mov cs:io21data,al + 91 0097 B0 FF mov al,255 + 92 0099 E6 21 out 21h,al + 93 009B FA cli + 94 009C 2E: 8C 1E 008Fr mov cs:pntds,ds + 95 00A1 1F pop ds + 96 00A2 FC cld + 97 ;disk detect + 98 00A3 B4 08 mov ah,08h + 99 00A5 B2 80 mov dl,128 + 100 00A7 B6 00 mov dh,0 + 101 00A9 CD 13 int 13h + 102 00AB 80 FE 00 cmp dh,0 + 103 00AE 74 0C 90 90 je jjj1 + 104 00B2 2E: 89 0E 0084r mov cs:disk0,cx + 105 00B7 2E: 89 16 0086r mov cs:disk1,dx + 106 00BC jjj1: ;video detect + 107 00BC B4 0F mov ah,0fh + 108 00BE CD 10 int 10h + 109 00C0 3C 07 cmp al,7 + 110 00C2 74 09 90 90 je ismda + 111 00C6 2E: C7 06 0088r 1A34 mov cs:vram,0800h+1234h + 112 00CD 2E: 81 06 0088r 9DCC ismda: add cs:vram,0b000h-01234h + 113 ;processor detect, at return: BP=0=real BP=1=protected mode + 114 00D4 54 push sp ; 86/186 will push SP-2; + Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 3 +unpack.ASM + + + + 115 00D5 58 pop ax ; 286/386 will push SP. + 116 00D6 3B C4 cmp ax, sp + 117 00D8 74 06 90 90 jz not86 ; If equal, SP was pushed + 118 ;8086/80186 + 119 00DC BD 0000 noprot: mov bp,0 + 120 00DF C3 ret + 121 00E0 0F 01 E1 not86: smsw cx ; Protected? Machine status -> CX + 122 00E3 D1 C9 ror cx,1 ; Protection bit -> carry flag + 123 00E5 73 F5 jnc noprot ; Real mode if no carry + 124 00E7 BD 0001 mov bp,1 + 125 00EA C3 ret + 126 00EB step1 ENDP + 127 .8086 + 128 + 129 00EB step3 PROC NEAR + 130 ;DS=CS now (in step 2) + 131 ;uncode crap + 132 00EB 2E: C6 06 0114r 40 mov byte ptr cs:int1code,40h ;INC AX + 133 00F1 CC int 3 ;clc set at step2's end + 134 uncryptadd _unpack_crypt1,5f27h +1 135 00F2 BB 017Er mov bx,OFFSET _unpack_crypt1 +1 136 00F5 B8 5F27 mov ax,5f27h +1 137 00F8 B9 018D mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt1)/2 +1 138 00FB 29 07 ??0000: sub ds:[bx],ax +1 139 00FD 83 C3 02 add bx,2 +1 140 0100 49 dec cx +1 141 0101 75 F8 jnz ??0000 + 142 0103 C3 ret + 143 0104 step3 ENDP + 144 + 145 0104 ints PROC FAR ;SingleStep/DEBUG + 146 0104 F9 int_01: stc + 147 0105 55 int_03: push bp + 148 0106 8B EC mov bp,sp + 149 0108 73 0E jnc int2 + 150 010A 53 push bx + 151 010B 8B 5E 02 mov bx,ss:[bp+2] ;ip + 152 010E 2E: 80 3F 49 cmp byte ptr cs:[bx],49h ;inc cx + 153 0112 75 01 jne int1 + 154 0114 43 int1code: inc bx + 155 0115 5B int1: pop bx + 156 0116 5D int3: pop bp + 157 0117 CF iret + 158 0118 81 76 06 0100 int2: xor ss:[bp+6],256 + 159 011D 2E: 8B 2E 01ABr mov bp,cs:stck1to + 160 0122 2E: 89 2E 007Er mov word ptr cs:[stck1],bp + 161 0127 EB ED jmp int3 + 162 0129 ints000: + 163 0129 ints ENDP + 164 + 165 0129 _unpack_crc1 LABEL BYTE + 166 + 167 0129 itable LABEL WORD + 168 = 0004 itablelen equ 4 + 169 0129 000Fr F000 dw OFFSET int_iret,0f000h ;int 0 + 170 012D 0104r F000 dw OFFSET int_01,0f000h ;int 1 + 171 0131 000Fr F000 dw OFFSET int_iret,0f000h ;int 2 + Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 4 +unpack.ASM + + + + 172 0135 0105r F000 dw OFFSET int_03,0f000h ;int 3 + 173 ;Stack contents on ints: + 174 ; [bp+6]: flags + 175 ; [bp+4]: cs + 176 ; [bp+2]: ip + 177 ; [bp+0]: bp + 178 + 179 0139 _startzeroing LABEL BYTE + 180 + 181 0139 step2 PROC NEAR ;WARNING! ROUTINE OVERWRITTEN BY INNER STACK + 182 0139 2E: C6 06 008Ar 62 mov cs:hboottxt[0],'b' + 183 ;set interrupts + 184 013F BB 4647 mov bx,'FG' + 185 0142 BE 0129r mov si,OFFSET itable + 186 0145 33 FF xor di,di + 187 0147 B9 0004 mov cx,itablelen + 188 014A BA 4A4D mov dx,'JM' + 189 014D 2E: C6 06 008Br 43 mov cs:hboottxt[1],'C' + 190 0153 2E: st2a: segcs + 191 0154 AD lodsw + 192 0155 87 05 xchg ds:[di],ax + 193 0157 2E: 89 44 FE mov cs:[si-2],ax + 194 015B 8C C8 mov ax,cs + 195 015D 87 45 02 xchg ds:[di+2],ax + 196 0160 2E: 89 04 mov cs:[si],ax + 197 0163 83 C6 02 add si,2 + 198 0166 83 C7 04 add di,4 + 199 0169 E2 E8 loop st2a + 200 ;carry=0 for di won't rotate + 201 016B 8B FA mov di,dx ;='JM' + 202 016D BA 008Ar mov dx,OFFSET hboottxt + 203 0170 8C C8 mov ax,cs + 204 0172 8E D8 mov ds,ax + 205 0174 8B F3 mov si,bx ;='FG' ;if this enabled, ICE will reboot + 206 0176 B8 0911 mov ax,0911h + 207 0179 C3 ret + 208 017A step2 ENDP + 209 + 210 017A stepx1 PROC NEAR + 211 017A B8 F000 mov ax,0f000h + 212 017D CB retf ;reboots + 213 017E stepx1 ENDP + 214 + 215 017E _unpack_crypt1 LABEL BYTE + 216 + 217 017E step4 PROC NEAR + 218 ;DS=CS + 219 017E 2E: A1 008Fr mov ax,cs:pntds + 220 0182 2E: A3 000Ar mov cs:pntds2,ax + 221 uncryptxor _unpack_crypt2,4493h +1 222 0186 BB 0197r mov bx,OFFSET _unpack_crypt2 +1 223 0189 B8 4493 mov ax,4493h +1 224 018C B9 0180 mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt2)/2 +1 225 018F 31 07 ??0001: xor ds:[bx],ax +1 226 0191 83 C3 02 add bx,2 +1 227 0194 49 dec cx +1 228 0195 75 F8 jnz ??0001 + Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 5 +unpack.ASM + + + + 229 0197 _unpack_crypt2 LABEL BYTE + 230 uncryptadd _unpack_crypt3,0073h +1 231 0197 BB 01A8r mov bx,OFFSET _unpack_crypt3 +1 232 019A B8 0073 mov ax,0073h +1 233 019D B9 0178 mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt3)/2 +1 234 01A0 29 07 ??0002: sub ds:[bx],ax +1 235 01A2 83 C3 02 add bx,2 +1 236 01A5 49 dec cx +1 237 01A6 75 F8 jnz ??0002 + 238 01A8 _unpack_crypt3 LABEL BYTE + 239 01A8 EB 08 90 jmp stp4o + 240 01AB 01D6r stck1to dw OFFSET step5 + 241 01AD 42 63 2A 0D 00 hboottxt2 db 'Bc*',13,0 + 242 01B2 2B C0 stp4o: sub ax,ax + 243 01B4 BE 4647 mov si,'FG' + 244 01B7 BF 4A4D mov di,'JM' + 245 01BA B8 0911 mov ax,0911h + 246 01BD BA 01ADr mov dx,OFFSET hboottxt2 + 247 01C0 F8 clc + 248 01C1 CC int 3 + 249 uncryptxor _unpack_crypt4,4536h +1 250 01C2 BB 01D4r mov bx,OFFSET _unpack_crypt4 +1 251 01C5 B8 4536 mov ax,4536h +1 252 01C8 B9 0162 mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt4)/2 +1 253 01CB 31 07 ??0003: xor ds:[bx],ax +1 254 01CD 83 C3 02 add bx,2 +1 255 01D0 49 dec cx +1 256 01D1 75 F8 jnz ??0003 + 257 01D3 C3 ret ;goes to step5 + 258 01D4 step4 ENDP + 259 + 260 01D4 _unpack_crypt4 LABEL BYTE + 261 + 262 01D4 innerstack LABEL BYTE + 263 01D4 017Ar dw OFFSET stepx1 + 264 + 265 01D6 step5 PROC NEAR + 266 ;enter inner stack + 267 01D6 BC 01D4r mov sp,OFFSET innerstack + 268 uncryptxor _unpack_crypt10,0666h +1 269 01D9 BB 01EAr mov bx,OFFSET _unpack_crypt10 +1 270 01DC B8 0666 mov ax,0666h +1 271 01DF B9 0157 mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt10)/2 +1 272 01E2 31 07 ??0004: xor ds:[bx],ax +1 273 01E4 83 C3 02 add bx,2 +1 274 01E7 49 dec cx +1 275 01E8 75 F8 jnz ??0004 + 276 01EA _unpack_crypt10 LABEL BYTE + 277 01EA BA 0656 i1c0: mov dx,0656h + 278 01ED 2B C0 sub ax,ax + 279 01EF 8E C0 mov es,ax + 280 01F1 26: A1 0006 mov ax,es:[6] + 281 01F5 8C CB mov bx,cs + 282 01F7 3B C3 cmp ax,bx + 283 01F9 74 0A je i1c1 + 284 01FB 2E: C7 06 01EBr CA3F mov word ptr cs:[i1c0+1],0CA3Fh + 285 0202 BA 3FC1 mov dx,3FC1H + Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 6 +unpack.ASM + + + + 286 0205 26: 81 3E 0004 0104r i1c1: cmp word ptr es:[4],OFFSET int_01 + 287 020C 74 0A je i1c2 + 288 020E 2E: C7 06 01EBr CA3F mov word ptr cs:[i1c0+1],0CA3Fh + 289 0215 BA 3CF2 mov dx,3CF2H + 290 0218 2E: C6 06 0114r 48 i1c2: mov byte ptr cs:int1code,48h ;DEC AX + 291 021E 2B C0 sub ax,ax + 292 0220 CC int 3 + 293 uncryptadd _unpack_crypt11,dx +1 294 0221 BB 0231r mov bx,OFFSET _unpack_crypt11 +1 295 0224 8B C2 mov ax,dx +1 296 0226 B9 0133 mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt11)/2 +1 297 0229 29 07 ??0005: sub ds:[bx],ax +1 298 022B 83 C3 02 add bx,2 +1 299 022E 49 dec cx +1 300 022F 75 F8 jnz ??0005 + 301 0231 _unpack_crypt11 LABEL BYTE + 302 uncryptxor _unpack_crypt12,0466h +1 303 0231 BB 0242r mov bx,OFFSET _unpack_crypt12 +1 304 0234 B8 0466 mov ax,0466h +1 305 0237 B9 012B mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt12)/2 +1 306 023A 31 07 ??0006: xor ds:[bx],ax +1 307 023C 83 C3 02 add bx,2 +1 308 023F 49 dec cx +1 309 0240 75 F8 jnz ??0006 + 310 0242 _unpack_crypt12 LABEL BYTE + 311 0242 2E: C6 06 0114r 40 mov byte ptr cs:int1code,40h ;INC AX + 312 0248 2B C0 sub ax,ax + 313 024A CC int 3 + 314 uncryptadd _unpack_crypt13,0663h +1 315 024B BB 025Cr mov bx,OFFSET _unpack_crypt13 +1 316 024E B8 0663 mov ax,0663h +1 317 0251 B9 011E mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt13)/2 +1 318 0254 29 07 ??0007: sub ds:[bx],ax +1 319 0256 83 C3 02 add bx,2 +1 320 0259 49 dec cx +1 321 025A 75 F8 jnz ??0007 + 322 025C _unpack_crypt13 LABEL BYTE + 323 ;calc checksum of exe start + 324 025C 33 D2 xor dx,dx + 325 025E 2E: C6 06 0114r 43 mov byte ptr cs:int1code,43h ;INC BX + 326 calccrc _unpack_crc0,_unpack_crc1 +1 327 0264 B9 0098 mov cx,OFFSET _unpack_crc1-OFFSET _unpack_crc0 +1 328 0267 BE 0091r mov si,OFFSET _unpack_crc0 +1 329 026A 2E: 02 14 ??0008: add dl,cs:[si] +1 330 026D 80 D6 00 adc dh,0 +1 331 0270 D1 C2 rol dx,1 +1 332 0272 46 inc si +1 333 0273 E2 F5 loop ??0008 + 334 uncryptadd _unpack_crypt14,0 ;dx +1 335 0275 BB 0286r mov bx,OFFSET _unpack_crypt14 +1 336 0278 B8 0000 mov ax,0 +1 337 027B B9 0109 mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt14)/2 +1 338 027E 29 07 ??0009: sub ds:[bx],ax +1 339 0280 83 C3 02 add bx,2 +1 340 0283 49 dec cx +1 341 0284 75 F8 jnz ??0009 + 342 0286 _unpack_crypt14 LABEL BYTE + Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 7 +unpack.ASM + + + + 343 uncryptxor _unpack_crypt15,5CACh +1 344 0286 BB 0297r mov bx,OFFSET _unpack_crypt15 +1 345 0289 B8 5CAC mov ax,5CACh +1 346 028C B9 0100 mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt15)/2 +1 347 028F 31 07 ??000A: xor ds:[bx],ax +1 348 0291 83 C3 02 add bx,2 +1 349 0294 49 dec cx +1 350 0295 75 F8 jnz ??000A + 351 0297 _unpack_crypt15 LABEL BYTE + 352 0297 2E: C6 06 0114r 40 mov byte ptr cs:int1code,40h ;INC AX + 353 029D 2B C0 sub ax,ax + 354 029F CC int 3 + 355 uncryptadd _unpack_crypt16,3FACh +1 356 02A0 BB 02B1r mov bx,OFFSET _unpack_crypt16 +1 357 02A3 B8 3FAC mov ax,3FACh +1 358 02A6 B9 00F3 mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt16)/2 +1 359 02A9 29 07 ??000B: sub ds:[bx],ax +1 360 02AB 83 C3 02 add bx,2 +1 361 02AE 49 dec cx +1 362 02AF 75 F8 jnz ??000B + 363 02B1 _unpack_crypt16 LABEL BYTE + 364 02B1 2E: C7 06 01D4r + mov word ptr cs:innerstack,OFFSET execute + 365 02BCr + 366 02B8 2B C0 sub ax,ax + 367 02BA CC int 3 + 368 02BB C3 ret + 369 02BC step5 ENDP + 370 + 371 ALIGN 2 + 372 + 373 02BC execute PROC NEAR + 374 ;unpack data + 375 02BC 2E: 8B 16 000Ar mov dx,cs:pntds2 + 376 02C1 83 C2 10 add dx,10h + 377 02C4 33 F6 xor si,si + 378 02C6 33 FF xor di,di + 379 02C8 2E: 83 3E 0482r 00 cmp cs:mcrcon,0 + 380 02CE 74 21 je exec11 + 381 ;calc machine crc + 382 02D0 B8 FF00 mov ax,0ff00h + 383 02D3 8E D8 mov ds,ax + 384 02D5 BB 0000 mov bx,0 + 385 02D8 B9 0400 mov cx,1024 + 386 02DB 03 37 mcrc1: add si,ds:[bx] + 387 02DD 03 7F 02 add di,ds:[bx+2] + 388 02E0 D1 C6 rol si,1 + 389 02E2 83 C3 04 add bx,4 + 390 02E5 E2 F4 loop mcrc1 + 391 02E7 2E: 03 36 0084r add si,cs:disk0 + 392 02EC 2E: 03 3E 0086r add di,cs:disk1 + 393 02F1 2E: 03 36 0466r exec11: add si,cs:regcs + 394 02F6 2E: 03 3E 0468r add di,cs:regip + 395 02FB 2E: 03 36 046Cr add si,cs:regsp + 396 0300 2E: 03 3E 046Ar add di,cs:regss + 397 0305 2E: 03 36 0480r add si,cs:regkey + 398 030A 2E: 03 3E 0480r add di,cs:regkey + 399 030F 2E: 8B 0E 046Er mov cx,cs:regcs0 + Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 8 +unpack.ASM + + + + 400 0314 8E DA exec1: mov ds,dx + 401 0316 29 36 0000 sub ds:[0],si + 402 031A 29 3E 0002 sub ds:[2],di + 403 031E 81 F6 5354 xor si,5354h + 404 0322 81 F7 1525 xor di,1525h + 405 0326 29 36 0004 sub ds:[4],si + 406 032A 29 3E 0006 sub ds:[6],di + 407 032E 81 C6 1234 add si,1234h + 408 0332 D1 CE ror si,1 + 409 0334 81 C7 4321 add di,4321h + 410 0338 D1 C7 rol di,1 + 411 033A 29 36 0008 sub ds:[8],si + 412 033E 29 3E 000A sub ds:[10],di + 413 0342 81 F6 5354 xor si,5354h + 414 0346 81 F7 1525 xor di,1525h + 415 034A 29 36 000C sub ds:[12],si + 416 034E 29 3E 000E sub ds:[14],di + 417 0352 81 C6 1234 add si,1234h + 418 0356 D1 CE ror si,1 + 419 0358 81 C7 4321 add di,4321h + 420 035C D1 C7 rol di,1 + 421 035E 42 inc dx + 422 035F 03 36 0000 add si,ds:[0] + 423 0363 03 3E 0008 add di,ds:[8] + 424 0367 03 36 0002 add si,ds:[2] + 425 036B 03 3E 000A add di,ds:[10] + 426 036F 03 36 0004 add si,ds:[4] + 427 0373 03 3E 000C add di,ds:[12] + 428 0377 03 36 0006 add si,ds:[6] + 429 037B 03 3E 000E add di,ds:[14] + 430 037F E2 93 loop exec1 + 431 0381 BD 0470r mov bp,OFFSET errormsg1 + 432 0384 2E: 3B 36 0484r cmp si,cs:keychk0 + 433 0389 75 7D jne error + 434 038B 2E: 3B 3E 0486r cmp di,cs:keychk1 + 435 0390 75 76 jne error + 436 0392 FC cld + 437 0393 _endzeroing LABEL BYTE ;may overflow a byte, but who cares + 438 0393 2E: 8B 16 000Ar mov dx,cs:pntds2 + 439 0398 8C C8 mov ax,cs + 440 039A 8E C0 mov es,ax + 441 039C B9 012D mov cx,(OFFSET _endzeroing-OFFSET _startzeroing+1)/2 + 442 039F BF 0139r mov di,OFFSET _startzeroing + 443 03A2 B8 2E2E mov ax,'..' + 444 03A5 F3> AB rep stosw + 445 03A7 E8 00A9 call resetints + 446 03AA 2E: A0 0009r mov al,cs:io21data + 447 03AE E6 21 out 21h,al + 448 03B0 8C C8 mov ax,cs + 449 03B2 8E C0 mov es,ax + 450 03B4 B9 0133 mov cx,OFFSET _startzeroing-OFFSET _unpack_code + 451 03B7 BF 0006r mov di,OFFSET _unpack_code + 452 03BA B0 2E mov al,'.' + 453 03BC F3> AA rep stosb + 454 ;load stack and cs:ip for the actual program and run it. + 455 03BE 8E DA mov ds,dx + 456 03C0 8E C2 mov es,dx + Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 9 +unpack.ASM + + + + 457 03C2 8C CB mov bx,cs + 458 03C4 2E: 8B 0E 046Er mov cx,cs:regcs0 + 459 03C9 2E: A1 046Ar mov ax,cs:regss + 460 03CD 03 C3 add ax,bx + 461 03CF 2B C1 sub ax,cx + 462 03D1 8E D0 mov ss,ax + 463 03D3 2E: 8B 26 046Cr mov sp,cs:regsp + 464 03D8 2E: 01 1E 0466r add cs:regcs,bx + 465 03DD 2E: 29 0E 0466r sub cs:regcs,cx + 466 03E2 2E: FF 36 0466r push cs:regcs + 467 03E7 2E: FF 36 0468r push cs:regip + 468 03EC 2E: A3 0466r mov cs:regcs,ax + 469 03F0 2E: A3 0468r mov cs:regip,ax + 470 03F4 2E: A3 046Ar mov cs:regss,ax + 471 03F8 2E: A3 046Er mov cs:regcs0,ax + 472 03FC 2E: A3 0486r mov cs:keychk1,ax + 473 0400 2E: A3 0480r mov cs:regkey,ax + 474 0404 FB sti + 475 0405 E9 008F jmp endprg2 + 476 + 477 0408 _endzeroing2 LABEL BYTE + 478 0408 error: ;destroy and exit with error at OFFSET BP + 479 0408 FC cld + 480 0409 2E: 8B 16 000Ar mov dx,cs:pntds2 + 481 040E 8C C8 mov ax,cs + 482 0410 8E C0 mov es,ax + 483 0412 B9 0168 mov cx,(OFFSET _endzeroing2-OFFSET _startzeroing+1)/2 + 484 0415 BF 0139r mov di,OFFSET _startzeroing + 485 0418 B8 2E2E mov ax,'..' + 486 041B F3> AB rep stosw + 487 041D E8 0033 call resetints + 488 0420 2E: A0 0009r mov al,cs:io21data + 489 0424 E6 21 out 21h,al + 490 0426 8C C8 mov ax,cs + 491 0428 8E C0 mov es,ax + 492 042A BF 0006r mov di,OFFSET _unpack_code + 493 042D B9 0133 mov cx,OFFSET _startzeroing-OFFSET _unpack_code + 494 0430 B0 2E mov al,'.' + 495 0432 F3> AA rep stosb + 496 0434 2E: A3 0466r mov cs:regcs,ax + 497 0438 2E: A3 0468r mov cs:regip,ax + 498 043C 2E: A3 046Ar mov cs:regss,ax + 499 0440 2E: A3 046Er mov cs:regcs0,ax + 500 0444 2E: A3 0486r mov cs:keychk1,ax + 501 0448 2E: A3 0480r mov cs:regkey,ax + 502 044C BC 0466r mov sp,OFFSET _unpack_data + 503 044F FB sti + 504 0450 EB 36 90 jmp endprg1 + 505 0453 execute ENDP + 506 + 507 0453 resetints PROC NEAR + 508 ;reset interrupts + 509 0453 33 C0 xor ax,ax + 510 0455 8E C0 mov es,ax + 511 0457 BE 0129r mov si,OFFSET itable + 512 045A 33 FF xor di,di + 513 045C B9 0008 mov cx,itablelen*2 + Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 10 +unpack.ASM + + + + 514 045F 2E: st20a: segcs + 515 0460 AD lodsw + 516 0461 AB stosw + 517 0462 E2 FB loop st20a + 518 0464 C3 ret + 519 0465 resetints ENDP + 520 + 521 0465 90 ALIGN 2 + 522 0466 _unpack_data LABEL BYTE + 523 0466 farjump LABEL DWORD + 524 0466 0000 regcs dw 0 + 525 0468 0000 regip dw 0 + 526 046A 0000 regss dw 0 + 527 046C 0000 regsp dw 0 + 528 046E 0000 regcs0 dw 0 + 529 0470 46 69 6C 65 20 63 6F+ errormsg1 db 'File corrupted!$' + 530 72 72 75 70 74 65 64+ + 531 21 24 + 532 0480 _unpack_data2 LABEL BYTE + 533 0480 0000 regkey dw 0 + 534 0482 0000 mcrcon dw 0 ;1=machine crc enabled + 535 0484 0000 keychk0 dw 0 + 536 0486 0000 keychk1 dw 0 + 537 0488 _unpack_dataend LABEL BYTE + 538 + 539 ALIGN 2 + 540 + 541 0488 endprg1: ;**************** + 542 0488 8B D5 mov dx,bp + 543 048A 8C C8 mov ax,cs + 544 048C 8E D8 mov ds,ax + 545 048E B4 09 mov ah,9h + 546 0490 CD 21 int 21h + 547 0492 B8 4C03 mov ax,4c03h + 548 0495 CD 21 int 21h + 549 0497 endprg2: ;**************** + 550 0497 CB retf + 551 + 552 ALIGN 2 + 553 0498 _unpack_endcrypt LABEL BYTE + 554 0498 00 FC db 000h,0fch + 555 049A _unpack_end LABEL BYTE + 556 049A unp_text ENDS + 557 END + Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 11 +Symbol Table + + + + +Symbol Name Type Value + +??0000 Near UNP_TEXT:00FB +??0001 Near UNP_TEXT:018F +??0002 Near UNP_TEXT:01A0 +??0003 Near UNP_TEXT:01CB +??0004 Near UNP_TEXT:01E2 +??0005 Near UNP_TEXT:0229 +??0006 Near UNP_TEXT:023A +??0007 Near UNP_TEXT:0254 +??0008 Near UNP_TEXT:026A +??0009 Near UNP_TEXT:027E +??000A Near UNP_TEXT:028F +??000B Near UNP_TEXT:02A9 +??DATE Text "05/06/93" +??FILENAME Text "unpack " +??TIME Text "20:32:49" +??VERSION Number 0205 +@CPU Text 0101H +@CURSEG Text UNP_TEXT +@FILENAME Text UNPACK +@WORDSIZE Text 2 +DISK0 Word UNP_TEXT:0084 +DISK1 Word UNP_TEXT:0086 +ENDPRG1 Near UNP_TEXT:0488 +ENDPRG2 Near UNP_TEXT:0497 +ERROR Near UNP_TEXT:0408 +ERRORMSG1 Byte UNP_TEXT:0470 +EXEC1 Near UNP_TEXT:0314 +EXEC11 Near UNP_TEXT:02F1 +EXECUTE Near UNP_TEXT:02BC +FARJUMP Dword UNP_TEXT:0466 +HBOOTTXT Byte UNP_TEXT:008A +HBOOTTXT2 Byte UNP_TEXT:01AD +I1C0 Near UNP_TEXT:01EA +I1C1 Near UNP_TEXT:0205 +I1C2 Near UNP_TEXT:0218 +INNERSTACK Byte UNP_TEXT:01D4 +INT1 Near UNP_TEXT:0115 +INT1CODE Near UNP_TEXT:0114 +INT2 Near UNP_TEXT:0118 +INT3 Near UNP_TEXT:0116 +INTS Far UNP_TEXT:0104 +INTS000 Near UNP_TEXT:0129 +INT_01 Near UNP_TEXT:0104 +INT_03 Near UNP_TEXT:0105 +INT_IRET Far UNP_TEXT:000F +IO21DATA Byte UNP_TEXT:0009 +ISMDA Near UNP_TEXT:00CD +ITABLE Word UNP_TEXT:0129 +ITABLELEN Number 0004 +JJJ1 Near UNP_TEXT:00BC +KEYCHK0 Word UNP_TEXT:0484 +KEYCHK1 Word UNP_TEXT:0486 +MCRC1 Near UNP_TEXT:02DB +MCRCON Word UNP_TEXT:0482 + Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 12 +Symbol Table + + + +NOPROT Near UNP_TEXT:00DC +NOT86 Near UNP_TEXT:00E0 +PNTDS Word UNP_TEXT:008F +PNTDS2 Word UNP_TEXT:000A +REGCS Word UNP_TEXT:0466 +REGCS0 Word UNP_TEXT:046E +REGIP Word UNP_TEXT:0468 +REGKEY Word UNP_TEXT:0480 +REGSP Word UNP_TEXT:046C +REGSS Word UNP_TEXT:046A +RESETINTS Near UNP_TEXT:0453 +ST20A Near UNP_TEXT:045F +ST2A Near UNP_TEXT:0153 +STARTUP Near UNP_TEXT:0006 +STCK1 Near UNP_TEXT:007E +STCK1TO Word UNP_TEXT:01AB +STEP1 Near UNP_TEXT:0091 +STEP2 Near UNP_TEXT:0139 +STEP3 Near UNP_TEXT:00EB +STEP4 Near UNP_TEXT:017E +STEP5 Near UNP_TEXT:01D6 +STEPX1 Near UNP_TEXT:017A +STP4O Near UNP_TEXT:01B2 +VRAM Word UNP_TEXT:0088 +_ENDZEROING Byte UNP_TEXT:0393 +_ENDZEROING2 Byte UNP_TEXT:0408 +_STARTZEROING Byte UNP_TEXT:0139 +_UNPACK_CODE Byte UNP_TEXT:0006 +_UNPACK_CRC0 Byte UNP_TEXT:0091 +_UNPACK_CRC1 Byte UNP_TEXT:0129 +_UNPACK_CRYPT1 Byte UNP_TEXT:017E +_UNPACK_CRYPT10 Byte UNP_TEXT:01EA +_UNPACK_CRYPT11 Byte UNP_TEXT:0231 +_UNPACK_CRYPT12 Byte UNP_TEXT:0242 +_UNPACK_CRYPT13 Byte UNP_TEXT:025C +_UNPACK_CRYPT14 Byte UNP_TEXT:0286 +_UNPACK_CRYPT15 Byte UNP_TEXT:0297 +_UNPACK_CRYPT16 Byte UNP_TEXT:02B1 +_UNPACK_CRYPT2 Byte UNP_TEXT:0197 +_UNPACK_CRYPT3 Byte UNP_TEXT:01A8 +_UNPACK_CRYPT4 Byte UNP_TEXT:01D4 +_UNPACK_DATA Byte UNP_TEXT:0466 +_UNPACK_DATA2 Byte UNP_TEXT:0480 +_UNPACK_DATAEND Byte UNP_TEXT:0488 +_UNPACK_END Byte UNP_TEXT:049A +_UNPACK_ENDCRYPT Byte UNP_TEXT:0498 +_UNPACK_STACK0 Byte UNP_TEXT:0010 +_UNPACK_STACK1 Byte UNP_TEXT:0074 +_UNPACK_START Byte UNP_TEXT:0000 + +Macro Name + +CALCCRC +UNCRYPTADD +UNCRYPTXOR + Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 13 +Symbol Table + + + + +Groups & Segments Bit Size Align Combine Class + +UNP_TEXT 16 049A Para Public CODE + \ No newline at end of file diff --git a/FCP/UNPACK.OBJ b/FCP/UNPACK.OBJ new file mode 100644 index 0000000..f05da05 Binary files /dev/null and b/FCP/UNPACK.OBJ differ diff --git a/FCP/ZIP.BAT b/FCP/ZIP.BAT new file mode 100644 index 0000000..7123312 --- /dev/null +++ b/FCP/ZIP.BAT @@ -0,0 +1 @@ +pkzip %1 *.c *.asm fcp \ No newline at end of file diff --git a/FOREST/AOS1.PAS b/FOREST/AOS1.PAS new file mode 100644 index 0000000..f30f4c4 --- /dev/null +++ b/FOREST/AOS1.PAS @@ -0,0 +1,7 @@ +unit aos1; +{$L pos1.obj} +interface +procedure posi1;far; +implementation +procedure posi1;external; +end. diff --git a/FOREST/AOS1.TPU b/FOREST/AOS1.TPU new file mode 100644 index 0000000..e46aa15 Binary files /dev/null and b/FOREST/AOS1.TPU differ diff --git a/FOREST/AOS2.PAS b/FOREST/AOS2.PAS new file mode 100644 index 0000000..4ffdaa5 --- /dev/null +++ b/FOREST/AOS2.PAS @@ -0,0 +1,7 @@ +unit aos2; +{$L pos2.obj} +interface +procedure posi2;far; +implementation +procedure posi2;external; +end. diff --git a/FOREST/AOS2.TPU b/FOREST/AOS2.TPU new file mode 100644 index 0000000..cd48077 Binary files /dev/null and b/FOREST/AOS2.TPU differ diff --git a/FOREST/AOS3.PAS b/FOREST/AOS3.PAS new file mode 100644 index 0000000..057deeb --- /dev/null +++ b/FOREST/AOS3.PAS @@ -0,0 +1,7 @@ +unit aos3; +{$L pos3.obj} +interface +procedure posi3;far; +implementation +procedure posi3;external; +end. diff --git a/FOREST/AOS3.TPU b/FOREST/AOS3.TPU new file mode 100644 index 0000000..cd53f6b Binary files /dev/null and b/FOREST/AOS3.TPU differ diff --git a/FOREST/BACK1.LBM b/FOREST/BACK1.LBM new file mode 100644 index 0000000..7b630ec Binary files /dev/null and b/FOREST/BACK1.LBM differ diff --git a/FOREST/BGR.PAS b/FOREST/BGR.PAS new file mode 100644 index 0000000..ad504d7 --- /dev/null +++ b/FOREST/BGR.PAS @@ -0,0 +1,7 @@ +unit bgr; +{$L hillback.obj} +interface +procedure hback;far; +implementation +procedure hback;external; +end. diff --git a/FOREST/BGR.TPU b/FOREST/BGR.TPU new file mode 100644 index 0000000..fa31aed Binary files /dev/null and b/FOREST/BGR.TPU differ diff --git a/FOREST/BP.DSK b/FOREST/BP.DSK new file mode 100644 index 0000000..3618b49 Binary files /dev/null and b/FOREST/BP.DSK differ diff --git a/FOREST/BP.TP b/FOREST/BP.TP new file mode 100644 index 0000000..7158a82 Binary files /dev/null and b/FOREST/BP.TP differ diff --git a/FOREST/DP b/FOREST/DP new file mode 100644 index 0000000..0556903 --- /dev/null +++ b/FOREST/DP @@ -0,0 +1,4 @@ + + Volume in drive H is DOS_UTILS Serial number is 1AA1:BA79 + 0 bytes in 0 file(s) + 51,433,472 bytes free diff --git a/FOREST/DP2 b/FOREST/DP2 new file mode 100644 index 0000000..4c8c1c3 --- /dev/null +++ b/FOREST/DP2 @@ -0,0 +1,4 @@ + + Volume in drive H is DOS_UTILS Serial number is 1AA1:BA79 + 0 bytes in 0 file(s) + 51,435,520 bytes free diff --git a/FOREST/DP_PREFS b/FOREST/DP_PREFS new file mode 100644 index 0000000..8c4b8a6 Binary files /dev/null and b/FOREST/DP_PREFS differ diff --git a/FOREST/FINAL.LBM b/FOREST/FINAL.LBM new file mode 100644 index 0000000..d642125 Binary files /dev/null and b/FOREST/FINAL.LBM differ diff --git a/FOREST/FINAL2.LBM b/FOREST/FINAL2.LBM new file mode 100644 index 0000000..20eb13a Binary files /dev/null and b/FOREST/FINAL2.LBM differ diff --git a/FOREST/FONA.LBM b/FOREST/FONA.LBM new file mode 100644 index 0000000..93a16d6 Binary files /dev/null and b/FOREST/FONA.LBM differ diff --git a/FOREST/FONA2.LBM b/FOREST/FONA2.LBM new file mode 100644 index 0000000..7bfcd3b Binary files /dev/null and b/FOREST/FONA2.LBM differ diff --git a/FOREST/GREEN.CLX b/FOREST/GREEN.CLX new file mode 100644 index 0000000..3ec89cb Binary files /dev/null and b/FOREST/GREEN.CLX differ diff --git a/FOREST/HILLBACK.CLX b/FOREST/HILLBACK.CLX new file mode 100644 index 0000000..f9d82c5 Binary files /dev/null and b/FOREST/HILLBACK.CLX differ diff --git a/FOREST/HILLBACK.GIF b/FOREST/HILLBACK.GIF new file mode 100644 index 0000000..87ff929 Binary files /dev/null and b/FOREST/HILLBACK.GIF differ diff --git a/FOREST/HILLBACK.LBM b/FOREST/HILLBACK.LBM new file mode 100644 index 0000000..5c04894 Binary files /dev/null and b/FOREST/HILLBACK.LBM differ diff --git a/FOREST/HILLBACK.OBJ b/FOREST/HILLBACK.OBJ new file mode 100644 index 0000000..c3ef3fe Binary files /dev/null and b/FOREST/HILLBACK.OBJ differ diff --git a/FOREST/KOE.GIF b/FOREST/KOE.GIF new file mode 100644 index 0000000..3cb59cc Binary files /dev/null and b/FOREST/KOE.GIF differ diff --git a/FOREST/KOE.LBM b/FOREST/KOE.LBM new file mode 100644 index 0000000..2e31987 Binary files /dev/null and b/FOREST/KOE.LBM differ diff --git a/FOREST/KOE.PAS b/FOREST/KOE.PAS new file mode 100644 index 0000000..07112b8 --- /dev/null +++ b/FOREST/KOE.PAS @@ -0,0 +1,46 @@ +uses crt; +var f : file; + buf : array[0..30000] of byte; + font : array[0..237*31] of byte; + x : word; +begin + asm + mov ax,$13 + int $10 + end; + + assign(f,'pos1.dat'); + reset(f,1); + blockread(f,buf,filesize(f)); + close(f); + + fillchar(font,sizeof(font),#0); + for x := 0 to 30 do font[x*237+20] := 15; + for x := 0 to 30 do font[x*237+21] := 15; + + asm + mov ax,$a000 + mov es,ax + mov si,offset buf + + mov bx,offset font + + mov dx,237*31 +@a: lodsw + or ax,ax + je @no + mov cx,ax +@b: lodsw + mov di,ax + mov al,byte ptr ds:[bx] + mov byte ptr es:[di],al + loop @b +@no: + inc bx + dec dx + jnz @a + end; + + + repeat until keypressed; +end. \ No newline at end of file diff --git a/FOREST/LOGO.LBM b/FOREST/LOGO.LBM new file mode 100644 index 0000000..dd39cb1 Binary files /dev/null and b/FOREST/LOGO.LBM differ diff --git a/FOREST/MAKEOB.BAT b/FOREST/MAKEOB.BAT new file mode 100644 index 0000000..8fc078c --- /dev/null +++ b/FOREST/MAKEOB.BAT @@ -0,0 +1 @@ +binobj hillback.clx hillback hback diff --git a/FOREST/O.SCI b/FOREST/O.SCI new file mode 100644 index 0000000..db7c251 Binary files /dev/null and b/FOREST/O.SCI differ diff --git a/FOREST/O2.SCI b/FOREST/O2.SCI new file mode 100644 index 0000000..2477843 Binary files /dev/null and b/FOREST/O2.SCI differ diff --git a/FOREST/POS1.DAT b/FOREST/POS1.DAT new file mode 100644 index 0000000..d8f7550 Binary files /dev/null and b/FOREST/POS1.DAT differ diff --git a/FOREST/POS1.OBJ b/FOREST/POS1.OBJ new file mode 100644 index 0000000..6c27924 Binary files /dev/null and b/FOREST/POS1.OBJ differ diff --git a/FOREST/POS1.TPU b/FOREST/POS1.TPU new file mode 100644 index 0000000..f1c8a40 Binary files /dev/null and b/FOREST/POS1.TPU differ diff --git a/FOREST/POS2.DAT b/FOREST/POS2.DAT new file mode 100644 index 0000000..30acc48 Binary files /dev/null and b/FOREST/POS2.DAT differ diff --git a/FOREST/POS2.OBJ b/FOREST/POS2.OBJ new file mode 100644 index 0000000..6115751 Binary files /dev/null and b/FOREST/POS2.OBJ differ diff --git a/FOREST/POS2.TPU b/FOREST/POS2.TPU new file mode 100644 index 0000000..26ab8a6 Binary files /dev/null and b/FOREST/POS2.TPU differ diff --git a/FOREST/POS3.DAT b/FOREST/POS3.DAT new file mode 100644 index 0000000..d18ba6a Binary files /dev/null and b/FOREST/POS3.DAT differ diff --git a/FOREST/POS3.OBJ b/FOREST/POS3.OBJ new file mode 100644 index 0000000..d673752 Binary files /dev/null and b/FOREST/POS3.OBJ differ diff --git a/FOREST/POS3.TPU b/FOREST/POS3.TPU new file mode 100644 index 0000000..e68a2d6 Binary files /dev/null and b/FOREST/POS3.TPU differ diff --git a/FOREST/READ.PAS b/FOREST/READ.PAS new file mode 100644 index 0000000..6572cd2 --- /dev/null +++ b/FOREST/READ.PAS @@ -0,0 +1,218 @@ +uses crt,aos1,aos2,aos3,bgr; + +const veke = 2800; + +procedure setrgb(c,r,g,b:byte); +begin + port[$3c8] := c; + port[$3c9] := r; + port[$3c9] := g; + port[$3c9] := b; +end; + +var frames : word; + w : word; + + +procedure waitr; +begin + asm + mov bx,1 + int 0fch + mov frames,ax + end; +end; + + +function dis_exit:boolean; +var a : byte; +begin + asm + mov bx,2 + int 0fch + mov a,al + end; + if a = 0 then dis_exit := false else dis_exit := true; +end; + +var f : file; + inx : word; + y,x,t : word; + pal : array[0..768] of byte; + font : array[0..320*31] of byte; + fpal,tmppal : array[0..768] of byte; + scp,sss:word; + +{$L routines.obj} + { dx = Bground seg, + ax = pos seg, + si = pos ofs, + cx = font seg, + bx = font ofs } + +procedure putrouts;far;external; + +procedure scr(pos:byte); +begin + case pos of + + 0:asm + mov dx,seg hback + mov ax,seg posi1 + mov si,offset posi1 + mov cx,seg font + mov bx,offset font + add bx,scp + call putrouts + end; + 1:asm + mov dx,seg hback + mov ax,seg posi2 + mov si,offset posi2 + mov cx,seg font + mov bx,offset font + add bx,scp + call putrouts + end; + 2:asm + mov dx,seg hback + mov ax,seg posi3 + mov si,offset posi3 + mov cx,seg font + mov bx,offset font + add bx,scp + call putrouts + inc scp + end; + end; +end; + + +var frame : word; + quit : word; + ch : char; + perse : boolean; + fadeout : boolean; + fp : byte; +begin + asm + mov ax,$13 + int $10 + + xor bx,bx + int 0fch + + end; + + assign(f,'o.sci'); + reset(f,1); + for x := 0 to 30 do + begin + seek(f,x*320+778); + blockread(f,font[x*237],237); + end; + close(f); + + for x := 0 to sizeof(font) do if font[x] > 0 then inc(font[x],128); + move(mem[seg(hback):ofs(hback)+10],pal,768); + move(mem[seg(hback):ofs(hback)+778], mem[seg(hback):ofs(hback)], 64000); + for x := 0 to 255 do setrgb(x,0,0,0); + move(mem[seg(hback):ofs(hback)],mem[$a000:0],64000); + + move(pal,tmppal,768); + fillchar(tmppal,32*3,#0); + fillchar(tmppal[128*3],32*3,#0); + fillchar(fpal,768,#0); + + w := 1; { Wait raster routine } + + for y := 0 to 63 do + begin + waitr; + for x := 0 to 255 do setrgb(x,fpal[x*3+0],fpal[x*3+1],fpal[x*3+2]); + for x := 0 to 255 do + begin + if fpal[x*3+0] < tmppal[x*3+0] then inc(fpal[x*3+0]); + if fpal[x*3+1] < tmppal[x*3+1] then inc(fpal[x*3+1]); + if fpal[x*3+2] < tmppal[x*3+2] then inc(fpal[x*3+2]); + end; + end; + + move(pal,tmppal,768); + move(pal,fpal,768); + fillchar(fpal,32*3,#0); + fillchar(fpal[128*3],32*3,#0); + for x := 0 to 255 do setrgb(x,fpal[x*3+0],fpal[x*3+1],fpal[x*3+2]); + + asm +@a: mov ax,0 + mov bx,6 + int 0fch + cmp dx,0 + jl @a + end; + + for y := 0 to 150 do waitr; + + sss := 0; + scp := 0; + + for y := 0 to 63*2 do + begin + waitr; + scr(sss); + if sss = 2 then sss := 0 else inc(sss); + + if y and 1 = 1 then + begin + for x := 0 to 176 do setrgb(x,fpal[x*3+0],fpal[x*3+1],fpal[x*3+2]); + for x := 0 to 176 do + begin + if fpal[x*3+0] < tmppal[x*3+0] then inc(fpal[x*3+0]); + if fpal[x*3+1] < tmppal[x*3+1] then inc(fpal[x*3+1]); + if fpal[x*3+2] < tmppal[x*3+2] then inc(fpal[x*3+2]); + end; + end; + end; + + fillchar(tmppal,768,#0); + + + { Loppu looppi } + + frame := 0; + w := 0; + ch := #0; + quit := 0; + repeat + waitr; + scr(sss); + if sss = 2 then sss := 0 else inc(sss); + +{ inc(frame);} + + asm + mov ax,0 + mov bx,6 + int 0fch + cmp dx,-11 + jnz @a + mov fadeout,1 +@a: end; + + + + if fadeout then + begin + if fp = 64 then quit := 1 else inc(fp); + for x := 0 to 255 do + begin + setrgb(x,fpal[x*3+0],fpal[x*3+1],fpal[x*3+2]); + if fpal[x*3+0] > tmppal[x*3+0] then dec(fpal[x*3+0]); + if fpal[x*3+1] > tmppal[x*3+1] then dec(fpal[x*3+1]); + if fpal[x*3+2] > tmppal[x*3+2] then dec(fpal[x*3+2]); + end; + end; + + until dis_exit or (frame = veke) or (quit = 1); +end. \ No newline at end of file diff --git a/FOREST/READ2.PAS b/FOREST/READ2.PAS new file mode 100644 index 0000000..40fb48e --- /dev/null +++ b/FOREST/READ2.PAS @@ -0,0 +1,225 @@ +uses crt,aos1,aos2,aos3,bgr; + +const veke = 2800; + +procedure setrgb(c,r,g,b:byte); +begin + port[$3c8] := c; + port[$3c9] := r; + port[$3c9] := g; + port[$3c9] := b; +end; + +var frames : word; + w : word; + + +procedure waitr; +begin + asm + mov bx,1 + int 0fch + mov frames,ax + end; +end; + + +function dis_exit:boolean; +var a : byte; +begin + asm + mov bx,2 + int 0fch + mov a,al + end; + if a = 0 then dis_exit := false else dis_exit := true; +end; + +var f : file; + inx : word; + y,x,t : word; + pal : array[0..768] of byte; + fbuf : array[0..640*31] of byte; + font : array[0..237*31] of byte; + fpal,tmppal : array[0..768] of byte; + scp,sss:word; + +{$L routines.obj} + { dx = Bground seg, + ax = pos seg, + si = pos ofs, + cx = font seg, + bx = font ofs } + +procedure putrouts;far;external; + +procedure scr(pos:byte); +var ff : word; +begin + case pos of + + 0:asm + mov dx,seg hback + mov ax,seg posi1 + mov si,offset posi1 + mov cx,seg font + mov bx,offset font + call putrouts + end; + 1:asm + mov dx,seg hback + mov ax,seg posi2 + mov si,offset posi2 + mov cx,seg font + mov bx,offset font + call putrouts + end; + 2:begin + asm + mov dx,seg hback + mov ax,seg posi3 + mov si,offset posi3 + mov cx,seg font + mov bx,offset font + call putrouts + end; + move(font[1],font[0],237*31); + for ff := 0 to 30 do font[ff*237+236] := fbuf[ff*640+scp]; + if scp < 639 then inc(scp); + end; + end; +end; + + +var frame : word; + quit : word; + ch : char; + perse : boolean; + fadeout : boolean; + fp : byte; +begin + asm + mov ax,$13 + int $10 + + xor bx,bx + int 0fch + + end; + + assign(f,'o2.sci'); + reset(f,1); + for x := 0 to 30 do + begin + seek(f,x*640+778); + blockread(f,fbuf[x*640],640); + end; + close(f); + + for x := 0 to sizeof(fbuf) do if fbuf[x] > 0 then inc(fbuf[x],128); + move(mem[seg(hback):ofs(hback)+10],pal,768); + move(mem[seg(hback):ofs(hback)+778], mem[seg(hback):ofs(hback)], 64000); + for x := 0 to 255 do setrgb(x,0,0,0); + move(mem[seg(hback):ofs(hback)],mem[$a000:0],64000); + + move(pal,tmppal,768); + fillchar(tmppal,32*3,#0); + fillchar(tmppal[128*3],32*3,#0); + fillchar(fpal,768,#0); + + w := 1; { Wait raster routine } + + for y := 0 to 63 do + begin + waitr; + for x := 0 to 255 do setrgb(x,fpal[x*3+0],fpal[x*3+1],fpal[x*3+2]); + for x := 0 to 255 do + begin + if fpal[x*3+0] < tmppal[x*3+0] then inc(fpal[x*3+0]); + if fpal[x*3+1] < tmppal[x*3+1] then inc(fpal[x*3+1]); + if fpal[x*3+2] < tmppal[x*3+2] then inc(fpal[x*3+2]); + end; + end; + + move(pal,tmppal,768); + move(pal,fpal,768); + fillchar(fpal,32*3,#0); + fillchar(fpal[128*3],32*3,#0); + for x := 0 to 255 do setrgb(x,fpal[x*3+0],fpal[x*3+1],fpal[x*3+2]); + + for x := 0 to 30 do move(fbuf[x*640],font[x*237+104],133); + scp := 133; + + asm +@a: mov ax,0 + mov bx,6 + int 0fch + cmp dx,0 + jl @a + end; + +{ for y := 0 to 150 do waitr;} + + sss := 0; + + for y := 0 to 63*2 do + begin + waitr; + + if y and 1 = 1 then + begin + for x := 0 to 176 do setrgb(x,fpal[x*3+0],fpal[x*3+1],fpal[x*3+2]); + for x := 0 to 176 do + begin + if fpal[x*3+0] < tmppal[x*3+0] then inc(fpal[x*3+0]); + if fpal[x*3+1] < tmppal[x*3+1] then inc(fpal[x*3+1]); + if fpal[x*3+2] < tmppal[x*3+2] then inc(fpal[x*3+2]); + end; + end; + + scr(sss); + if sss = 2 then sss := 0 else inc(sss); + end; + + fillchar(tmppal,768,#0); + + + { Loppu looppi } + + frame := 0; + w := 0; + ch := #0; + quit := 0; + repeat + waitr; + + asm + mov ax,0 + mov bx,6 + int 0fch + cmp dx,-11 + jnz @a + mov fadeout,1 +@a: end; + + if fadeout then + begin + if fp = 64 then quit := 1 else inc(fp); + for x := 0 to 255 do + begin + setrgb(x,fpal[x*3+0],fpal[x*3+1],fpal[x*3+2]); + if fpal[x*3+0] > tmppal[x*3+0] then dec(fpal[x*3+0]); + if fpal[x*3+1] > tmppal[x*3+1] then dec(fpal[x*3+1]); + if fpal[x*3+2] > tmppal[x*3+2] then dec(fpal[x*3+2]); + end; + end; + + + scr(sss); + if sss = 2 then sss := 0 else inc(sss); + +{ inc(frame);} + + + until dis_exit or (frame = veke) or (quit = 1); +end. \ No newline at end of file diff --git a/FOREST/READMASK.PAS b/FOREST/READMASK.PAS new file mode 100644 index 0000000..6ba5a0e --- /dev/null +++ b/FOREST/READMASK.PAS @@ -0,0 +1,193 @@ +uses crt; + +type pbuf = ^buf; + buf = array[0..64000] of byte; + + +var r,r1, + g,b : pbuf; + f : file; + x,y,c : word; + row : array[0..320*3-1] of byte; + tc : word; + tbuf : array[0..100] of word; + pal : array[0..768] of byte; + +procedure setrgb(c,r,g,b:byte); +begin + port[$3c8] := c; + port[$3c9] := r; + port[$3c9] := g; + port[$3c9] := b; +end; + +begin + getmem(r,64000); + getmem(r1,64000); + getmem(g,64000); + getmem(b,64000); + fillchar(r^,64000,#0); + fillchar(r1^,64000,#0); + fillchar(g^,64000,#0); + fillchar(b^,64000,#0); + + { Load fixed green mask } + assign(f,'green.clx'); + reset(f,1); + seek(f,778); + blockread(f,g^,64000); + close(f); + + asm + mov ax,$13 + int $10 + end; +{ + assign(f,'hillback.clx'); + reset(f,1); + seek(f,10); + blockread(f,pal,768); + for x := 0 to 255 do setrgb(x,pal[x*3+0],pal[x*3+1],pal[x*3+2]); + blockread(f,mem[$a000:0],64000); + close(f); +} + + assign(f,'o:mask1.mtv'); + reset(f,1); + seek(f,8); + for y := 0 to 199 do + begin + blockread(f,row,320*3); + for x := 0 to 319 do + begin + r^[x+y*320] := row[x*3+0]; + b^[x+y*320] := row[x*3+2]; + end; + end; + close(f); + assign(f,'o:mask2.mtv'); + reset(f,1); + seek(f,8); + for y := 0 to 199 do + begin + blockread(f,row,320*3); + for x := 0 to 319 do r1^[x+y*320] := row[x*3+0]; + end; + close(f); + assign(f,'pos1.dat'); + rewrite(f,1); + { red = 4 to 240 } + for y := 1 to 31 do + for c := 4 to 240 do + begin + tc := 0; + for x := 0 to 64000 do + if (mem[$a000:x] <> 40) and (r^[x] <> r1^[x]) and (r^[x] = c) and (g^[x] = y) and (b^[x] = 255) then + begin + tbuf[tc] := x; + mem[$a000:x] := 40; + inc(tc); + end; + blockwrite(f,tc,2); + if tc > 0 then blockwrite(f,tbuf,tc*2); + end; + close(f); + + + assign(f,'o:mask2.mtv'); + reset(f,1); + seek(f,8); + for y := 0 to 199 do + begin + blockread(f,row,320*3); + for x := 0 to 319 do + begin + r^[x+y*320] := row[x*3+0]; + b^[x+y*320] := row[x*3+2]; + end; + end; + close(f); + assign(f,'o:mask3.mtv'); + reset(f,1); + seek(f,8); + for y := 0 to 199 do + begin + blockread(f,row,320*3); + for x := 0 to 319 do r1^[x+y*320] := row[x*3+0]; + end; + close(f); + assign(f,'pos2.dat'); + rewrite(f,1); + { red = 4 to 240 } + for y := 1 to 31 do + for c := 4 to 240 do + begin + tc := 0; + for x := 0 to 64000 do + if (mem[$a000:x] <> 40) and (r^[x] <> r1^[x]) and (r^[x] = c) and (g^[x] = y) and (b^[x] = 255) then + begin + tbuf[tc] := x; + mem[$a000:x] := 40; + inc(tc); + end; + blockwrite(f,tc,2); + if tc > 0 then blockwrite(f,tbuf,tc*2); + end; + close(f); + + + assign(f,'o:mask3.mtv'); + reset(f,1); + seek(f,8); + for y := 0 to 199 do + begin + blockread(f,row,320*3); + for x := 0 to 319 do + begin + r^[x+y*320] := row[x*3+0]; + b^[x+y*320] := row[x*3+2]; + end; + end; + close(f); + assign(f,'o:mask4.mtv'); + reset(f,1); + seek(f,8); + for y := 0 to 199 do + begin + blockread(f,row,320*3); + for x := 0 to 319 do r1^[x+y*320] := row[x*3+0]; + end; + close(f); + assign(f,'pos3.dat'); + rewrite(f,1); + { red = 4 to 240 } + for y := 1 to 31 do + for c := 4 to 240 do + begin + tc := 0; + for x := 0 to 64000 do + if (mem[$a000:x] <> 40) and (r^[x] <> r1^[x]) and (r^[x] = c) and (g^[x] = y) and (b^[x] = 255) then + begin + tbuf[tc] := x; + mem[$a000:x] := 40; + inc(tc); + end; + blockwrite(f,tc,2); + if tc > 0 then blockwrite(f,tbuf,tc*2); + end; + close(f); + + + + repeat until keypressed; + + asm + mov ax,$3 + int $10 + end; + + freemem(r,64000); + freemem(r1,64000); + freemem(g,64000); + freemem(b,64000); +end. \ No newline at end of file diff --git a/FOREST/READMSK2.PAS b/FOREST/READMSK2.PAS new file mode 100644 index 0000000..c2754d7 --- /dev/null +++ b/FOREST/READMSK2.PAS @@ -0,0 +1,138 @@ +uses crt; + +type pbuf = ^buf; + buf = array[0..64000] of byte; + + +var r,r1,nb,g,b : pbuf; + f : file; + x,y,c : word; + row : array[0..320*3-1] of byte; + tw : word; + tb : word; + tbuf : array[0..100] of word; + pal : array[0..768] of byte; + +procedure setrgb(c,r,g,b:byte); +begin + port[$3c8] := c; + port[$3c9] := r; + port[$3c9] := g; + port[$3c9] := b; +end; + +procedure tee(n1,n2,n3:string); +begin + assign(f,n1); + reset(f,1); + seek(f,8); + for y := 0 to 199 do + begin + blockread(f,row,320*3); + for x := 0 to 319 do + begin + r^[x+y*320] := row[x*3+0]; + b^[x+y*320] := row[x*3+2]; + end; + end; + close(f); + assign(f,n2); + reset(f,1); + seek(f,8); + for y := 0 to 199 do + begin + blockread(f,row,320*3); + for x := 0 to 319 do r1^[x+y*320] := row[x*3+0]; + end; + close(f); + assign(f,n3); + rewrite(f,1); + for y := 1 to 31 do + for c := 4 to 240 do + begin + tw := 0; + for x := 0 to 64000 do + if (nb^[x] <> $40) and + (r^[x] <> r1^[x]) and + (r^[x] = c) and + (r^[x+1] = c) and + (g^[x] = y) and + (b^[x] = 255) then + begin + tbuf[tw] := x; + nb^[x] := $40; + nb^[x+1] := $40; + memw[$a000:x] := $4040; + inc(tw); + end; + blockwrite(f,tw,2); + if tw > 0 then blockwrite(f,tbuf,tw*2); + + tb := 0; + for x := 0 to 64000 do + if (nb^[x] <> $40) and + (r^[x] <> r1^[x]) and + (r^[x] = c) and + (g^[x] = y) and + (b^[x] = 255) then + begin + tbuf[tb] := x; + nb^[x] := $40; + mem[$a000:x] := $40; + inc(tb); + end; + blockwrite(f,tb,2); + if tb > 0 then blockwrite(f,tbuf,tb*2); + end; + close(f); +end; + +begin + getmem(r,64000); + getmem(r1,64000); + getmem(g,64000); + getmem(b,64000); + getmem(nb,64000); + fillchar(r^,64000,#0); + fillchar(r1^,64000,#0); + fillchar(g^,64000,#0); + fillchar(b^,64000,#0); + fillchar(nb^,64000,#0); + + { Load fixed green mask } + assign(f,'green.clx'); + reset(f,1); + seek(f,778); + blockread(f,g^,64000); + close(f); + + asm + mov ax,$13 + int $10 + end; +{ + assign(f,'hillback.clx'); + reset(f,1); + seek(f,10); + blockread(f,pal,768); + for x := 0 to 255 do setrgb(x,pal[x*3+0],pal[x*3+1],pal[x*3+2]); + blockread(f,mem[$a000:0],64000); + close(f); +} + tee('o:mask1.mtv','o:mask2.mtv','pos1.dat'); + tee('o:mask2.mtv','o:mask3.mtv','pos2.dat'); + tee('o:mask3.mtv','o:mask4.mtv','pos3.dat'); + + asm + mov ax,$3 + int $10 + end; + + writeln('Homma on valmis !!!!!!!!!!!!!!!'); + + freemem(r,64000); + freemem(r1,64000); + freemem(g,64000); + freemem(b,64000); + freemem(nb,64000); +end. \ No newline at end of file diff --git a/FOREST/ROUTINES.ASM b/FOREST/ROUTINES.ASM new file mode 100644 index 0000000..07c3cda --- /dev/null +++ b/FOREST/ROUTINES.ASM @@ -0,0 +1,40 @@ + .MODEL large,PASCAL + .CODE + .386 + + ; dx = Bground seg + ; ax = pos seg + ; si = pos ofs + ; cx = font seg + ; bx = font ofs + +Putrouts PROC FAR + PUBLIC Putrouts + + push ds + mov ds,ax + mov ax,0a000h + mov es,ax + mov fs,cx + mov gs,dx + + mov dx,237*31 +@a: lodsw ; get byte count + or ax,ax ; if 0 then hidden pixel + je @ei ; next pixel + mov cx,ax ; set loop value +@c: lodsw ; get destination address + mov di,ax + mov al,byte ptr gs:[di] ; get bground pixel + add al,byte ptr fs:[bx] ; add font value to pixel + mov byte ptr es:[di],al ; store pixel to screen + loop @c +@ei: + inc bx + dec dx + jnz @a + pop ds + + ret +Putrouts ENDP + END diff --git a/FOREST/ROUTINES.OBJ b/FOREST/ROUTINES.OBJ new file mode 100644 index 0000000..760bf90 Binary files /dev/null and b/FOREST/ROUTINES.OBJ differ diff --git a/FOREST/X.BAT b/FOREST/X.BAT new file mode 100644 index 0000000..55cf7d8 --- /dev/null +++ b/FOREST/X.BAT @@ -0,0 +1,2 @@ +copy read2.exe ..\main\data\mntscrl.exe +copy o2.sci ..\main\data \ No newline at end of file diff --git a/GLENZ/ADATA.ASM b/GLENZ/ADATA.ASM new file mode 100644 index 0000000..4c4a30f --- /dev/null +++ b/GLENZ/ADATA.ASM @@ -0,0 +1,59 @@ + +PUBLIC newdata1 +data_new1 SEGMENT para public 'FARDATA' +newdata1 db 0fff0h dup(0) +data_new1 ENDS + +PUBLIC background,_background +data_new2 SEGMENT para public 'FARDATA' +_background LABEL BYTE +background db 0fff0h dup(0) +data_new2 ENDS + +data_v SEGMENT para public 'DATA' + +PUBLIC rows +rows dw 512 dup(0) + +PUBLIC wminx,wminy,wmaxx,wmaxy +wminx dw 0 +wminy dw 0 +wmaxx dw 100 +wmaxy dw 100 + +PUBLIC video,vram,rowsadd,framerate10,truevram,truerowsadd +video dd 16 dup(0) ;far offsets to vid routines +vram dw 0 +rowsadd dw 0 +framerate10 dw 0 +truevram dw 0 +truerowsadd dw 0 + +ALIGN 4 +PUBLIC projxmul,projymul,projxadd,projyadd,projminz,projminzshr +projxmul dd 0 +projymul dd 0 +projxadd dw 0 +projyadd dw 0 +projminz dd 0 +projminzshr dw 0 + +PUBLIC color,color1,color2 +color LABEL WORD +color1 db 0 +color2 db 0 + +ALIGN 4 +PUBLIC xadd,yadd,zadd +xadd dd 0 +yadd dd 0 +zadd dd 0 + +ALIGN 16 ;TEMPORARY WORK AREA FOR: +PUBLIC borders +borders LABEL WORD ;polygon drawing + db 8192 dup(0) +workoverflow dw 00fch + +data_v ENDS + END diff --git a/GLENZ/ADATA.INC b/GLENZ/ADATA.INC new file mode 100644 index 0000000..77ea0ea --- /dev/null +++ b/GLENZ/ADATA.INC @@ -0,0 +1,30 @@ +extrn newdata1:word +;extrn newdata2:word + +extrn background:word +extrn projxmul:dword +extrn projymul:dword +extrn projxadd:word +extrn projyadd:word +extrn projminz:dword +extrn projminzshr:word +extrn wminx:word +extrn wminy:word +extrn wmaxx:word +extrn wmaxy:word +extrn vram:word +extrn rowsadd:word +extrn truerowsadd:word +extrn truevram:word +extrn rows:word +extrn framerate10:word +extrn color:word +extrn color1:byte +extrn color2:byte +extrn video:dword +extrn borders:word + +extrn xadd:dword +extrn yadd:dword +extrn zadd:dword + diff --git a/GLENZ/ADATA.OBJ b/GLENZ/ADATA.OBJ new file mode 100644 index 0000000..f397121 Binary files /dev/null and b/GLENZ/ADATA.OBJ differ diff --git a/GLENZ/AOBJ.INC b/GLENZ/AOBJ.INC new file mode 100644 index 0000000..8fb39b1 --- /dev/null +++ b/GLENZ/AOBJ.INC @@ -0,0 +1,5 @@ +vobj struc + xyz dd 3 dup(0) + matrix dw 9 dup(0) + element dd 0 +vobj ends diff --git a/GLENZ/ASM.A b/GLENZ/ASM.A new file mode 100644 index 0000000..843e6b3 --- /dev/null +++ b/GLENZ/ASM.A @@ -0,0 +1,545 @@ +;FIND "386opt" TO FIND OPTIMIZABLE PLACES NOTED +include clink.inc + +extrn _everyframe:far +extrn _fromasmdraw:far +extrn _toasmdraw:far + +;---------------------------------------------------------------- +data_seg SEGMENT para public 'DATA' + +public sintable16 +public costable16 +public tantable32 +include calcsin.inc + +public _splinecoef +_splinecoef LABEL WORD +include spline.inc + +ALIGN 16 ;temporary working area, used by: +;- polyn() for scanline min/mix storage +public workarea +public borders +workarea LABEL WORD +borders LABEL WORD ;should be enough for 680 normal hlines in group + db 8192 dup(0) +workareaoverflow dw 012fch + +data_seg ENDS +;---------------------------------------------------------------- + +extrn _worldroot +asm_objs SEGMENT para public 'DATA' +;contents in obj.asm +asm_objs ENDS + +asm_text SEGMENT para public 'CODE' + ASSUME cs:asm_text + ASSUME gs:data_seg ;when data used, generally in gs +.386 + +;**************************************************************** +;PUBLICS +;**************************************************************** +PUBLIC _asminit,_asmdeinit,_asm,_asmclear +PUBLIC _testinit +PUBLIC _setborder + +PUBLIC _borders +PUBLIC _autofly + +PUBLIC _horizon + +;**************************************************************** +;GLOBAL VARIABLES +;**************************************************************** + +MAXY equ 159 +MAXX equ 319 + +;vector window coordinates (for clipping) +public _vecwindow +_vecwindow label word +WMINX dw 4 +WMINY dw 4 +WMAXX dw 315 +WMAXY dw 155 + +videot LABEL WORD + dw OFFSET v320x200x256 + dw OFFSET v320x240x256 + dw OFFSET v320x350x256 + dw OFFSET v320x350x256unr + dw OFFSET vtseng640x400x256 + dw OFFSET valien ;5 + +video LABEL WORD +vvinit = cs:video[0] + dw 0 ;init screen +vvswitch = cs:video[2] + dw 0 ;switch pages +vvclear = cs:video[4] + dw 0 ;clear + ;all following gfx routines require: + ;es=vram; OUT 3C4,2 +vvpset = cs:video[6] + dw 0 ;pset (DX,BX),CS:COLOR - plot a plot. Saves DS:SI/CX +vvlineto = cs:video[8] + dw 0 ;lineto - (CX,AX)->(DX,BX),CS:COLOR - draw a line - OPTIMIZE ME!-) +vvhline = cs:video[10] + dw 0 ;hline - (AX,BX)->(DX,BX),CS:COLOR - draw a horizontal line +vvhlinegroup = cs:video[12] + dw 0 ;hlinegroup - GS:SI->list of hlines: + ;word:start row + ;REPT + ;word:X1 (-32767=end of list) + ;word:X2 + ;ENDM +vvthlinegroup = cs:video[14] + dw 0 ;thlinegroup - GS:SI->list of hline, FS=texture segment + ;word:start row + ;REPT + ;word:X1 (-32767=end of list) + ;word:X2 + ;word:TextureX1Y1 + ;word:TextureX2Y2 + ;ENDM +video9 LABEL WORD +public _framebuf ;used by nrm modes (=>vram) +_framebuf dw 0,0 + +PUBLIC _framemul +_framemul dw 0 + +supervga db 1 + db 0 + +ALIGN 4 +rows dw 512 dup(0) +rowsadd dw 0 +truerowsadd dw 0 +vecvram dw ? ;used by vector drawer +public _asmvramseg +_asmvramseg LABEL WORD +truevram dw ? +vram dw 0a5f0h ;-"- old + + +PUBLIC _texture +_texture dw 0,0 + + +color LABEL WORD +color1 db 0 +color2 db 0 +colorl dw 0 +PUBLIC _asmexit +_asmexit db 0 +fatalss dw 0 +fatalsp dw 0 +PUBLIC _inunreal +_inunreal db 0 +PUBLIC _framestaken +_framestaken dw 0 +PUBLIC _subpart +_subpart db 2 +PUBLIC _wireframe,_nohidden,_curlist +_wireframe db 0 +_nohidden db 0 +_curlist dw 0 +PUBLIC _mousedotx,_mousedoty +PUBLIC _mouse0dotx,_mouse0doty +_mousedotx dw 160 +_mousedoty dw 80 +_mouse0dotx dw 160 +_mouse0doty dw 80 + +public _font3x5 +_font3x5 dw 0,0 + +_horizon dw 0,0 +_horizonenabled db 1 + +nowaitborder db 0 +_borders db 0 ;1=show bordertimings +_autofly db 0 + +ALIGN 2 +dataseg dw data_seg +cdataseg dw 0 ;DS of the C routines +public _depthtable +_depthtable dw 0 +depthseg dw 0 + +public _asmdebugmode,_asmvideomode +_asmvideomode dw 0 +_asmdebugmode dw 0 +public _debugw + +;**************************************************************** +;SCREEN ROUTINES: +;waitborder +;LOW LEVEL ROUTINES: +;hline1 (AX,BX)-(DX,BX), color REQ: color1=color2, ds=cs, +; es=vram, OUT 3C4,2, EAXhi=0 +;pset (DX,BX), color REQ: ds=cs, es=vram, OUT 3C4,2 +;?line (DX,BX), color +;**************************************************************** +include vid.asm +;INITIALIZATION ROUTINES & COPPER EMULATION: +include copper.asm ;calls copper_doit() every frame +.386 ;for copper.asm sets .286 + +;**************************************************************** +;POLYGONS: call poly +;polygon with 1 sides is a dot +;polygon with 2 sides is a line +;following variables must be set (used as parameters) +;**************************************************************** +include poly.asm + +;**************************************************************** +;VECTOR ROUTINES: +;doobject +;MACRO sinbx2ax ;ax=sin(bx) req: ds=cs +;MACRO cosbx2ax ;ax=cos(bx) req: ds=cs +;**************************************************************** +include calc.asm +include spline.asm +include vec.asm +include matrix.asm +include horiz.asm + +;**************************************************************** +;(OBJECT) MEMORY MANAGEMENT +;**************************************************************** +include omem.asm + +;**************************************************************** +;C-interface +;**************************************************************** + +copper_doit PROC NEAR + ;called every frame by copper, must save all but AX/BX/CX/DX + sti + pushad + push ds + push es + ;call dos timer + pushf + call cs:oldint8 ;from copper + mov ds,cs:cdataseg + cmp cs:_inunreal,0 + je nodoni + mov ah,9 + int 60h ;musicmixer +nodoni: ;call _everyframe ;if uses scrn, should restore all VGA regs + pop es + pop ds + popad + cli + ret +copper_doit ENDP + +_testinit PROC FAR + CBEG + CEND +_testinit ENDP + +_asmclear PROC FAR + CBEG + call vvclear + CEND +_asmclear ENDP + +ALIGN 2 +INTER equ 0h +oldint dd ? +_asminit PROC FAR + CBEG + mov cs:cdataseg,ds + ; + mov si,cs:_asmvideomode + shl si,1 + mov si,cs:videot[si] + mov di,OFFSET video + cld + mov ax,cs + mov ds,ax + mov es,ax + mov cx,(video9-video)/2 + rep movsw + ; + call vvinit + call vvclear + call vvswitch + cmp cs:_asmdebugmode,0 + je noadm + call tweak320x200 +noadm: + cli + mov ax,0 + mov es,ax + mov ax,es:[INTER*4] + mov WORD PTR cs:[oldint+0],ax + mov ax,es:[INTER*4+2] + mov WORD PTR cs:[oldint+0+2],ax + mov ax,OFFSET intti + mov es:[INTER*4],ax + mov word ptr es:[INTER*4+2],cs + sti + + call clearpal + + ;call testmem + CEND +_asminit ENDP + +_asmdeinit PROC FAR + CBEG + cli + mov ax,0 + mov es,ax + mov ax,WORD PTR cs:[oldint+0] + mov es:[INTER*4],ax + mov ax,WORD PTR cs:[oldint+0+2] + mov es:[INTER*4+2],ax + sti + ;mov ax,3 + ;int 10h + CEND +_asmdeinit ENDP + +m_diverror db 'FATAL: divide overflow',0 +m_workflow db 'FATAL: work area overflow',0 +m_oldpoly db 'FATAL: old style polygons no longer supported',0 +m_outofvx db 'FATAL: too many vertices in object',0 +m_press db ' Press ESC to return to dos ',0 + +dosmsgp dw 0 +dosmsg PROC NEAR + mov ax,cs + mov ds,ax + mov ax,0b800h + mov es,ax + mov di,ds:dosmsgp + mov ah,4eh +doe2: lodsb + cmp al,0 + je doe1 + stosw + jmp doe2 +doe1: add ds:dosmsgp,di + ret +dosmsg ENDP + +intti PROC FAR + ;DIVIDE OVERFLOW + sti + mov si,OFFSET m_diverror + jmp fatalexit +fatalexit: + mov ax,3 + int 10h + call dosmsg + mov si,OFFSET m_press + call dosmsg +iiia: mov ax,0 + int 16h + cmp al,27 + jne iiia + mov cs:_asmexit,1 + mov ss,cs:fatalss + mov sp,cs:fatalsp + CEND +intti ENDP + +public _camera,_tmpxyz +_camera LABEL WORD +dd 0 +dd 0 +dd 0 +dw ?,?,? +dw 0 +dw 0 +dw 0 +_tmpxyz dd -200000000,0,0 + +lastcoppercount dw 0 +clearit dw 1 + +PUBLIC _doclear +_doclear PROC FAR + CBEG + call doclear + CEND +_doclear ENDP + +doclear PROC NEAR + ret + mov dx,3c4h + mov ax,0f02h + out dx,ax + xor di,di + mov ax,0a000h + mov es,ax + mov cx,65535 + xor ax,ax +doc1: mov es:[di],al + nop + inc di + loop doc1 + ret +doclear ENDP + +_asm PROC FAR + CBEG + mov cs:fatalss,ss + mov cs:fatalsp,sp + sti + + cmp cs:_asmvideomode,5 + je nothis1 + mov ds,cs:cdataseg + call _toasmdraw +nothis1: + call cs:video[2] ;switchpages, returns cs:vram + mov ax,cs:vram + mov cs:vecvram,ax + + ;mov ax,cs:vram + ;add ax,02dh ;add 8 rows + ;mov ax,asm_framebuf + ;mov ax,asm_framebuf + ;mov cs:vecvram,ax + ;mov ax,0a000h + ;mov cs:vram,ax + + cmp cs:nowaitborder,0 + jne asm1b + + cmp cs:_inunreal,0 + je asmnormal + ;waitborder with copper +asm2: mov ah,10 + int 60h + cmp ax,cs:lastcoppercount + je asm2 +asm1: mov bx,ax + sub bx,cs:lastcoppercount + mov cs:_framestaken,bx + mov cs:lastcoppercount,ax + jmp asmunr + +asmnormal: + ;waitborder with copper +asm2b: mov ax,cs:coppercount + cmp ax,cs:lastcoppercount + je asm2b +asm1b: mov bx,ax + sub bx,cs:lastcoppercount + mov cs:_framestaken,bx + mov cs:lastcoppercount,ax + +asmunr: setborder 1 + ;mov cs:color,0000h + ;call vecclearscreen + ;enable all planes for debugdots + mov dx,3c4h + mov ax,0f02h + out dx,ax + ;do the vecs + ;call dofirstnew + setborder 2 + call dofirstnrs + setborder 0 + ;do the mousedot + IFDEF MOUSEDOT + mov dx,3c4h + mov al,2 + out dx,al + mov ax,cs:vecvram + mov es,ax + mov ax,cs + mov ds,ax + mov dx,cs:_mouse0dotx + mov bx,cs:_mouse0doty + mov cs:color1,15 + call pset1 + mov dx,cs:_mousedotx + mov bx,cs:_mousedoty + mov cs:color1,14 + call pset1 + ENDIF + ;check workareaoverflow + mov gs,cs:dataseg + cmp gs:workareaoverflow,012fch + je workok + mov si,OFFSET m_workflow + jmp fatalexit +workok: ;done + + cmp cs:_asmvideomode,5 + je nothis2 + mov ds,cs:cdataseg + call _fromasmdraw +nothis2: + CEND +_asm ENDP + +public _softice +_softice PROC FAR + CBEG + mov ah,9 + mov al,11h + mov si,'FG' + mov di,'JM' + movpar ds,1 + movpar dx,0 + int 3 + CEND +_softice ENDP + +copybmap PROC NEAR + ;enable all planes for debugdots + mov ax,OFFSET cbj2 + mov cs:bmapjmp,ax + mov bx,cs:bmapwid + shr bx,1 +cbm3: mov cs:bmapdi,di + mov dx,3c4h + mov ax,0102h +cbm4: push ax + push si + out dx,ax + mov cx,bx + jmp cs:bmapjmp +cbmb: mov di,cs:bmapdi + pop si + pop ax + shl ah,1 + add si,80 + cmp ah,16 + jb cbm4 + sub si,320 + ret +cbj1: rep movsw + jmp cbmb +cbj2: movsb + dec cx + rep movsw + movsb + jmp cbmb +cbj3: rep movsw + movsb + jmp cbmb +cbj4: movsb + rep movsw + jmp cbmb +copybmap ENDP + +.8086 +asm_text ENDS + END + \ No newline at end of file diff --git a/GLENZ/ASM.ASM b/GLENZ/ASM.ASM new file mode 100644 index 0000000..8190455 --- /dev/null +++ b/GLENZ/ASM.ASM @@ -0,0 +1,152 @@ +include asm.inc + +text__asm SEGMENT para public 'CODE' + ASSUME cs:text__asm + +.386 + +tmp1 dw 0 +tmp2 dw 0 + +PUBLIC _testpset +_testpset PROC FAR + CBEG + LOADDS + mov dx,3c4h + mov al,2 + out dx,al + mov es,ds:vram + mov ax,[bp+10] + mov ds:color,ax + mov bx,[bp+8] + mov dx,[bp+6] + call VIDPSET + CEND +_testpset ENDP + +PUBLIC _testline +_testline PROC FAR + CBEG + LOADDS + mov es,ds:vram + mov ax,[bp+14] + mov ds:color,ax + mov ax,[bp+12] + mov cx,[bp+10] + mov bx,[bp+8] + mov dx,[bp+6] + call VIDLINE + CEND +_testline ENDP + +PUBLIC _testasm +_testasm PROC FAR + CBEG + LOADDS + mov si,OFFSET video + mov ax,0 + call setvmode + call VIDINIT + CEND + + CBEG + LOADDS + setborder 0 + mov si,OFFSET video + mov ax,0 + call setvmode + call VIDINIT + ;call VIDSWITCH + ;call VIDCLEAR64 + mov ax,13h + int 10h + ; + mov dx,3c8h + mov al,0 + out dx,al + inc dx + xor al,al + out dx,al + out dx,al + out dx,al + mov al,11 + mov cx,255 +@@1: out dx,al + out dx,al + out dx,al + inc al + loop @@1 + + call VIDSWITCH + push ds:vram + call VIDSWITCH + pop ds:vram + + mov ax,13h + int 10h + CEND + + LOADDS + mov ds:color1,60 + +@@aga: LOADDS + call VIDSWITCH + + mov dx,3c4h + mov al,2 + out dx,al + + add ds:color,1 + add cs:tmp1,3 + add cs:tmp2,4 + mov cx,0 + mov ax,cs:tmp1 + shr ax,2 + and ax,255 + mov dx,cs:tmp2 + shr dx,2 + and dx,255 + mov bx,199 + mov es,ds:vram + call VIDLINE + mov ah,1 + + mov ax,3 + int 10h + CEND +_testasm ENDP + +PUBLIC _asmtestmode +_asmtestmode db 0 + +PUBLIC _asm +_asm PROC FAR + CBEG + LOADDS + push word ptr [bp+6] + push word ptr [bp+8] + cmp cs:_asmtestmode,0 + je @@1 + +@@2: setborder 0 + call VIDWAITB + call VIDWAITB + call VIDWAITB + mov ax,0a000h + mov es,ax + mov cx,32000 + xor ax,ax + rep stosw + pop es + pop di + CEND + +@@1: setborder 0 + call VIDWAITB + pop es + pop di + CEND +_asm ENDP + +text__asm ENDS + END diff --git a/GLENZ/ASM.INC b/GLENZ/ASM.INC new file mode 100644 index 0000000..b96f8d3 --- /dev/null +++ b/GLENZ/ASM.INC @@ -0,0 +1,61 @@ +include adata.inc +include aobj.inc + +INT3 MACRO + int 3 + ENDM + +LOADDS MACRO + mov ax,SEG rows + mov ds,ax + ENDM + +LOADGS MACRO + mov ax,SEG rows + mov gs,ax + ENDM + +movpar MACRO reg,par ;loads parameter [par(0..)] to register [reg] + mov reg,word ptr [bp+par*2+6] + ENDM + +CBEG MACRO ;C/Assembler procedure begin + push bp + mov bp,sp + push si + push di + push ds + ENDM + +CEND MACRO ;C/Assembler procedure end + pop ds + pop di + pop si + pop bp + ret + ENDM + +setborder MACRO col + mov al,col + push ax +; call _setborder + add sp,2 + ENDM + +LOCALS + +;VID.ASM +global setvmode:far +global _setborder:far +VIDINIT equ ds:video[0] +VIDSWITCH equ ds:video[4] +VIDCLEAR64 equ ds:video[8] +VIDPSET equ ds:video[12] +VIDLINE equ ds:video[16] +VIDHLINE equ ds:video[20] +VIDHGROUP equ ds:video[24] +VIDTHGROUP equ ds:video[28] +VIDPOLYGROUP equ ds:video[32] +VIDCLEAR equ ds:video[36] +VIDWAITB equ ds:video[40] +VIDNEWPOLYGROUP equ ds:video[44] diff --git a/GLENZ/ASM.OBJ b/GLENZ/ASM.OBJ new file mode 100644 index 0000000..c1c2fd8 Binary files /dev/null and b/GLENZ/ASM.OBJ differ diff --git a/GLENZ/BACKX.BAT b/GLENZ/BACKX.BAT new file mode 100644 index 0000000..2ea2e91 --- /dev/null +++ b/GLENZ/BACKX.BAT @@ -0,0 +1 @@ +pkzip %1 %2 -Pr -x*.exe -x*.obj -x*.~* -x*.ob diff --git a/GLENZ/DEMO1.CUT b/GLENZ/DEMO1.CUT new file mode 100644 index 0000000..bfa7149 --- /dev/null +++ b/GLENZ/DEMO1.CUT @@ -0,0 +1,37 @@ + mov ax,es:[bx-2] + xor ax,8000h + test ax,4000h + jz @@5 + mov dl,al + and dl,1 + shl dl,5 + mov al,dl +@@5: mov es:[bx-2],ax +@@7: pop ax + ;lightsource + ;push es + ;push bx + ;mov bx,0a000h + ;mov es,bx + ;mov bx,ax + ;sar bx,8 + ;add bx,320 + ;inc byte ptr es:[bx] + ;pop bx + ;pop es + mov cl,cs:_lightshift + shrd ax,dx,cl + cmp ax,0 + jge @@s1 + mov ax,0 +@@s1: cmp ax,15 + jle @@s2 + mov ax,15 +@@s2: ;mov dx,15 + ;sub dx,ax + mov dx,ax +; mov ax,es:[bx-2] +; and ax,not 15 +; or ax,dx +; mov es:[bx-2],ax + ret diff --git a/GLENZ/DOC b/GLENZ/DOC new file mode 100644 index 0000000..8bd33de --- /dev/null +++ b/GLENZ/DOC @@ -0,0 +1,32 @@ +pointlist: +word points in list +word - +dword x,y,z +... + +projectedpointlist: +word points in list +word - +. +word sx +word sy +word fl +word - +dword z + +polygroup: +word sides (0=end) +word color +word x,y +... + +edgelist: +word edges +word - +. +word v1,v2,f,0 f&8000:hidden edge + +hline list: +word starty +... +word x1(-32767=end),x2 diff --git a/GLENZ/DOLOOP.C b/GLENZ/DOLOOP.C new file mode 100644 index 0000000..6af3055 --- /dev/null +++ b/GLENZ/DOLOOP.C @@ -0,0 +1,123 @@ +#include +#include +#include +#include + +#define MAXZOOM 340 +#define MINZOOM 160 + +FILE *f1; + +void P(char *str,...) +{ + char out[256]; + va_list argp; + va_start(argp,str); + vsprintf(out,str,argp); + fprintf(f1,"%s\n",out); + va_end(argp); +} + +long weirdflip(unsigned long l) +{ + long m,lo,hi; + lo=l&0xffff; + hi=l>>16; + m=(lo<<16)+hi; + return(m); +} + +int xt[320]; + +main() +{ + int i,j,x,y,a,sk1,sk2,sk3,sk4,sfl; + long l; + f1=fopen("zoomloop.inc","wt"); + + P("zoom PROC FAR"); + P(";ds:si=source bitmap row start"); + P(";es:di=destination pointer"); + P(";ax=zoom factor (desired screen width)"); + P("cmp ax,%i",MAXZOOM); + P("jae zoom_ret"); + P("xor cx,cx"); + P("test ax,4"); + P("jnz @@1"); + P("add di,2"); + P("mov cx,1"); + P("@@1:"); + P("mov bx,ax"); + P("and bx,not 1"); + P("xor edx,edx"); + P("jmp cs:zoomloopt[bx]"); + P("zoom_ret:"); + P("ret"); + P("ALIGN 16 ;following should stay in cache"); + P("zoomloopt LABEL WORD"); + for(y=0;y<=MAXZOOM;y+=2) + { + if(y319) xt[x]=-1; + else xt[x]=a; + } + sk1=(int)((long)-80*(long)y/320L)+160; + sk2=(int)((long)-40*(long)y/320L)+160; + sk3=(int)((long)40*(long)y/320L)+160; + sk4=(int)((long)80*(long)y/320L)+160; + sk1&=~3; + sk2&=~3; + sk3&=~3; + sk4&=~3; + P("zoom_%i:",y); + sfl=0; + for(x=0;x<320;x+=2) + { + if(x==sk1 || x==sk2 || x==sk3 || x==sk4) + { + P("add si,cx"); + } + if(xt[x]==-1 && xt[x+1]==-1 && xt[x+2]==-1 && xt[x+3]==-1 && !(x&2)) + { + P("mov es:[di+%i],edx",x); + x+=2; + } + else if(xt[x]==-1 && xt[x+1]==-1) + { + P("mov es:[di+%i],dx",x); + } + else + { + if(xt[x]!=-1 && xt[x+1]!=-1 && xt[x+1]==xt[x]+1) + { + P("mov ax,ds:[si+%i]",xt[x]); + P("mov es:[di+%i],ax",x); + } + else + { + if(xt[x]==-1) P("mov al,dl"); + else P("mov al,ds:[si+%i]",xt[x]); + if(xt[x+1]==xt[x]) P("mov ah,al"); + else if(xt[x+1]==-1) P("mov ah,dl"); + else P("mov ah,ds:[si+%i]",xt[x+1]); + P("mov es:[di+%i],ax",x); + } + } + } + P("ret"); + } + P("zoom ENDP"); + fclose(f1); +} diff --git a/GLENZ/DOLOOP.EXE b/GLENZ/DOLOOP.EXE new file mode 100644 index 0000000..65fe7a3 Binary files /dev/null and b/GLENZ/DOLOOP.EXE differ diff --git a/GLENZ/DP_PREFS b/GLENZ/DP_PREFS new file mode 100644 index 0000000..075dc7b Binary files /dev/null and b/GLENZ/DP_PREFS differ diff --git a/GLENZ/EDGE.BBK b/GLENZ/EDGE.BBK new file mode 100644 index 0000000..299843c --- /dev/null +++ b/GLENZ/EDGE.BBK @@ -0,0 +1,176 @@ +#include +#include + +char far *vram=(char far *)0xa0000000L; + +int edge[256]; + +int ep[200]; +int ec; +struct +{ + int c,next; + int y1,y2; + long x1,x; // x used, x1=original + long dx; +} e[256]; + +int list[256],listc; + +unsigned draworders[32000],dop; + +void pass3(void) +{ + unsigned int u,ut,i,c; + for(i=c=u=0;i=0 && x=e[i].y2) continue; + if(k!=j) list[k]=i; + k++; + x=e[i].x; + if(lx==x) draworders[dop-1]^=e[i].c; + else + { + draworders[dop++]=y*320+(lx=(e[i].x>>16)); + draworders[dop++]=e[i].c; + } + //vram[(e[i].x>>16)+y*320]=k; // e[i].c; + e[i].x+=e[i].dx; + } + listc=k; + } + printf("%i\n",dop); +} + +void pass1(int *edge) +{ + int dy,y1,y2,x1,x2,a; + ec=1; memset(ep,0,200*2); + while(*edge!=0x8000) + { + e[ec].c=edge[0]; + y1=edge[3]; + y2=edge[5]; + if(y1>y2) + { + x1=y1; y1=y2; y2=x1; // y1<=>y2 + x1=edge[4]; + x2=edge[2]; + } + else + { + x1=edge[2]; + x2=edge[4]; + } + e[ec].x1=(long)x1<<16; + e[ec].dx=((long)(x2-x1)<<16)/(y2-y1); + // if y1<0 clip + e[ec].y1=y1; + e[ec].y2=y2; + if(a=ep[y1]) + { // add + ep[y1]=ec; + e[ec].next=a; + } + else + { // first + ep[y1]=ec; + e[ec].next=0; + } + #if 0 + _setcolor(8); + _moveto(0,y1); + _lineto(319,y1); + _setcolor(15); + _setpixel(x1,y1); + #endif + ec++; + edge+=6; + } +} + +main() +{ + int a,b,c,x,y; + _setvideomode(_MRES256COLOR); + x=100; y=100; for(a=0;a<60;a++) rand(); + for(a=b=0;a<8;a++) + { + edge[b++]=2; // color + b++; + edge[b++]=x; // X1 + edge[b++]=y; // Y1 + x=edge[b++]=rand()%320; // X2 + y=edge[b++]=rand()%200; // Y2 + } + edge[b++]=2; // color + b++; + edge[b++]=x; // X1 + edge[b++]=y; // Y1 + edge[b++]=100; // X2 + edge[b++]=100; // Y2 + edge[b++]=0x8000; // end of list + #if 0 + _setcolor(8); + for(b=0;edge[b]!=0x8000;b+=6) + { + _moveto(edge[b+2],edge[b+3]); + _lineto(edge[b+4],edge[b+5]); + } + #endif + pass1(edge); + //getch(); + pass2(); + getch(); + pass3(); + getch(); + _setvideomode(_DEFAULTMODE); +} diff --git a/GLENZ/EDGE.C b/GLENZ/EDGE.C new file mode 100644 index 0000000..9129005 --- /dev/null +++ b/GLENZ/EDGE.C @@ -0,0 +1,159 @@ +#include +#include + +char far *vram=(char far *)0xa0000000L; + +int edge[512]; + +int ep[200]; +int ec; +struct +{ + int c,next; + int y1,y2; + long x1,x; // x used, x1=original + long dx; +} e[256]; + +int list[256],listc; + +unsigned draworders[32000],dop; + +void pass3(void) +{ + unsigned int u,ut,i,c; + for(i=c=u=0;i=0 && x=e[i].y2) continue; + if(k!=j) list[k]=i; + k++; + x=e[i].x; + if(lx==x) draworders[dop-1]^=e[i].c; + else + { + draworders[dop++]=y*320+(lx=(e[i].x>>16)); + draworders[dop++]=e[i].c; + } + vram[(e[i].x>>16)+y*320]=e[i].c; + e[i].x+=e[i].dx; + } + listc=k; + } +} + +void pass1(int *edge) +{ + int dy,y1,y2,x1,x2,a; + ec=1; memset(ep,0,200*2); + while(*edge!=0x8000) + { + e[ec].c=edge[0]; + y1=edge[3]; + y2=edge[5]; + if(y1>y2) + { + x1=y1; y1=y2; y2=x1; // y1<=>y2 + x1=edge[4]; + x2=edge[2]; + } + else + { + x1=edge[2]; + x2=edge[4]; + } + e[ec].x1=(long)x1<<16; + e[ec].dx=((long)(x2-x1)<<16)/(y2-y1); + // if y1<0 clip + e[ec].y1=y1; + e[ec].y2=y2; + if(a=ep[y1]) + { // add + ep[y1]=ec; + e[ec].next=a; + } + else + { // first + ep[y1]=ec; + e[ec].next=0; + } + ec++; + edge+=6; + } +} + +main() +{ + int a,b,c,x,y; + _setvideomode(_MRES256COLOR); + for(a=0;a<60;a++) rand(); + b=0; + for(c=1;c<=4;c<<=1) + { + x=100+c*10; y=100+c*10; + for(a=0;a<8;a++) + { + edge[b++]=c; // color + b++; + edge[b++]=x; // X1 + edge[b++]=y; // Y1 + x=edge[b++]=rand()%320; // X2 + y=edge[b++]=rand()%200; // Y2 + } + edge[b++]=c; // color + b++; + edge[b++]=x; // X1 + edge[b++]=y; // Y1 + edge[b++]=100+c*10; // X2 + edge[b++]=100+c*10; // Y2 + } + edge[b++]=0x8000; // end of list + + #if 0 + _setcolor(8); + for(b=0;edge[b]!=0x8000;b+=6) + { + _moveto(edge[b+2],edge[b+3]); + _lineto(edge[b+4],edge[b+5]); + } + #endif + pass1(edge); + pass2(); + getch(); + pass3(); + getch(); + _setvideomode(_DEFAULTMODE); +} diff --git a/GLENZ/EDGE.EXE b/GLENZ/EDGE.EXE new file mode 100644 index 0000000..a2399eb Binary files /dev/null and b/GLENZ/EDGE.EXE differ diff --git a/GLENZ/EYE4.UH b/GLENZ/EYE4.UH new file mode 100644 index 0000000..e41a320 Binary files /dev/null and b/GLENZ/EYE4.UH differ diff --git a/GLENZ/FC.BBK b/GLENZ/FC.BBK new file mode 100644 index 0000000..02c44ac Binary files /dev/null and b/GLENZ/FC.BBK differ diff --git a/GLENZ/FC.LBM b/GLENZ/FC.LBM new file mode 100644 index 0000000..d48b733 Binary files /dev/null and b/GLENZ/FC.LBM differ diff --git a/GLENZ/FC.UH b/GLENZ/FC.UH new file mode 100644 index 0000000..0b82d97 Binary files /dev/null and b/GLENZ/FC.UH differ diff --git a/GLENZ/FCX.LBM b/GLENZ/FCX.LBM new file mode 100644 index 0000000..b600404 Binary files /dev/null and b/GLENZ/FCX.LBM differ diff --git a/GLENZ/G.BAT b/GLENZ/G.BAT new file mode 100644 index 0000000..cc83eeb --- /dev/null +++ b/GLENZ/G.BAT @@ -0,0 +1,3 @@ +echo off +..\beg\beg +v diff --git a/GLENZ/GL10.LIB b/GLENZ/GL10.LIB new file mode 100644 index 0000000..50c1b17 Binary files /dev/null and b/GLENZ/GL10.LIB differ diff --git a/GLENZ/KOE.C b/GLENZ/KOE.C new file mode 100644 index 0000000..944ca22 --- /dev/null +++ b/GLENZ/KOE.C @@ -0,0 +1,14 @@ +main() +{ + int a=0; + _asm mov ax,13h + _asm int 10h + while(!kbhit()) + { + printf("."); + while(!(inp(0x3da)&8)); + printf("."); + while((inp(0x3da)&8)); + printf("%i\r",a++); + } +} diff --git a/GLENZ/KOE.EXE b/GLENZ/KOE.EXE new file mode 100644 index 0000000..bd91639 Binary files /dev/null and b/GLENZ/KOE.EXE differ diff --git a/GLENZ/MAIN.1 b/GLENZ/MAIN.1 new file mode 100644 index 0000000..9e50601 --- /dev/null +++ b/GLENZ/MAIN.1 @@ -0,0 +1,241 @@ +#include +#include +#include +#include +#include + +char far *vram=(char far *)0xa0000000L; + +extern char lightshift; + +extern int _ndebug1; + +extern char asmtestmode; + +extern int csetmatrix(int *,long,long,long); +extern int crotlist(long *,long *); +extern int cclipedges(int *,int *,long *); // modifies given point list +extern int cprojlist(long *,long *); +extern int cdrawpolylist(int *); +extern int cmatrix_yxz(int,int,int,int *); +extern int cpolylist(int *polylist,int *polys,int *edges,long *points3); +extern int ceasypolylist(int *polylist,int *polys,long *points3); + +long cubepoints[]={8, +-666,-666,-666, +666,-666,-666, +666,666,-666, +-666,666,-666, +-666,-666,666, +666,-666,666, +666,666,666, +-666,666,666 +}; +int cubeepolys[]={ +4,0x4002,0,1,2,3, +4,0x4004,4,5,6,7, +4,0x4006,0,1,5,4, +4,0x4008,1,2,6,5, +4,0x4003,2,3,7,6, +4,0x4005,3,0,4,7, +0}; + +long points[64]={14, +-1000,-1000,-1000, +1000,-1000,-1000, +1000,1000,-1000, +-1000,1000,-1000, +-1000,-1000,1000, +1000,-1000,1000, +1000,1000,1000, +-1000,1000,1000, +0,0,-1700, +0,0,1700, +1700,0,0, +-1700,0,0, +0,1700,0, +0,-1700,0}; +long points2[256]; +int points3[256*2]; +int edges[64]={12,0, +0,1,0,0, +1,2,0,0, +2,3,0,0, +3,0,0,0, +4,5,0,0, // 4 +5,6,0,0, +6,7,0,0, +7,4,0,0, +0,4,0,0, // 8 +1,5,0,0, +2,6,0,0, +3,7,0,0}; +int edges2[64]; +int polys[64]={ +4,0x4010,0,1,2,3, +4,0x4008,0,8,4,9, +4,0x4010,1,9,5,10, +4,0x4020,2,10,6,11, +4,0x4040,3,11,7,12, +4,0x4080,4,5,6,7, +0}; +int epolys[]={ +3,0x4010,0,1,8, +3,0x4020,1,2,8, +3,0x4010,2,3,8, +3,0x4020,3,0,8, + +3,0x4010,2,1,10, +3,0x4020,1,5,10, +3,0x4010,5,6,10, +3,0x4020,6,2,10, + +3,0x4010,2,6,12, +3,0x4020,6,7,12, +3,0x4010,7,3,12, +3,0x4020,3,2,12, + +3,0x4010,0,3,11, +3,0x4020,3,7,11, +3,0x4010,7,4,11, +3,0x4020,4,0,11, + +3,0x4010,5,1,13, +3,0x4020,1,0,13, +3,0x4010,0,4,13, +3,0x4020,4,5,13, + +3,0x4010,5,4,9, +3,0x4020,4,7,9, +3,0x4010,7,6,9, +3,0x4020,6,5,9, + +0}; +int polylist[256]; +int matrix[9]; + +int testlist[]={ +3,16, 190,100, 90,50, 110,150, +3,20, 10,100, 90,50, 99,150, +0}; + +main() +{ + int a,b,c,x,y,rx,ry,rz,n=8,p1,p2,r,g,zpos=7000; + testasm(); + //initnewgroup(); + outp(0x3c8,0); + for(a=0;a<256;a++) + { + r=g=b=0; + c=16+(a&15)*3; + if(a&0x10) { b+=40*c/64; } + if(a&0x20) { r+=50*c/64; g+=50*c/64; b+=50*c/64; } + if(a&0x40) { b+=10; } + if(a&0x80) { r+=10; g+=10; b+=20; } + if(a==1) { r=60; g=0; b=0; } + if(a==2) { r=0; g=60; b=0; } + if(a==3) { r=0; g=0; b=60; } + if(a==4) { r=50; g=50; b=50; } + if(r>63) r=63; + if(g>63) g=63; + if(b>63) b=63; + outp(0x3c9,r); + outp(0x3c9,g); + outp(0x3c9,b); + } + outp(0x3c8,7); + outp(0x3c9,40); + outp(0x3c9,40); + outp(0x3c9,40); + for(a=0;a<256;a++) vram[a]=a; + lightshift=8; + for(;;) + { + if(kbhit()) + { + a=getch(); + if(a==27) break; + if(a=='l') lightshift=2; + if(a=='+') zpos+=200; + if(a=='-') zpos-=200; + if(a=='<') lightshift--; + if(a=='>') lightshift++; + if(a=='t') asmtestmode=1; + if(a=='c') { if(zpos==3200) { lightshift=8; zpos=7000; } else { zpos=3200; lightshift=11; } } + } + asm(); + setborder(1); + rx+=16; ry+=15; rz+=7; + rx%=3600; ry%=3600; rz%=3600; + //if(rz==0) printf("."); + /* + a=0; + while(polylist[a]) + { + a+=polylist[a]*2+2; + } + polylist[a++]=4; + polylist[a++]=19; + polylist[a++]=160-60; polylist[a++]=100-40; + polylist[a++]=160+60; polylist[a++]=100-40; + polylist[a++]=160+60; polylist[a++]=100+40; + polylist[a++]=160-60; polylist[a++]=100+40; + polylist[a++]=0; + */ + cglenzinit(); + + cmatrix_yxz(rx,ry,rz,matrix); + csetmatrix(matrix,0,0,zpos); + points2[0]=0; crotlist(points2,points); + //cclipedges(edges2,edges,points2); + points3[0]=0; cprojlist((long *)points3,points2); + //cpolylist(polylist,polys,edges,points3); + ceasypolylist(polylist,epolys,points3); + + cglenzpolylist(polylist); + + cmatrix_yxz(rx*2,-ry,rz*2,matrix); + csetmatrix(matrix,0,0,zpos); + points2[0]=0; crotlist(points2,cubepoints); + points3[0]=0; cprojlist((long *)points3,points2); + ceasypolylist(polylist,cubeepolys,points3); + + cglenzpolylist(polylist); + + cglenzdone(); + //cdrawpolylist(polylist); + //cdrawpolylist(testlist); + //setborder(3); + //drawnewgroup(); + #if 0 + n=edges[0]; + for(a=2,b=0;b +#include +#include +#include +#include + +char far *vram=(char far *)0xa0000000L; + +extern char lightshift; + +extern int _ndebug1; + +extern char asmtestmode; + +extern int csetmatrix(int *,long,long,long); +extern int crotlist(long *,long *); +extern int cclipedges(int *,int *,long *); // modifies given point list +extern int cprojlist(long *,long *); +extern int cdrawpolylist(int *); +extern int cmatrix_yxz(int,int,int,int *); +extern int cpolylist(int *polylist,int *polys,int *edges,long *points3); +extern int ceasypolylist(int *polylist,int *polys,long *points3); + +long cubepoints[]={8, +-666,-666,-666, +666,-666,-666, +666,666,-666, +-666,666,-666, +-666,-666,666, +666,-666,666, +666,666,666, +-666,666,666 +}; +int cubeepolys[]={ +4,0x4002,0,1,2,3, +4,0x4004,4,5,6,7, +4,0x4006,0,1,5,4, +4,0x4008,1,2,6,5, +4,0x4003,2,3,7,6, +4,0x4005,3,0,4,7, +0}; + +long points[64]={14, +-1000,-1000,-1000, +1000,-1000,-1000, +1000,1000,-1000, +-1000,1000,-1000, +-1000,-1000,1000, +1000,-1000,1000, +1000,1000,1000, +-1000,1000,1000, +0,0,-1700, +0,0,1700, +1700,0,0, +-1700,0,0, +0,1700,0, +0,-1700,0}; +long pointsb[64]={14, +-600,-600,-600, +600,-600,-600, +600,600,-600, +-600,600,-600, +-600,-600,600, +600,-600,600, +600,600,600, +-600,600,600, +0,0,-900, +0,0,900, +900,0,0, +-900,0,0, +0,900,0, +0,-900,0}; +long points2[256]; +int points3[256*2]; +int edges[64]={12,0, +0,1,0,0, +1,2,0,0, +2,3,0,0, +3,0,0,0, +4,5,0,0, // 4 +5,6,0,0, +6,7,0,0, +7,4,0,0, +0,4,0,0, // 8 +1,5,0,0, +2,6,0,0, +3,7,0,0}; +int edges2[64]; +int polys[64]={ +4,0x4010,0,1,2,3, +4,0x4008,0,8,4,9, +4,0x4010,1,9,5,10, +4,0x4020,2,10,6,11, +4,0x4040,3,11,7,12, +4,0x4080,4,5,6,7, +0}; +int epolys[]={ +3,0x4010,0,1,8, +3,0x4020,1,2,8, +3,0x4010,2,3,8, +3,0x4020,3,0,8, + +3,0x4010,2,1,10, +3,0x4020,1,5,10, +3,0x4010,5,6,10, +3,0x4020,6,2,10, + +3,0x4010,2,6,12, +3,0x4020,6,7,12, +3,0x4010,7,3,12, +3,0x4020,3,2,12, + +3,0x4010,0,3,11, +3,0x4020,3,7,11, +3,0x4010,7,4,11, +3,0x4020,4,0,11, + +3,0x4010,5,1,13, +3,0x4020,1,0,13, +3,0x4010,0,4,13, +3,0x4020,4,5,13, + +3,0x4010,5,4,9, +3,0x4020,4,7,9, +3,0x4010,7,6,9, +3,0x4020,6,5,9, + +0}; +int epolysb[]={ +3,0x4001,0,1,8, +3,0x4002,1,2,8, +3,0x4001,2,3,8, +3,0x4002,3,0,8, + +3,0x4001,2,1,10, +3,0x4002,1,5,10, +3,0x4001,5,6,10, +3,0x4002,6,2,10, + +3,0x4001,2,6,12, +3,0x4002,6,7,12, +3,0x4001,7,3,12, +3,0x4002,3,2,12, + +3,0x4001,0,3,11, +3,0x4002,3,7,11, +3,0x4001,7,4,11, +3,0x4002,4,0,11, + +3,0x4001,5,1,13, +3,0x4002,1,0,13, +3,0x4001,0,4,13, +3,0x4002,4,5,13, + +3,0x4001,5,4,9, +3,0x4002,4,7,9, +3,0x4001,7,6,9, +3,0x4002,6,5,9, + +0}; +int polylist[256]; +int matrix[9]; + +int testlist[]={ +3,16, 190,100, 90,50, 110,150, +3,20, 10,100, 90,50, 99,150, +0}; + +main() +{ + int a,b,c,x,y,rx,ry,rz,n=8,p1,p2,r,g,zpos=7000; + testasm(); + //initnewgroup(); + outp(0x3c8,0); + for(a=0;a<256;a++) + { + r=g=b=0; + if(a&0x01) { r+=40; } + if(a&0x02) { g+=40; r+=40; b+=40; } + if(a&0x04) { r+=0; } + if(a&0x08) { g+=10; r+=10; b+=10; } + if(a&0x10) { b+=40; } + if(a&0x20) { g+=40; r+=40; b+=40; } + if(a&0x40) { b+=0; } + if(a&0x80) { g+=10; r+=10; b+=10; } + r=r*4/6; + g=g*4/6; + b=b*4/6; + if(r>63) r=63; + if(g>63) g=63; + if(b>63) b=63; + outp(0x3c9,r); + outp(0x3c9,g); + outp(0x3c9,b); + } + for(a=0;a<256;a++) vram[a]=a; + lightshift=8; + for(;;) + { + if(kbhit()) + { + a=getch(); + if(a==27) break; + if(a=='l') lightshift=2; + if(a=='+') zpos+=200; + if(a=='-') zpos-=200; + if(a=='<') lightshift--; + if(a=='>') lightshift++; + if(a=='t') asmtestmode=1; + if(a=='c') { if(zpos==3200) { lightshift=8; zpos=7000; } else { zpos=3200; lightshift=11; } } + } + asm(); + setborder(1); + rx+=16; ry+=15; rz+=7; + rx%=3600; ry%=3600; rz%=3600; + //if(rz==0) printf("."); + /* + a=0; + while(polylist[a]) + { + a+=polylist[a]*2+2; + } + polylist[a++]=4; + polylist[a++]=19; + polylist[a++]=160-60; polylist[a++]=100-40; + polylist[a++]=160+60; polylist[a++]=100-40; + polylist[a++]=160+60; polylist[a++]=100+40; + polylist[a++]=160-60; polylist[a++]=100+40; + polylist[a++]=0; + */ + cglenzinit(); + + cmatrix_yxz(rx,ry,rz,matrix); + csetmatrix(matrix,0,0,zpos); + points2[0]=0; crotlist(points2,points); + //cclipedges(edges2,edges,points2); + points3[0]=0; cprojlist((long *)points3,points2); + //cpolylist(polylist,polys,edges,points3); + ceasypolylist(polylist,epolys,points3); + + cglenzpolylist(polylist); + + cmatrix_yxz(-rx,-ry,rz,matrix); + csetmatrix(matrix,0,0,zpos); + points2[0]=0; crotlist(points2,pointsb); + //cclipedges(edges2,edges,points2); + points3[0]=0; cprojlist((long *)points3,points2); + //cpolylist(polylist,polys,edges,points3); + ceasypolylist(polylist,epolysb,points3); + + //cmatrix_yxz(rx*2,-ry,rz*2,matrix); + //csetmatrix(matrix,0,0,zpos); + //points2[0]=0; crotlist(points2,cubepoints); + //points3[0]=0; cprojlist((long *)points3,points2); + //ceasypolylist(polylist,cubeepolys,points3); + + cglenzpolylist(polylist); + + cglenzdone(); + //cdrawpolylist(polylist); + //cdrawpolylist(testlist); + //setborder(3); + //drawnewgroup(); + #if 0 + n=edges[0]; + for(a=2,b=0;b +#include +#include +#include +#include +#include "..\dis\dis.h" + +extern int sin1024[]; + +extern void zoomer1(char *pic); + +char bgpic[65535]; + +extern char fc[]; +char *fcrow[100]; +char *fcrow2[16]; + +char far *vram=(char far *)0xa0000000L; + +extern char lightshift; + +extern int _ndebug1; + +extern char asmtestmode; + +extern int csetmatrix(int *,long,long,long); +extern int crotlist(long *,long *); +extern int cclipedges(int *,int *,long *); // modifies given point list +extern int cprojlist(long *,long *); +extern int ccliplist(long *); +extern int cdrawpolylist(int *); +extern int cmatrix_yxz(int,int,int,int *); +extern int cpolylist(int *polylist,int *polys,int *edges,long *points3); +extern int ceasypolylist(int *polylist,int *polys,long *points3); + +extern int demomode[]; + +long cubepoints[]={8, +-999,-999,-999, +999,-999,-999, +999,999,-999, +-999,999,-999, +-999,-999,999, +999,-999,999, +999,999,999, +-999,999,999 +}; +int cubeepolys[]={ +4,0x4002,0,1,2,3, +4,0x4004,4,5,6,7, +4,0x4008,0,1,5,4, +4,0x4006,1,2,6,5, +4,0x400c,2,3,7,6, +4,0x400a,3,0,4,7, +0}; + +#define ZZZ 50 +#define QQQ 99 + +long points[64]={14, +-100*ZZZ,-100*ZZZ,-100*ZZZ, +100*ZZZ,-100*ZZZ,-100*ZZZ, +100*ZZZ,100*ZZZ,-100*ZZZ, +-100*ZZZ,100*ZZZ,-100*ZZZ, +-100*ZZZ,-100*ZZZ,100*ZZZ, +100*ZZZ,-100*ZZZ,100*ZZZ, +100*ZZZ,100*ZZZ,100*ZZZ, +-100*ZZZ,100*ZZZ,100*ZZZ, +0*ZZZ,0*ZZZ,-170*ZZZ, +0*ZZZ,0*ZZZ,170*ZZZ, +170*ZZZ,0*ZZZ,0*ZZZ, +-170*ZZZ,0*ZZZ,0*ZZZ, +0*ZZZ,170*ZZZ,0*ZZZ, +0*ZZZ,-170*ZZZ,0*ZZZ}; +long pointsb[64]={14, +-60*QQQ,-60*QQQ,-60*QQQ, +60*QQQ,-60*QQQ,-60*QQQ, +60*QQQ,60*QQQ,-60*QQQ, +-60*QQQ,60*QQQ,-60*QQQ, +-60*QQQ,-60*QQQ,60*QQQ, +60*QQQ,-60*QQQ,60*QQQ, +60*QQQ,60*QQQ,60*QQQ, +-60*QQQ,60*QQQ,60*QQQ, +0,0,-105*QQQ, +0,0,105*QQQ, +105*QQQ,0,0, +-105*QQQ,0,0, +0,105*QQQ,0, +0,-105*QQQ,0}; +long points2[256]; +long points2b[256]; +int points3[256*2]; +int edges[64]={12,0, +0,1,0,0, +1,2,0,0, +2,3,0,0, +3,0,0,0, +4,5,0,0, // 4 +5,6,0,0, +6,7,0,0, +7,4,0,0, +0,4,0,0, // 8 +1,5,0,0, +2,6,0,0, +3,7,0,0}; +int edges2[64]; +int polys[64]={ +4,0x4010,0,1,2,3, +4,0x4008,0,8,4,9, +4,0x4010,1,9,5,10, +4,0x4020,2,10,6,11, +4,0x4040,3,11,7,12, +4,0x4080,4,5,6,7, +0}; + +int epolys[]={ +3,0x4002,0,1,8, +3,0x4004,1,2,8, +3,0x4006,2,3,8, +3,0x4008,3,0,8, + +3,0x400a,2,1,10, +3,0x400c,1,5,10, +3,0x400e,5,6,10, +3,0x4010,6,2,10, + +3,0x4012,2,6,12, +3,0x4014,6,7,12, +3,0x4016,7,3,12, +3,0x4018,3,2,12, + +3,0x401a,0,3,11, +3,0x401c,3,7,11, +3,0x401e,7,4,11, +3,0x4020,4,0,11, + +3,0x4022,5,1,13, +3,0x4024,1,0,13, +3,0x4026,0,4,13, +3,0x4028,4,5,13, + +3,0x402a,5,4,9, +3,0x402c,4,7,9, +3,0x402e,7,6,9, +3,0x4030,6,5,9, + +0}; + +int epolysb[]={ +3,0x4004,0,1,8, +3,0x4002,1,2,8, +3,0x4004,2,3,8, +3,0x4002,3,0,8, + +3,0x4004,2,1,10, +3,0x4002,1,5,10, +3,0x4004,5,6,10, +3,0x4002,6,2,10, + +3,0x4004,2,6,12, +3,0x4002,6,7,12, +3,0x4004,7,3,12, +3,0x4002,3,2,12, + +3,0x4004,0,3,11, +3,0x4002,3,7,11, +3,0x4004,7,4,11, +3,0x4002,4,0,11, + +3,0x4004,5,1,13, +3,0x4002,1,0,13, +3,0x4004,0,4,13, +3,0x4002,4,5,13, + +3,0x4004,5,4,9, +3,0x4002,4,7,9, +3,0x4004,7,6,9, +3,0x4002,6,5,9, + +0}; +int polylist[256]; +int matrix[9]; + +extern char backpal[16*3]; +char pal[768]; + +int testlist[]={ +3,16, 190,100, 90,50, 110,150, +3,20, 10,100, 90,50, 99,150, +0}; + +void waitb(void) +{ + while(!(inp(0x3da)&8)); + while((inp(0x3da)&8)); +} + +main() +{ + int a,b,c,x,y,rx,ry,rz,n=8,p1,p2,r,g,zpos=7000,y1,y2,rya,ypos,yposa; + int ya,yy,boingm=6,boingd=7; + int jello=0,jelloa=0; + int xscale=120,yscale=120,zscale=120,bscale=0; + int repeat; + int oxp=0,oyp=0,ozp=0; + int oxb=0,oyb=0,ozb=0; + int pdy; + int frame=0; + char *ps,*pd; + unsigned int u; + + dis_partstart(); + + /* + _asm mov ax,3 + _asm int 10h + while(!kbhit()) printf("musplus: %i\n",dis_musplus()); + */ + + /* + _asm mov ax,13h + _asm int 10h + for(x=0;x<320;x++) + { + for(y=0;y<200;y++) + { + if(x<50 || y<30 || x>270 || y>170) a=15; + else a=(x&63)+(y&63); + vram[x+y*320]=a; + } + } + */ + + while(!kbhit() && dis_musplus()<-20) ; + dis_setmframe(0); + + zoomer2(); + + memset(vram+32000,0,32768); + _asm + { + mov ax,13h + int 010h + } + for(y=0;y<=200;y++) + { + if(y>=130 && y<=137) memset(vram+y*320,7,320); + else memset(vram+y*320,0,320); + } + testasm(); + + for(a=0;a<100;a++) + { + fcrow[a]=fc+768+16+a*320; + } + for(a=0;a<16;a++) + { + fcrow2[a]=fc+768+16+a*320+100*320; + } + + outp(0x3c8,0); + for(a=0;a<16*3;a++) outp(0x3c9,fc[a+16]); + yy=0; ya=0; + while(!kbhit()) + { + ya++; yy+=ya; + if(yy>48*16) + { + yy-=ya; + ya=-ya*2/3; + if(ya>-4 && ya<4) break; + } + y=yy/16; + y1=130+y/2; + y2=130+y*3/2; + if(y2!=y1) b=25600/(y2-y1); + pd=vram+(y1-4)*320; pdy=y1; + for(ry=y1-4;ry199) continue; + memset(pd,0,320); + } + for(c=0,ry=y1;ry199) continue; + memcpy(pd,fcrow[c/256],320); + } + for(c=0;c<16;c++,pd+=320,ry++) + { + if(ry>199) continue; + if(c>7) memset(pd,0,320); + else memcpy(pd,fcrow2[c],320); + } + waitb(); + } + + while(!kbhit() && dis_getmframe()<300); + dis_waitb(); + + //initnewgroup(); + outp(0x3c8,0); + for(a=0;a<16;a++) + { + ps=fc+0x10+a*3; + pd=backpal+a*3; + pd[0]=ps[0]; + pd[1]=ps[1]; + pd[2]=ps[2]; + } + for(a=0;a<256;a++) + { + if(a<16) b=a; + else + { + b=a&7; + } + r=backpal[b*3+0]; + g=backpal[b*3+1]; + b=backpal[b*3+2]; + if((a&8) && a>15) + { + r+=16; + g+=16; + b+=16; + } + if(r>63) r=63; + if(g>63) g=63; + if(b>63) b=63; + outp(0x3c9,r); + outp(0x3c9,g); + outp(0x3c9,b); + } + lightshift=9; + rx=ry=rz=0; + ypos=-9000; yposa=0; + dis_waitb(); + memcpy(bgpic,vram,64000); + + while(!kbhit() && dis_getmframe()<333); + dis_waitb(); + + memcpy(pal,backpal,16*3); + dis_partstart(); + while(frame<7000 && !dis_exit()) + { + a=dis_musplus(); if(a<0 && a>-16) break; + + /* + if(kbhit()) + { + a=getch(); + if(a==27) break; + if(a=='l') lightshift=2; + if(a=='+') zpos+=200; + if(a=='-') zpos-=200; + if(a=='<') lightshift--; + if(a=='>') lightshift++; + if(a=='t') asmtestmode=1; + if(a=='c') { if(zpos==3200) { lightshift=8; zpos=7000; } else { zpos=3200; lightshift=11; } } + if(a=='8') ry-=16; + if(a=='2') ry+=16; + if(a=='4') rz-=16; + if(a=='6') rz+=16; + } + */ + + //asm(); + //for(a=0;a<256;a++) vram[a]=a; + rx%=3*3600; ry%=3*3600; rz%=3*3600; + //if(rz==0) printf("."); + /* + a=0; + while(polylist[a]) + { + a+=polylist[a]*2+2; + } + polylist[a++]=4; + polylist[a++]=19; + polylist[a++]=160-60; polylist[a++]=100-40; + polylist[a++]=160+60; polylist[a++]=100-40; + polylist[a++]=160+60; polylist[a++]=100+40; + polylist[a++]=160-60; polylist[a++]=100+40; + polylist[a++]=0; + */ + cglenzinit(); + + //setborder(0); + repeat=dis_waitb(); + //setborder(1); + + if(frame>1280+789) + { + outp(0x3c8,0); + for(a=0;a<16*3;a++) outp(0x3c9,pal[a]); + b=1280+789+64-frame; + if(b<0) b=0; + for(a=0;a<16*3;a++) pal[a]=backpal[a]*b/64; + } + else if(frame>700) + { + if(frame<765) + { + outp(0x3c8,0); + for(a=0;a<16*3;a++) outp(0x3c9,pal[a]); + b=764-frame; + if(b<0) b=0; + for(a=0;a<16*3;a++) pal[a]=backpal[a]*b/64; + } + else if(frame<790) + { + y=150+(frame-765)*2; + memset(bgpic+y*320,0,640); + memset(vram+y*320,0,640); + if(frame>785) for(a=0;a<16;a++) + { + r=g=b=0; + if(a&1) + { + r+=10; + } + if(a&2) + { + r+=30; + } + if(a&4) + { + r+=20; + } + if(a&8) + { + r+=16; + g+=16; + b+=16; + } + if(r>63) r=63; + if(g>63) g=63; + if(b>63) b=63; + backpal[a*3+0]=r; + backpal[a*3+1]=g; + backpal[a*3+2]=b; + } + memcpy(pal,backpal,16*3); + } + else if(frame<795) + { + outp(0x3c8,0); + for(a=0;a<16*3;a++) outp(0x3c9,backpal[a]); + } + } + + while(repeat--) + { + frame++; + rx+=32; ry+=7; + + if(frame>900) + { + a=frame-900; + b=frame-900; if(b>50) b=50; + oxp=sin1024[(a*3)&1023]*b/10; + oyp=sin1024[(a*5)&1023]*b/10; + ozp=(sin1024[(a*4)&1023]+128)*b/16; + oxb=-sin1024[(a*1)&1023]; + oyb=-sin1024[(a*2)&1023]; + ozb=-(sin1024[(a*3)&1023]+128); + } + + if(frame>800) + { + if(frame>1220+789) + { + if(xscale>0) xscale-=1; + if(yscale>0) yscale-=1; + if(zscale>0) zscale-=1; + } + else if(frame>1400+789) + { + if(bscale>0) bscale-=8; + if(bscale<0) bscale=0; + } + else + { + if(bscale<190) bscale+=2; + } + if(bscale>xscale) lightshift=10; + } + else + { + if(frame<640+60) + { + yposa+=15; + ypos+=yposa/20; + if(ypos>-300) + { + ypos-=yposa/20; + yposa=-yposa*boingm/boingd; + boingm+=2; boingd++; + //jelloa=500; + } + if(ypos>-900 && yposa>0) + { + jello=(ypos+900)*5/3; + jelloa=0; + } + } + else + { + if(ypos>-2800) ypos-=16; + else if(ypos<-2800) ypos+=16; + } + yscale=xscale=120+jello/30; + zscale=120-jello/30; + a=jello; + jello+=jelloa; + if((a<0 && jello>0) || (a>0 && jello<0)) + { + jelloa=jelloa*5/6; + } + a=jello/20; + jelloa-=a; + } + } + + + /* + cmatrix_yxz(rx,ry,rz,matrix); + csetmatrix(matrix,0,ypos+1500,zpos); + points2[0]=0; crotlist(points2,points); + */ + if(xscale>4) + { + demomode[0]=demomode[1]; + cmatrix_yxz(rx,ry,rz,matrix); + csetmatrix(matrix,0,0,0); + points2b[0]=0; crotlist(points2b,points); + matrix[0]=xscale*64; + matrix[1]=0; + matrix[2]=0; + matrix[3]=0; + matrix[4]=yscale*64; + matrix[5]=0; + matrix[6]=0; + matrix[7]=0; + matrix[8]=zscale*64; + csetmatrix(matrix,0+oxp,ypos+1500+oyp,zpos+ozp); + points2[0]=0; crotlist(points2,points2b); + if(frame<800) ccliplist(points2); + points3[0]=0; cprojlist((long *)points3,points2); + ceasypolylist(polylist,epolys,points3); + cglenzpolylist(polylist); + } + + if(frame>800) + { + demomode[0]=demomode[2]; + cmatrix_yxz(3600-rx/3,3600-ry/3,3600-rz/3,matrix); + csetmatrix(matrix,0,0,0); + points2b[0]=0; crotlist(points2b,pointsb); + matrix[0]=bscale*64; + matrix[1]=0; + matrix[2]=0; + matrix[3]=0; + matrix[4]=bscale*64; + matrix[5]=0; + matrix[6]=0; + matrix[7]=0; + matrix[8]=bscale*64; + csetmatrix(matrix,0+oxb,ypos+1500+oyb,zpos+ozb); + points2[0]=0; crotlist(points2,points2b); + points3[0]=0; cprojlist((long *)points3,points2); + ceasypolylist(polylist,epolysb,points3); + cglenzpolylist(polylist); + } + + cglenzdone(); + #if 0 + n=edges[0]; + for(a=2,b=0;b +#include +#include +#include +#include +#include "..\dis\dis.h" + +extern int sin1024[]; + +extern void zoomer1(char *pic); + +char bgpic[65535]; + +extern char fc[]; +char *fcrow[100]; +char *fcrow2[16]; + +char far *vram=(char far *)0xa0000000L; + +extern char lightshift; + +extern int _ndebug1; + +extern char asmtestmode; + +extern int csetmatrix(int *,long,long,long); +extern int crotlist(long *,long *); +extern int cclipedges(int *,int *,long *); // modifies given point list +extern int cprojlist(long *,long *); +extern int ccliplist(long *); +extern int cdrawpolylist(int *); +extern int cmatrix_yxz(int,int,int,int *); +extern int cpolylist(int *polylist,int *polys,int *edges,long *points3); +extern int ceasypolylist(int *polylist,int *polys,long *points3); + +extern int demomode[]; + +long cubepoints[]={8, +-999,-999,-999, +999,-999,-999, +999,999,-999, +-999,999,-999, +-999,-999,999, +999,-999,999, +999,999,999, +-999,999,999 +}; +int cubeepolys[]={ +4,0x4002,0,1,2,3, +4,0x4004,4,5,6,7, +4,0x4008,0,1,5,4, +4,0x4006,1,2,6,5, +4,0x400c,2,3,7,6, +4,0x400a,3,0,4,7, +0}; + +#define ZZZ 50 +#define QQQ 99 + +long points[64]={14, +-100*ZZZ,-100*ZZZ,-100*ZZZ, +100*ZZZ,-100*ZZZ,-100*ZZZ, +100*ZZZ,100*ZZZ,-100*ZZZ, +-100*ZZZ,100*ZZZ,-100*ZZZ, +-100*ZZZ,-100*ZZZ,100*ZZZ, +100*ZZZ,-100*ZZZ,100*ZZZ, +100*ZZZ,100*ZZZ,100*ZZZ, +-100*ZZZ,100*ZZZ,100*ZZZ, +0*ZZZ,0*ZZZ,-170*ZZZ, +0*ZZZ,0*ZZZ,170*ZZZ, +170*ZZZ,0*ZZZ,0*ZZZ, +-170*ZZZ,0*ZZZ,0*ZZZ, +0*ZZZ,170*ZZZ,0*ZZZ, +0*ZZZ,-170*ZZZ,0*ZZZ}; +long points1[64]={14, +-100*ZZZ,-100*ZZZ,-100*ZZZ, +100*ZZZ,-100*ZZZ,-100*ZZZ, +100*ZZZ,100*ZZZ,-100*ZZZ, +-100*ZZZ,100*ZZZ,-100*ZZZ, +-100*ZZZ,-100*ZZZ,100*ZZZ, +100*ZZZ,-100*ZZZ,100*ZZZ, +100*ZZZ,100*ZZZ,100*ZZZ, +-100*ZZZ,100*ZZZ,100*ZZZ, +0*ZZZ,0*ZZZ,-170*ZZZ, +0*ZZZ,0*ZZZ,170*ZZZ, +170*ZZZ,0*ZZZ,0*ZZZ, +-170*ZZZ,0*ZZZ,0*ZZZ, +0*ZZZ,170*ZZZ,0*ZZZ, +0*ZZZ,-170*ZZZ,0*ZZZ}; +long points9[64]={14, +-111*ZZZ,-111*ZZZ,-111*ZZZ, +111*ZZZ,-111*ZZZ,-111*ZZZ, +111*ZZZ,111*ZZZ,-111*ZZZ, +-111*ZZZ,111*ZZZ,-111*ZZZ, +-111*ZZZ,-111*ZZZ,111*ZZZ, +111*ZZZ,-111*ZZZ,111*ZZZ, +111*ZZZ,111*ZZZ,111*ZZZ, +-111*ZZZ,111*ZZZ,111*ZZZ, +0*ZZZ,0*ZZZ,-122*ZZZ, +0*ZZZ,0*ZZZ,144*ZZZ, +122*ZZZ,0*ZZZ,0*ZZZ, +-144*ZZZ,0*ZZZ,0*ZZZ, +0*ZZZ,122*ZZZ,0*ZZZ, +0*ZZZ,-144*ZZZ,0*ZZZ}; +long points8[64]={14, +-140*ZZZ,-140*ZZZ,-140*ZZZ, +140*ZZZ,-140*ZZZ,-140*ZZZ, +140*ZZZ,140*ZZZ,-140*ZZZ, +-140*ZZZ,140*ZZZ,-140*ZZZ, +-140*ZZZ,-140*ZZZ,140*ZZZ, +140*ZZZ,-140*ZZZ,140*ZZZ, +140*ZZZ,140*ZZZ,140*ZZZ, +-140*ZZZ,140*ZZZ,140*ZZZ, +0*ZZZ,0*ZZZ,-140*ZZZ, +0*ZZZ,0*ZZZ,140*ZZZ, +190*ZZZ,0*ZZZ,0*ZZZ, +-190*ZZZ,0*ZZZ,0*ZZZ, +0*ZZZ,140*ZZZ,0*ZZZ, +0*ZZZ,-140*ZZZ,0*ZZZ}; +long points7[64]={14, +-100*ZZZ,-100*ZZZ,-100*ZZZ, +100*ZZZ,-100*ZZZ,-100*ZZZ, +100*ZZZ,100*ZZZ,-100*ZZZ, +-100*ZZZ,100*ZZZ,-100*ZZZ, +-100*ZZZ,-100*ZZZ,100*ZZZ, +100*ZZZ,-100*ZZZ,100*ZZZ, +100*ZZZ,100*ZZZ,100*ZZZ, +-100*ZZZ,100*ZZZ,100*ZZZ, +0*ZZZ,0*ZZZ,-170*ZZZ, +0*ZZZ,0*ZZZ,170*ZZZ, +170*ZZZ,0*ZZZ,0*ZZZ, +-170*ZZZ,0*ZZZ,0*ZZZ, +0*ZZZ,170*ZZZ,0*ZZZ, +0*ZZZ,-170*ZZZ,0*ZZZ}; +long pointsb[64]={14, +-60*QQQ,-60*QQQ,-60*QQQ, +60*QQQ,-60*QQQ,-60*QQQ, +60*QQQ,60*QQQ,-60*QQQ, +-60*QQQ,60*QQQ,-60*QQQ, +-60*QQQ,-60*QQQ,60*QQQ, +60*QQQ,-60*QQQ,60*QQQ, +60*QQQ,60*QQQ,60*QQQ, +-60*QQQ,60*QQQ,60*QQQ, +0,0,-105*QQQ, +0,0,105*QQQ, +105*QQQ,0,0, +-105*QQQ,0,0, +0,105*QQQ,0, +0,-105*QQQ,0}; +long points2[256]; +long points2b[256]; +int points3[256*2]; +int edges[64]={12,0, +0,1,0,0, +1,2,0,0, +2,3,0,0, +3,0,0,0, +4,5,0,0, // 4 +5,6,0,0, +6,7,0,0, +7,4,0,0, +0,4,0,0, // 8 +1,5,0,0, +2,6,0,0, +3,7,0,0}; +int edges2[64]; +int polys[64]={ +4,0x4010,0,1,2,3, +4,0x4008,0,8,4,9, +4,0x4010,1,9,5,10, +4,0x4020,2,10,6,11, +4,0x4040,3,11,7,12, +4,0x4080,4,5,6,7, +0}; + +int epolys[]={ +3,0x4002,0,1,8, +3,0x4004,1,2,8, +3,0x4006,2,3,8, +3,0x4008,3,0,8, + +3,0x400a,2,1,10, +3,0x400c,1,5,10, +3,0x400e,5,6,10, +3,0x4010,6,2,10, + +3,0x4012,2,6,12, +3,0x4014,6,7,12, +3,0x4016,7,3,12, +3,0x4018,3,2,12, + +3,0x401a,0,3,11, +3,0x401c,3,7,11, +3,0x401e,7,4,11, +3,0x4020,4,0,11, + +3,0x4022,5,1,13, +3,0x4024,1,0,13, +3,0x4026,0,4,13, +3,0x4028,4,5,13, + +3,0x402a,5,4,9, +3,0x402c,4,7,9, +3,0x402e,7,6,9, +3,0x4030,6,5,9, + +0}; + +int epolysb[]={ +3,0x4004,0,1,8, +3,0x4002,1,2,8, +3,0x4004,2,3,8, +3,0x4002,3,0,8, + +3,0x4004,2,1,10, +3,0x4002,1,5,10, +3,0x4004,5,6,10, +3,0x4002,6,2,10, + +3,0x4004,2,6,12, +3,0x4002,6,7,12, +3,0x4004,7,3,12, +3,0x4002,3,2,12, + +3,0x4004,0,3,11, +3,0x4002,3,7,11, +3,0x4004,7,4,11, +3,0x4002,4,0,11, + +3,0x4004,5,1,13, +3,0x4002,1,0,13, +3,0x4004,0,4,13, +3,0x4002,4,5,13, + +3,0x4004,5,4,9, +3,0x4002,4,7,9, +3,0x4004,7,6,9, +3,0x4002,6,5,9, + +0}; +int polylist[256]; +int matrix[9]; + +extern char backpal[16*3]; +char pal[768]; + +int testlist[]={ +3,16, 190,100, 90,50, 110,150, +3,20, 10,100, 90,50, 99,150, +0}; + +void waitb(void) +{ + while(!(inp(0x3da)&8)); + while((inp(0x3da)&8)); +} + +char tmppal[768]; + +int repeat=0; +int frame=0; + +#pragma check_stack(off) +void _loadds copper(void) +{ + int a; + repeat++; + outp(0x3c8,0); + for(a=0;a<16*3;a++) outp(0x3c9,pal[a]); +} +#pragma check_stack(on) + +main() +{ + int a,b,c,x,y,rx,ry,rz,n=8,p1,p2,r,g,zpos=7500,y1,y2,rya,ypos,yposa; + int ya,yy,boingm=6,boingd=7; + int jello=0,jelloa=0,bigjello=0,bigjelloa=0; + int xscale=120,yscale=120,zscale=120,bscale=0; + int oxp=0,oyp=0,ozp=0; + int oxb=0,oyb=0,ozb=0; + int bscaleflag=0; + int repec; + int pdy; + int lasta=-1; + char *ps,*pd,*pp; + unsigned int u; + + dis_partstart(); + + while(!dis_exit() && dis_musplus()<-19) ; + dis_setmframe(0); + + zoomer2(); + + _asm mov dx,3c4h + _asm mov ax,0f02h + _asm out dx,ax + memset(vram,0,65535); + _asm + { + mov ax,13h + int 010h + } + testasm(); + + for(a=0;a<100;a++) + { + fcrow[a]=fc+768+16+a*320; + } + for(a=0;a<16;a++) + { + fcrow2[a]=fc+768+16+a*320+100*320; + } + + outp(0x3c8,0); + for(a=0;a<768;a++) outp(0x3c9,0); + outp(0x3c8,0); + for(a=0;a<16*3;a++) outp(0x3c9,fc[a+16]); + yy=0; ya=0; + while(!dis_exit()) + { + ya++; yy+=ya; + if(yy>48*16) + { + yy-=ya; + ya=-ya*2/3; + if(ya>-4 && ya<4) break; + } + y=yy/16; + y1=130+y/2; + y2=130+y*3/2; + if(y2!=y1) b=25600/(y2-y1); + pd=vram+(y1-4)*320; pdy=y1; + for(ry=y1-4;ry199) continue; + memset(pd,0,320); + } + for(c=0,ry=y1;ry199) continue; + memcpy(pd,fcrow[c/256],320); + } + for(c=0;c<16;c++,pd+=320,ry++) + { + if(ry>199) continue; + if(c>7) memset(pd,0,320); + else memcpy(pd,fcrow2[c],320); + } + waitb(); + } + + while(!dis_exit() && dis_getmframe()<300); + dis_waitb(); + + //initnewgroup(); + for(a=0;a<16;a++) + { + ps=fc+0x10+a*3; + pd=backpal+a*3; + pd[0]=ps[0]; + pd[1]=ps[1]; + pd[2]=ps[2]; + } + pp=tmppal; + for(a=0;a<256;a++) + { + if(a<16) b=a; + else + { + b=a&7; + } + r=backpal[b*3+0]; + g=backpal[b*3+1]; + b=backpal[b*3+2]; + if((a&8) && a>15) + { + r+=16; + g+=16; + b+=16; + } + if(r>63) r=63; + if(g>63) g=63; + if(b>63) b=63; + *pp++=r; + *pp++=g; + *pp++=b; + } + outp(0x3c8,0); + for(a=0;a<768;a++) + { + outp(0x3c9,tmppal[a]); + } + lightshift=9; + rx=ry=rz=0; + ypos=-9000; yposa=0; + dis_waitb(); + memcpy(bgpic,vram,64000); + + while(!dis_exit() && dis_getmframe()<333); + + memcpy(pal,backpal,16*3); + dis_partstart(); + dis_waitb(); + + outp(0x3c7,0); + for(a=0;a<16*3;a++) pal[a]=inp(0x3c9); + dis_setcopper(0,copper); + while(frame<7000 && !dis_exit()) + { + a=dis_musplus(); if(a<0 && a>-16) break; + + repeat=dis_waitb(); + outp(0x3c8,0); + for(a=0;a<16*3;a++) outp(0x3c9,pal[a]); + + while(repeat--) + { + frame++; + rx+=32; ry+=7; + rx%=3*3600; ry%=3*3600; rz%=3*3600; + + if(frame>900) + { + b=frame-900; + /* + if(b<=256) + { + c=256-b; + for(a=1;a<14*3+1;a++) + { + points[a]=(points1[a]*c+points9[a]*b)/256L; + } + } + else if(b<=512) + { + b-=256; + c=256-b; + for(a=1;a<14*3+1;a++) + { + points[a]=(points9[a]*c+points8[a]*b)/256L; + } + } + else if(b<=768) + { + b-=512; + c=256-b; + for(a=1;a<14*3+1;a++) + { + points[a]=(points8[a]*c+points7[a]*b)/256L; + } + } + */ + a=frame-900; + b=frame-900; if(b>50) b=50; + oxp=sin1024[(a*3)&1023]*b/10; + oyp=sin1024[(a*5)&1023]*b/10; + ozp=(sin1024[(a*4)&1023]/2+128)*b/16; + if(frame>1800) + { + a=frame-1800+64; + if(a>1024) a=1024; + oxb=(long)(-sin1024[(a*6)&1023])*(long)a/40L; + oyb=(long)(-sin1024[(a*7)&1023])*(long)a/40L; + ozb=(long)(sin1024[(a*8)&1023]+128)*(long)a/40L; + } + else + { + oxb=-sin1024[(a*6)&1023]; + oyb=-sin1024[(a*7)&1023]; + ozb=sin1024[(a*8)&1023]+128; + } + b=1800-frame; + if(b<0) + { + if(b<-99) b=-99; + oyp-=b*b/2; + } + } + + if(frame>800) + { + if(frame>1220+789) + { + if(xscale>0) xscale-=1; + if(yscale>0) yscale-=1; + if(zscale>0) zscale-=1; + if(bscale>0) bscale-=1; + } + else if(frame>1400+789) + { + if(bscale>0) bscale-=8; + if(bscale<0) bscale=0; + } + else + { + if(bscale<180) bscale+=2; + else bscale=180; + } + if(bscale>xscale) lightshift=10; + } + else + { + if(frame<640+70) + { + yposa+=31; + ypos+=yposa/40; + if(ypos>-300) + { + ypos-=yposa/40; + yposa=-yposa*boingm/boingd; + boingm+=2; boingd++; + //jelloa=500; + } + if(ypos>-900 && yposa>0) + { + jello=(ypos+900)*5/3; + jelloa=0; + } + } + else + { + if(ypos>-2800) ypos-=16; + else if(ypos<-2800) ypos+=16; + } + yscale=xscale=120+jello/30; + zscale=120-jello/30; + a=jello; + jello+=jelloa; + if((a<0 && jello>0) || (a>0 && jello<0)) + { + jelloa=jelloa*5/6; + } + a=jello/20; + jelloa-=a; + } + + if(frame>1280+789) + { + b=1280+789+64-frame; + if(b<0) b=0; + for(a=0;a<16*3;a++) pal[a]=backpal[a]*b/64; + } + else if(frame>700) + { + if(frame<765) + { + b=764-frame; + if(b<0) b=0; + for(a=0;a<16*3;a++) pal[a]=backpal[a]*b/64; + } + else if(frame<790) + { + y=150+(frame-765)*2; + memset(bgpic+y*320,0,640); + memset(vram+y*320,0,640); + if(frame>785) for(a=0;a<16;a++) + { + r=g=b=0; + if(a&1) + { + r+=10; + } + if(a&2) + { + r+=30; + } + if(a&4) + { + r+=20; + } + if(a&8) + { + r+=16; + g+=16; + b+=16; + } + if(r>63) r=63; + if(g>63) g=63; + if(b>63) b=63; + backpal[a*3+0]=r; + backpal[a*3+1]=g; + backpal[a*3+2]=b; + } + } + else if(frame<795) + { + memcpy(pal,backpal,16*3); + } + } + } + + cglenzinit(); + + if(xscale>4) + { + demomode[0]=demomode[1]; + cmatrix_yxz(rx,ry,rz,matrix); + csetmatrix(matrix,0,0,0); + points2b[0]=0; crotlist(points2b,points); + matrix[0]=xscale*64; + matrix[1]=0; + matrix[2]=0; + matrix[3]=0; + matrix[4]=yscale*64; + matrix[5]=0; + matrix[6]=0; + matrix[7]=0; + matrix[8]=zscale*64; + csetmatrix(matrix,0+oxp,ypos+1500+oyp,zpos+ozp); + points2[0]=0; crotlist(points2,points2b); + if(frame<800) ccliplist(points2); + points3[0]=0; cprojlist((long *)points3,points2); + ceasypolylist(polylist,epolys,points3); + cglenzpolylist(polylist); + } + + if(frame>800 && bscale>4) + { + demomode[0]=demomode[2]; + cmatrix_yxz(3600-rx/3,3600-ry/3,3600-rz/3,matrix); + csetmatrix(matrix,0,0,0); + points2b[0]=0; crotlist(points2b,pointsb); + matrix[0]=bscale*64; + matrix[1]=0; + matrix[2]=0; + matrix[3]=0; + matrix[4]=bscale*64; + matrix[5]=0; + matrix[6]=0; + matrix[7]=0; + matrix[8]=bscale*64; + csetmatrix(matrix,0+oxb,ypos+1500+oyb,zpos+ozb); + points2[0]=0; crotlist(points2,points2b); + points3[0]=0; cprojlist((long *)points3,points2); + ceasypolylist(polylist,epolysb,points3); + cglenzpolylist(polylist); + } + + cglenzdone(); + } + dis_setcopper(0,NULL); + if(!dis_indemo()) + { + _asm mov ax,3 + _asm int 10h + } +} diff --git a/GLENZ/MAIN.OBJ b/GLENZ/MAIN.OBJ new file mode 100644 index 0000000..4183e0d Binary files /dev/null and b/GLENZ/MAIN.OBJ differ diff --git a/GLENZ/MAIN.S b/GLENZ/MAIN.S new file mode 100644 index 0000000..01f24f8 --- /dev/null +++ b/GLENZ/MAIN.S @@ -0,0 +1,531 @@ +#include +#include +#include +#include +#include +#include "..\dis\dis.h" + +extern int sin1024[]; + +extern void zoomer1(char *pic); + +char bgpic[65535]; + +extern char fc[]; +char *fcrow[100]; +char *fcrow2[16]; + +char far *vram=(char far *)0xa0000000L; + +extern char lightshift; + +extern int _ndebug1; + +extern char asmtestmode; + +extern int csetmatrix(int *,long,long,long); +extern int crotlist(long *,long *); +extern int cclipedges(int *,int *,long *); // modifies given point list +extern int cprojlist(long *,long *); +extern int ccliplist(long *); +extern int cdrawpolylist(int *); +extern int cmatrix_yxz(int,int,int,int *); +extern int cpolylist(int *polylist,int *polys,int *edges,long *points3); +extern int ceasypolylist(int *polylist,int *polys,long *points3); + +extern int demomode[]; + +long cubepoints[]={8, +-999,-999,-999, +999,-999,-999, +999,999,-999, +-999,999,-999, +-999,-999,999, +999,-999,999, +999,999,999, +-999,999,999 +}; +int cubeepolys[]={ +4,0x4002,0,1,2,3, +4,0x4004,4,5,6,7, +4,0x4008,0,1,5,4, +4,0x4006,1,2,6,5, +4,0x400c,2,3,7,6, +4,0x400a,3,0,4,7, +0}; + +#define ZZZ 50 +#define QQQ 99 + +long points[64]={14, +-100*ZZZ,-100*ZZZ,-100*ZZZ, +100*ZZZ,-100*ZZZ,-100*ZZZ, +100*ZZZ,100*ZZZ,-100*ZZZ, +-100*ZZZ,100*ZZZ,-100*ZZZ, +-100*ZZZ,-100*ZZZ,100*ZZZ, +100*ZZZ,-100*ZZZ,100*ZZZ, +100*ZZZ,100*ZZZ,100*ZZZ, +-100*ZZZ,100*ZZZ,100*ZZZ, +0*ZZZ,0*ZZZ,-170*ZZZ, +0*ZZZ,0*ZZZ,170*ZZZ, +170*ZZZ,0*ZZZ,0*ZZZ, +-170*ZZZ,0*ZZZ,0*ZZZ, +0*ZZZ,170*ZZZ,0*ZZZ, +0*ZZZ,-170*ZZZ,0*ZZZ}; +long pointsb[64]={14, +-60*QQQ,-60*QQQ,-60*QQQ, +60*QQQ,-60*QQQ,-60*QQQ, +60*QQQ,60*QQQ,-60*QQQ, +-60*QQQ,60*QQQ,-60*QQQ, +-60*QQQ,-60*QQQ,60*QQQ, +60*QQQ,-60*QQQ,60*QQQ, +60*QQQ,60*QQQ,60*QQQ, +-60*QQQ,60*QQQ,60*QQQ, +0,0,-105*QQQ, +0,0,105*QQQ, +105*QQQ,0,0, +-105*QQQ,0,0, +0,105*QQQ,0, +0,-105*QQQ,0}; +long points2[256]; +long points2b[256]; +int points3[256*2]; +int edges[64]={12,0, +0,1,0,0, +1,2,0,0, +2,3,0,0, +3,0,0,0, +4,5,0,0, // 4 +5,6,0,0, +6,7,0,0, +7,4,0,0, +0,4,0,0, // 8 +1,5,0,0, +2,6,0,0, +3,7,0,0}; +int edges2[64]; +int polys[64]={ +4,0x4010,0,1,2,3, +4,0x4008,0,8,4,9, +4,0x4010,1,9,5,10, +4,0x4020,2,10,6,11, +4,0x4040,3,11,7,12, +4,0x4080,4,5,6,7, +0}; + +int epolys[]={ +3,0x4002,0,1,8, +3,0x4004,1,2,8, +3,0x4006,2,3,8, +3,0x4008,3,0,8, + +3,0x400a,2,1,10, +3,0x400c,1,5,10, +3,0x400e,5,6,10, +3,0x4010,6,2,10, + +3,0x4012,2,6,12, +3,0x4014,6,7,12, +3,0x4016,7,3,12, +3,0x4018,3,2,12, + +3,0x401a,0,3,11, +3,0x401c,3,7,11, +3,0x401e,7,4,11, +3,0x4020,4,0,11, + +3,0x4022,5,1,13, +3,0x4024,1,0,13, +3,0x4026,0,4,13, +3,0x4028,4,5,13, + +3,0x402a,5,4,9, +3,0x402c,4,7,9, +3,0x402e,7,6,9, +3,0x4030,6,5,9, + +0}; + +int epolysb[]={ +3,0x4004,0,1,8, +3,0x4002,1,2,8, +3,0x4004,2,3,8, +3,0x4002,3,0,8, + +3,0x4004,2,1,10, +3,0x4002,1,5,10, +3,0x4004,5,6,10, +3,0x4002,6,2,10, + +3,0x4004,2,6,12, +3,0x4002,6,7,12, +3,0x4004,7,3,12, +3,0x4002,3,2,12, + +3,0x4004,0,3,11, +3,0x4002,3,7,11, +3,0x4004,7,4,11, +3,0x4002,4,0,11, + +3,0x4004,5,1,13, +3,0x4002,1,0,13, +3,0x4004,0,4,13, +3,0x4002,4,5,13, + +3,0x4004,5,4,9, +3,0x4002,4,7,9, +3,0x4004,7,6,9, +3,0x4002,6,5,9, + +0}; +int polylist[256]; +int matrix[9]; + +extern char backpal[16*3]; +char pal[768]; + +int testlist[]={ +3,16, 190,100, 90,50, 110,150, +3,20, 10,100, 90,50, 99,150, +0}; + +void waitb(void) +{ + while(!(inp(0x3da)&8)); + while((inp(0x3da)&8)); +} + +int repeat=0; +int frame=0; + +#pragma check_stack(off) +void _loadds copper(void) +{ + int a; + repeat++; + outp(0x3c8,0); + for(a=0;a<16*3;a++) outp(0x3c9,pal[a]); +} +#pragma check_stack(on) + +main() +{ + int a,b,c,x,y,rx,ry,rz,n=8,p1,p2,r,g,zpos=7000,y1,y2,rya,ypos,yposa; + int ya,yy,boingm=6,boingd=7; + int jello=0,jelloa=0; + int xscale=120,yscale=120,zscale=120,bscale=0; + int oxp=0,oyp=0,ozp=0; + int oxb=0,oyb=0,ozb=0; + int repec; + int pdy; + char *ps,*pd; + unsigned int u; + + dis_partstart(); + + while(!kbhit() && dis_musplus()<-20) ; + dis_setmframe(0); + + zoomer2(); + + memset(vram+32000,0,32768); + _asm + { + mov ax,13h + int 010h + } + for(y=0;y<=200;y++) + { + if(y>=130 && y<=137) memset(vram+y*320,7,320); + else memset(vram+y*320,0,320); + } + testasm(); + + for(a=0;a<100;a++) + { + fcrow[a]=fc+768+16+a*320; + } + for(a=0;a<16;a++) + { + fcrow2[a]=fc+768+16+a*320+100*320; + } + + outp(0x3c8,0); + for(a=0;a<16*3;a++) outp(0x3c9,fc[a+16]); + yy=0; ya=0; + while(!kbhit()) + { + ya++; yy+=ya; + if(yy>48*16) + { + yy-=ya; + ya=-ya*2/3; + if(ya>-4 && ya<4) break; + } + y=yy/16; + y1=130+y/2; + y2=130+y*3/2; + if(y2!=y1) b=25600/(y2-y1); + pd=vram+(y1-4)*320; pdy=y1; + for(ry=y1-4;ry199) continue; + memset(pd,0,320); + } + for(c=0,ry=y1;ry199) continue; + memcpy(pd,fcrow[c/256],320); + } + for(c=0;c<16;c++,pd+=320,ry++) + { + if(ry>199) continue; + if(c>7) memset(pd,0,320); + else memcpy(pd,fcrow2[c],320); + } + waitb(); + } + + while(!kbhit() && dis_getmframe()<300); + dis_waitb(); + + //initnewgroup(); + outp(0x3c8,0); + for(a=0;a<16;a++) + { + ps=fc+0x10+a*3; + pd=backpal+a*3; + pd[0]=ps[0]; + pd[1]=ps[1]; + pd[2]=ps[2]; + } + for(a=0;a<256;a++) + { + if(a<16) b=a; + else + { + b=a&7; + } + r=backpal[b*3+0]; + g=backpal[b*3+1]; + b=backpal[b*3+2]; + if((a&8) && a>15) + { + r+=16; + g+=16; + b+=16; + } + if(r>63) r=63; + if(g>63) g=63; + if(b>63) b=63; + outp(0x3c9,r); + outp(0x3c9,g); + outp(0x3c9,b); + } + lightshift=9; + rx=ry=rz=0; + ypos=-9000; yposa=0; + dis_waitb(); + memcpy(bgpic,vram,64000); + + while(!kbhit() && dis_getmframe()<333); + + memcpy(pal,backpal,16*3); + dis_partstart(); + dis_waitb(); + + outp(0x3c7,0); + for(a=0;a<16*3;a++) pal[a]=inp(0x3c9); + dis_setcopper(0,copper); + while(frame<7000 && !dis_exit()) + { + a=dis_musplus(); if(a<0 && a>-16) break; + + //dis_waitb(); + //copper(); + + if(repeat) for(repec=repeat,repeat=0;repec;repec--) + { + frame++; + rx+=32; ry+=7; + rx%=3*3600; ry%=3*3600; rz%=3*3600; + + if(frame>900) + { + a=frame-900; + b=frame-900; if(b>50) b=50; + oxp=sin1024[(a*3)&1023]*b/10; + oyp=sin1024[(a*5)&1023]*b/10; + ozp=(sin1024[(a*4)&1023]+128)*b/16; + oxb=-sin1024[(a*1)&1023]; + oyb=-sin1024[(a*2)&1023]; + ozb=-(sin1024[(a*3)&1023]+128); + } + + if(frame>800) + { + if(frame>1220+789) + { + if(xscale>0) xscale-=1; + if(yscale>0) yscale-=1; + if(zscale>0) zscale-=1; + } + else if(frame>1400+789) + { + if(bscale>0) bscale-=8; + if(bscale<0) bscale=0; + } + else + { + if(bscale<190) bscale+=2; + } + if(bscale>xscale) lightshift=10; + } + else + { + if(frame<640+60) + { + yposa+=15; + ypos+=yposa/20; + if(ypos>-300) + { + ypos-=yposa/20; + yposa=-yposa*boingm/boingd; + boingm+=2; boingd++; + //jelloa=500; + } + if(ypos>-900 && yposa>0) + { + jello=(ypos+900)*5/3; + jelloa=0; + } + } + else + { + if(ypos>-2800) ypos-=16; + else if(ypos<-2800) ypos+=16; + } + yscale=xscale=120+jello/30; + zscale=120-jello/30; + a=jello; + jello+=jelloa; + if((a<0 && jello>0) || (a>0 && jello<0)) + { + jelloa=jelloa*5/6; + } + a=jello/20; + jelloa-=a; + } + + if(frame>1280+789) + { + b=1280+789+64-frame; + if(b<0) b=0; + for(a=0;a<16*3;a++) pal[a]=backpal[a]*b/64; + } + else if(frame>700) + { + if(frame<765) + { + b=764-frame; + if(b<0) b=0; + for(a=0;a<16*3;a++) pal[a]=backpal[a]*b/64; + } + else if(frame<790) + { + y=150+(frame-765)*2; + memset(bgpic+y*320,0,640); + memset(vram+y*320,0,640); + if(frame>785) for(a=0;a<16;a++) + { + r=g=b=0; + if(a&1) + { + r+=10; + } + if(a&2) + { + r+=30; + } + if(a&4) + { + r+=20; + } + if(a&8) + { + r+=16; + g+=16; + b+=16; + } + if(r>63) r=63; + if(g>63) g=63; + if(b>63) b=63; + backpal[a*3+0]=r; + backpal[a*3+1]=g; + backpal[a*3+2]=b; + } + memcpy(pal,backpal,16*3); + } + else if(frame<795) + { + memcpy(pal,backpal,16*3); + } + } + } + + cglenzinit(); + + if(xscale>4) + { + demomode[0]=demomode[1]; + cmatrix_yxz(rx,ry,rz,matrix); + csetmatrix(matrix,0,0,0); + points2b[0]=0; crotlist(points2b,points); + matrix[0]=xscale*64; + matrix[1]=0; + matrix[2]=0; + matrix[3]=0; + matrix[4]=yscale*64; + matrix[5]=0; + matrix[6]=0; + matrix[7]=0; + matrix[8]=zscale*64; + csetmatrix(matrix,0+oxp,ypos+1500+oyp,zpos+ozp); + points2[0]=0; crotlist(points2,points2b); + if(frame<800) ccliplist(points2); + points3[0]=0; cprojlist((long *)points3,points2); + ceasypolylist(polylist,epolys,points3); + cglenzpolylist(polylist); + } + + if(frame>800) + { + demomode[0]=demomode[2]; + cmatrix_yxz(3600-rx/3,3600-ry/3,3600-rz/3,matrix); + csetmatrix(matrix,0,0,0); + points2b[0]=0; crotlist(points2b,pointsb); + matrix[0]=bscale*64; + matrix[1]=0; + matrix[2]=0; + matrix[3]=0; + matrix[4]=bscale*64; + matrix[5]=0; + matrix[6]=0; + matrix[7]=0; + matrix[8]=bscale*64; + csetmatrix(matrix,0+oxb,ypos+1500+oyb,zpos+ozb); + points2[0]=0; crotlist(points2,points2b); + points3[0]=0; cprojlist((long *)points3,points2); + ceasypolylist(polylist,epolysb,points3); + cglenzpolylist(polylist); + } + + cglenzdone(); + } + dis_setcopper(0,NULL); + if(!dis_indemo()) + { + _asm mov ax,3 + _asm int 10h + } +} diff --git a/GLENZ/MAIN1.C b/GLENZ/MAIN1.C new file mode 100644 index 0000000..381fedd --- /dev/null +++ b/GLENZ/MAIN1.C @@ -0,0 +1,101 @@ +#include + +extern int csetmatrix(int *,long,long,long); +extern int crotlist(long *,long *); +extern int cclipedges(int *,int *,long *); // modifies given point list +extern int cprojlist(long *,long *); +extern int cdrawpolylist(int *); +extern int cmatrix_yxz(int,int,int,int *); +extern int cpolylist(int *polylist,int *polys,int *edges,long *points3); + +long points[32]={8, +-1000,-1000,-1000, +1000,-1000,-1000, +1000,1000,-1000, +-1000,1000,-1000, +-1000,-1000,1000, +1000,-1000,1000, +1000,1000,1000, +-1000,1000,1000}; +long points2[64]; +int points3[64*2]; +int edges[64]={12,0, +0,1,0,0, +1,2,0,0, +2,3,0,0, +3,0,0,0, +4,5,0,0, // 4 +5,6,0,0, +6,7,0,0, +7,4,0,0, +0,4,0,0, // 8 +1,5,0,0, +2,6,0,0, +3,7,0,0}; +int edges2[64]; +int polys[64]={ +4,0x0010,0,1,2,3, +4,0x0018,0,8,4,9, +4,0x0020,1,9,5,10, +4,0x0028,2,10,6,11, +4,0x0030,3,11,7,12, +4,0x8038,4,5,6,7, +0}; +int polylist[256]; +int matrix[9]; + +int testlist[]={ +3,16, 190,100, 90,50, 110,150, +3,20, 10,100, 90,50, 99,150, +0}; + +main() +{ + int a,b,c,x,y,rx,ry,rz,n=8,p1,p2; + printf("Starting"); + testasm(); + while(!kbhit()) + { + initnewgroup(); + rz+=5; ry+=7; rz+=6; + rx%=3600; ry%=3600; rz%=3600; + cmatrix_yxz(rx,ry,rz,matrix); + csetmatrix(matrix,0,0,4000); + points2[0]=0; crotlist(points2,points); + //cclipedges(edges2,edges,points2); + points3[0]=0; cprojlist(points3,points2); + cpolylist(polylist,polys,edges,points3); + asm(); + cdrawpolylist(polylist); + //cdrawpolylist(testlist); + setborder(40); + drawnewgroup(); + setborder(10); + #if 0 + n=edges[0]; + for(a=2,b=0;b + +extern int csetmatrix(int *,long,long,long); +extern int crotlist(long *,long *); +extern int cclipedges(int *,int *,long *); // modifies given point list +extern int cprojlist(long *,long *); +extern int cdrawpolylist(int *); +extern int cmatrix_yxz(int,int,int,int *); +extern int cpolylist(int *polylist,int *polys,int *edges,long *points3); + +long points[32]={8, +-1000,-1000,-1000, +1000,-1000,-1000, +1000,1000,-1000, +-1000,1000,-1000, +-1000,-1000,1000, +1000,-1000,1000, +1000,1000,1000, +-1000,1000,1000}; +long points2[64]; +int points3[64*2]; +int edges[64]={12,0, +0,1,0,0, +1,2,0,0, +2,3,0,0, +3,0,0,0, +4,5,0,0, // 4 +5,6,0,0, +6,7,0,0, +7,4,0,0, +0,4,0,0, // 8 +1,5,0,0, +2,6,0,0, +3,7,0,0}; +int edges2[64]; +int polys[64]={ +4,0x0010,0,1,2,3, +4,0x0018,0,8,4,9, +4,0x0020,1,9,5,10, +4,0x0028,2,10,6,11, +4,0x0030,3,11,7,12, +4,0x8038,4,5,6,7, +0}; +int polylist[256]; +int matrix[9]; + +int testlist[]={ +3,16, 190,100, 90,50, 110,150, +3,20, 10,100, 90,50, 99,150, +0}; + +main() +{ + int a,b,c,x,y,rx,ry,rz,n=8,p1,p2; + printf("Starting"); + testasm(); + initnewgroup(); + initnewgroup(); + while(!kbhit()) + { + initnewgroup(); + rz+=5; ry+=7; rz+=6; + rx%=3600; ry%=3600; rz%=3600; + cmatrix_yxz(rx,ry,rz,matrix); + csetmatrix(matrix,0,0,4000); + points2[0]=0; crotlist(points2,points); + //cclipedges(edges2,edges,points2); + points3[0]=0; cprojlist(points3,points2); + cpolylist(polylist,polys,edges,points3); + asm(); + cdrawpolylist(polylist); + //cdrawpolylist(testlist); + setborder(40); + drawnewgroup(); + setborder(10); + #if 0 + n=edges[0]; + for(a=2,b=0;b + +extern int csetmatrix(int *,long,long,long); +extern int crotlist(long *,long *); +extern int cclipedges(int *,int *,long *); // modifies given point list +extern int cprojlist(long *,long *); +extern int cdrawpolylist(int *); +extern int cmatrix_yxz(int,int,int,int *); +extern int cpolylist(int *polylist,int *polys,int *edges,long *points3); + +long points[32]={8, +-1000,-1000,-1000, +1000,-1000,-1000, +1000,1000,-1000, +-1000,1000,-1000, +-1000,-1000,1000, +1000,-1000,1000, +1000,1000,1000, +-1000,1000,1000}; +long points2[64]; +int points3[64*2]; +int edges[64]={12,0, +0,1,0,0, +1,2,0,0, +2,3,0,0, +3,0,0,0, +4,5,0,0, // 4 +5,6,0,0, +6,7,0,0, +7,4,0,0, +0,4,0,0, // 8 +1,5,0,0, +2,6,0,0, +3,7,0,0}; +int edges2[64]; +int polys[64]={ +4,0x4004,0,1,2,3, +4,0x4008,0,8,4,9, +4,0x4010,1,9,5,10, +4,0x4020,2,10,6,11, +4,0x4040,3,11,7,12, +4,0x4080,4,5,6,7, +0}; +int polylist[256]; +int matrix[9]; + +int testlist[]={ +3,16, 190,100, 90,50, 110,150, +3,20, 10,100, 90,50, 99,150, +0}; + +main() +{ + int a,b,c,x,y,rx,ry,rz,n=8,p1,p2; + printf("Starting"); + testasm(); + outp(0x3c8,0); + for(a=0;a<256;a++) + { + int r=0,g=0,b=0; + if(a&4) r+=30; + if(a&8) g+=30; + if(a&16) b+=30; + if(a&32) { r+=30; g+=30; } + if(a&64) { g+=30; b+=30; } + if(a&128) { b+=30; r+=30; } + outp(0x3c9,r); + outp(0x3c9,g); + outp(0x3c9,b); + } + while(!kbhit()) + { + initnewgroup(); + rz+=5; ry+=7; rz+=6; + rx%=3600; ry%=3600; rz%=3600; + cmatrix_yxz(rx,ry,rz,matrix); + csetmatrix(matrix,0,0,4000); + points2[0]=0; crotlist(points2,points); + //cclipedges(edges2,edges,points2); + points3[0]=0; cprojlist(points3,points2); + cpolylist(polylist,polys,edges,points3); + asm(); + cdrawpolylist(polylist); + //cdrawpolylist(testlist); + setborder(40); + drawnewgroup(); + setborder(10); + #if 0 + n=edges[0]; + for(a=2,b=0;b3600 + sub reg,3600 + jmp l0 +l2: ;<0 + add reg,3600 + jmp l0 +l1: ENDM + +public _cmatrix_yxz +_cmatrix_yxz PROC FAR + CBEG + movpar ds,4 + movpar si,3 + mov di,si + movpar ax,0 ;rotx + mov ds:[si+2],ax + movpar ax,1 ;roty + mov ds:[si+0],ax + movpar ax,2 ;rotz + mov ds:[si+4],ax + call calcmatrix + CEND +_cmatrix_yxz ENDP + +calcmatrix PROC NEAR ;rY*rX*rZ + ;ds:[si+0]=rotx + ;ds:[si+2]=roty + ;ds:[si+4]=rotz + ;dest: ds:[di] + ;load values, check 'em and calc sin/cos + ;ROT-X + mov bx,ds:[si] + checkdeg bx + mov ds:[si],bx + shl bx,1 + mov ax,cs:sintable16[bx] + mov cs:rxsin,ax + mov ax,cs:costable16[bx] + mov cs:rxcos,ax + ;ROT-Y + mov bx,ds:[si+2] + checkdeg bx + mov ds:[si+2],bx + shl bx,1 + mov ax,cs:sintable16[bx] + mov cs:rysin,ax + mov ax,cs:costable16[bx] + mov cs:rycos,ax + ;ROT-Z + mov bx,ds:[si+4] + checkdeg bx + mov ds:[si+4],bx + shl bx,1 + mov ax,cs:sintable16[bx] + mov cs:rzsin,ax + mov ax,cs:costable16[bx] + mov cs:rzcos,ax + + ;matrix equations: rY*rX*rZ + ; 0=Ycos*Zcos- 2=Xsin*Ysin*Zcos+ 4=-Xcos*Ysin + ; Xsin*Ysin*Zsin Ycos*Zsin + ; 6=-Xcos*Zsin 8=Xcos*Zcos 10=Xsin + ; + ;12=Xsin*Ycos*Zsin+ 14=Ysin*Zsin- 16=Xcos*Ycos + ; Ysin*Zcos Xsin*Ycos*Zcos\ + + mov ax,cs:rysin + imul cs:rzsin + shld dx,ax,1 + mov ds:[di+14],dx ;14a + + mov ax,cs:rycos + imul cs:rzcos + shld dx,ax,1 + mov ds:[di+0],dx ;0a + + mov ax,dx + imul cs:rxsin + shld dx,ax,1 + sub ds:[di+14],dx ;14b + + mov ax,cs:rxsin + imul cs:rysin + shld dx,ax,1 + mov cx,dx + + mov ax,cs:rzsin + imul dx + shld dx,ax,1 + sub ds:[di+0],dx ;0b + + mov ax,cs:rzcos + imul cx + shld dx,ax,1 + mov ds:[di+2],dx ;2a + + mov ax,cs:rycos + imul cs:rzsin + shld dx,ax,1 + add ds:[di+2],dx ;2b + + mov ax,cs:rxsin + imul dx + shld dx,ax,1 + mov ds:[di+12],dx ;12a + + mov ax,cs:rysin + imul cs:rzcos + shld dx,ax,1 + add ds:[di+12],dx ;12b + + mov ax,cs:rxcos + imul cs:rzsin + shld dx,ax,1 + neg dx + mov ds:[di+6],dx ;6 + + mov ax,cs:rxcos + imul cs:rzcos + shld dx,ax,1 + mov ds:[di+8],dx ;8 + + mov ax,cs:rxcos + imul cs:rysin + shld dx,ax,1 + neg dx + mov ds:[di+4],dx ;4 + + mov ax,cs:rxcos + imul cs:rycos + shld dx,ax,1 + mov ds:[di+16],dx ;16 + + mov ax,cs:rxsin + mov ds:[di+10],ax ;10 + + ret +calcmatrix ENDP + +calcmatrixsep PROC NEAR ;calc 3 separate matrices + ;ds:[si+0]=rotx + ;ds:[si+2]=roty + ;ds:[si+4]=rotz + ;dest: ds:[di] + ;load values, check 'em and calc sin/cos + ;ROT-X + mov bx,ds:[si] + checkdeg bx + mov ds:[si],bx + shl bx,1 + mov ax,cs:sintable16[bx] + mov cs:rxsin,ax + mov ax,cs:costable16[bx] + mov cs:rxcos,ax + ;ROT-Y + mov bx,ds:[si+2] + checkdeg bx + mov ds:[si+2],bx + shl bx,1 + mov ax,cs:sintable16[bx] + mov cs:rysin,ax + mov ax,cs:costable16[bx] + mov cs:rycos,ax + ;ROT-Z + mov bx,ds:[si+4] + checkdeg bx + mov ds:[si+4],bx + shl bx,1 + mov ax,cs:sintable16[bx] + mov cs:rzsin,ax + mov ax,cs:costable16[bx] + mov cs:rzcos,ax + mov bx,0 + mov cx,32767 + + ;rX + mov ds:[di+0],cx + mov ds:[di+2],bx + mov ds:[di+4],bx + mov ds:[di+6],bx + mov ax,cs:rxcos + mov ds:[di+8],ax + mov ax,cs:rxsin + mov ds:[di+10],ax + mov ds:[di+12],bx + mov ax,cs:rxsin + neg ax + mov ds:[di+14],ax + mov ax,cs:rxcos + mov ds:[di+16],ax + add di,18 + + ;rY + mov ax,cs:rycos + mov ds:[di+0],ax + mov ds:[di+2],bx + mov ax,cs:rysin + neg ax + mov ds:[di+4],ax + mov ds:[di+6],bx + mov ds:[di+8],cx + mov ds:[di+10],bx + mov ax,cs:rysin + mov ds:[di+12],ax + mov ds:[di+14],bx + mov ax,cs:rycos + mov ds:[di+16],ax + add di,18 + + ;rZ + mov ax,cs:rzcos + mov ds:[di+0],ax + mov ax,cs:rzsin + mov ds:[di+2],ax + mov ds:[di+4],bx + mov ax,cs:rzsin + neg ax + mov ds:[di+6],ax + mov ax,cs:rzcos + mov ds:[di+8],ax + mov ds:[di+10],bx + mov ds:[di+12],bx + mov ds:[di+14],bx + mov ds:[di+16],cx + add di,18 + + ret +calcmatrixsep ENDP + +calcmatrix0 PROC NEAR ;rX*rY*rZ + ;ds:[si]=rotx + ;ds:[si]=roty + ;ds:[si]=rotz + ;dest: ds:[di] + ;load values, check 'em and calc sin/cos + ;ROT-X + mov bx,ds:[si] + checkdeg bx + mov ds:[si],bx + shl bx,1 + mov ax,cs:sintable16[bx] + mov cs:rxsin,ax + mov ax,cs:costable16[bx] + mov cs:rxcos,ax + ;ROT-Y + mov bx,ds:[si+2] + checkdeg bx + mov ds:[si+2],bx + shl bx,1 + mov ax,cs:sintable16[bx] + mov cs:rysin,ax + mov ax,cs:costable16[bx] + mov cs:rycos,ax + ;ROT-Z + mov bx,ds:[si+4] + checkdeg bx + mov ds:[si+4],bx + shl bx,1 + mov ax,cs:sintable16[bx] + mov cs:rzsin,ax + mov ax,cs:costable16[bx] + mov cs:rzcos,ax + + ;matrix equations: rX*rY*rZ ;rZ*rY*rX + ; 0=Ycos*Zcos 2=Ycos*Zsin 4=-Ysin + ; 6=Xsin*Zcos*Ysin 8=Xsin*Ysin*Zsin 10=Ycos*Xsin + ; -Xcos*Zsin +Xcos*Zcos + ;12=Xcos*Zcos*Ysin 14=Xcos*Ysin*Zsin 16=Ycos*Xcos + ; +Xsin*Zsin -Xsin*Zcos + + ;calculate rotation matrix + ;0,2,10,16,4 + mov bx,cs:rycos + mov ax,cs:rzcos + imul bx + shld dx,ax,1 + mov ds:[di+0],dx + ; + mov ax,cs:rzsin + imul bx + shld dx,ax,1 + mov ds:[di+2],dx + ; + mov ax,cs:rxsin + imul bx + shld dx,ax,1 + mov ds:[di+10],dx + ; + mov ax,cs:rxcos + imul bx + shld dx,ax,1 + mov ds:[di+16],dx + ; + mov ax,cs:rysin + neg ax + mov ds:[di+4],ax + ;6,8 + mov ax,cs:rxsin + imul cs:rysin + shld dx,ax,1 + mov cx,dx + ; + mov ax,cx + imul cs:rzcos + shld dx,ax,1 + mov ds:[di+6],dx + ; + mov ax,cx + imul cs:rzsin + shld dx,ax,1 + mov ds:[di+8],dx + ; + mov bx,cs:rxcos + mov ax,cs:rzsin + imul bx + shld dx,ax,1 + sub ds:[di+6],dx + ; + mov ax,cs:rzcos + imul bx + shld dx,ax,1 + add ds:[di+8],dx + ;12,14 + mov ax,cs:rxcos + imul cs:rysin + shld dx,ax,1 + mov cx,dx + ; + mov ax,cx + imul cs:rzcos + shld dx,ax,1 + mov ds:[di+12],dx + ; + mov ax,cx + imul cs:rzsin + shld dx,ax,1 + mov ds:[di+14],dx + ; + mov bx,cs:rxsin + mov ax,cs:rzsin + imul bx + shld dx,ax,1 + add ds:[di+12],dx + ; + mov ax,cs:rzcos + imul bx + shld dx,ax,1 + sub ds:[di+14],dx + + ret +calcmatrix0 ENDP + +mulmacro MACRO row,col + mov ax,ds:[si+0+row*6] + imul word ptr es:[di+0+col*2] + mov cx,dx + mov bx,ax + mov ax,ds:[si+2+row*6] + imul word ptr es:[di+6+col*2] + add cx,dx + add bx,ax + mov ax,ds:[si+4+row*6] + imul word ptr es:[di+12+col*2] + add cx,dx + add bx,ax + shld cx,bx,1 + ENDM + +mulmatrices PROC NEAR + ;ds:si=matrix1,es:di=matrix2 => ds:si (overwrite) + mulmacro 0,0 + push cx + mulmacro 0,1 + push cx + mulmacro 0,2 + push cx + + mulmacro 1,0 + push cx + mulmacro 1,1 + push cx + mulmacro 1,2 + push cx + + mulmacro 2,0 + push cx + mulmacro 2,1 + push cx + mulmacro 2,2 + + mov ds:[si+4+12],cx + pop word ptr ds:[si+2+12] + pop word ptr ds:[si+0+12] + pop word ptr ds:[si+4+6] + pop word ptr ds:[si+2+6] + pop word ptr ds:[si+0+6] + pop word ptr ds:[si+4] + pop word ptr ds:[si+2] + pop word ptr ds:[si+0] + ret +mulmatrices ENDP + +text__math ENDS + END + \ No newline at end of file diff --git a/GLENZ/MATH.OBJ b/GLENZ/MATH.OBJ new file mode 100644 index 0000000..6cd4b87 Binary files /dev/null and b/GLENZ/MATH.OBJ differ diff --git a/GLENZ/MATHSIN.INC b/GLENZ/MATHSIN.INC new file mode 100644 index 0000000..654d1fd --- /dev/null +++ b/GLENZ/MATHSIN.INC @@ -0,0 +1,547 @@ +sintable16 LABEL WORD +dw 0, 57, 114, 172, 229, 286, 343, 400, 457, 515 +dw 572, 629, 686, 743, 801, 858, 915, 972, 1029, 1086 +dw 1144, 1201, 1258, 1315, 1372, 1429, 1486, 1544, 1601, 1658 +dw 1715, 1772, 1829, 1886, 1943, 2000, 2057, 2115, 2172, 2229 +dw 2286, 2343, 2400, 2457, 2514, 2571, 2628, 2685, 2742, 2799 +dw 2856, 2913, 2970, 3027, 3084, 3141, 3197, 3254, 3311, 3368 +dw 3425, 3482, 3539, 3596, 3653, 3709, 3766, 3823, 3880, 3937 +dw 3993, 4050, 4107, 4164, 4220, 4277, 4334, 4390, 4447, 4504 +dw 4560, 4617, 4674, 4730, 4787, 4843, 4900, 4956, 5013, 5069 +dw 5126, 5182, 5239, 5295, 5352, 5408, 5465, 5521, 5577, 5634 +dw 5690, 5746, 5803, 5859, 5915, 5971, 6028, 6084, 6140, 6196 +dw 6252, 6308, 6364, 6421, 6477, 6533, 6589, 6645, 6701, 6757 +dw 6813, 6869, 6924, 6980, 7036, 7092, 7148, 7204, 7259, 7315 +dw 7371, 7427, 7482, 7538, 7594, 7649, 7705, 7760, 7816, 7872 +dw 7927, 7983, 8038, 8093, 8149, 8204, 8260, 8315, 8370, 8425 +dw 8481, 8536, 8591, 8646, 8701, 8757, 8812, 8867, 8922, 8977 +dw 9032, 9087, 9142, 9197, 9251, 9306, 9361, 9416, 9471, 9525 +dw 9580, 9635, 9689, 9744, 9799, 9853, 9908, 9962, 10017, 10071 +dw 10126, 10180, 10234, 10289, 10343, 10397, 10451, 10506, 10560, 10614 +dw 10668, 10722, 10776, 10830, 10884, 10938, 10992, 11046, 11099, 11153 +dw 11207, 11261, 11314, 11368, 11422, 11475, 11529, 11582, 11636, 11689 +dw 11743, 11796, 11849, 11903, 11956, 12009, 12062, 12115, 12169, 12222 +dw 12275, 12328, 12381, 12434, 12487, 12539, 12592, 12645, 12698, 12750 +dw 12803, 12856, 12908, 12961, 13013, 13066, 13118, 13171, 13223, 13275 +dw 13328, 13380, 13432, 13484, 13536, 13588, 13640, 13692, 13744, 13796 +dw 13848, 13900, 13952, 14003, 14055, 14107, 14158, 14210, 14261, 14313 +dw 14364, 14415, 14467, 14518, 14569, 14621, 14672, 14723, 14774, 14825 +dw 14876, 14927, 14978, 15029, 15079, 15130, 15181, 15231, 15282, 15333 +dw 15383, 15434, 15484, 15534, 15585, 15635, 15685, 15735, 15786, 15836 +dw 15886, 15936, 15986, 16036, 16085, 16135, 16185, 16235, 16284, 16334 +dw 16383, 16433, 16482, 16532, 16581, 16631, 16680, 16729, 16778, 16827 +dw 16876, 16925, 16974, 17023, 17072, 17121, 17169, 17218, 17267, 17315 +dw 17364, 17412, 17461, 17509, 17557, 17606, 17654, 17702, 17750, 17798 +dw 17846, 17894, 17942, 17990, 18038, 18085, 18133, 18181, 18228, 18276 +dw 18323, 18370, 18418, 18465, 18512, 18559, 18607, 18654, 18701, 18748 +dw 18794, 18841, 18888, 18935, 18981, 19028, 19074, 19121, 19167, 19214 +dw 19260, 19306, 19352, 19398, 19445, 19491, 19537, 19582, 19628, 19674 +dw 19720, 19765, 19811, 19856, 19902, 19947, 19993, 20038, 20083, 20128 +dw 20173, 20218, 20263, 20308, 20353, 20398, 20443, 20487, 20532, 20576 +dw 20621, 20665, 20710, 20754, 20798, 20842, 20886, 20931, 20974, 21018 +dw 21062, 21106, 21150, 21193, 21237, 21280, 21324, 21367, 21411, 21454 +dw 21497, 21540, 21583, 21626, 21669, 21712, 21755, 21798, 21840, 21883 +dw 21925, 21968, 22010, 22053, 22095, 22137, 22179, 22221, 22263, 22305 +dw 22347, 22389, 22431, 22472, 22514, 22555, 22597, 22638, 22679, 22721 +dw 22762, 22803, 22844, 22885, 22926, 22967, 23007, 23048, 23089, 23129 +dw 23170, 23210, 23251, 23291, 23331, 23371, 23411, 23451, 23491, 23531 +dw 23571, 23610, 23650, 23689, 23729, 23768, 23808, 23847, 23886, 23925 +dw 23964, 24003, 24042, 24081, 24120, 24158, 24197, 24235, 24274, 24312 +dw 24351, 24389, 24427, 24465, 24503, 24541, 24579, 24617, 24654, 24692 +dw 24730, 24767, 24804, 24842, 24879, 24916, 24953, 24990, 25027, 25064 +dw 25101, 25138, 25174, 25211, 25247, 25284, 25320, 25356, 25393, 25429 +dw 25465, 25501, 25537, 25572, 25608, 25644, 25679, 25715, 25750, 25785 +dw 25821, 25856, 25891, 25926, 25961, 25996, 26031, 26065, 26100, 26134 +dw 26169, 26203, 26238, 26272, 26306, 26340, 26374, 26408, 26442, 26475 +dw 26509, 26543, 26576, 26610, 26643, 26676, 26709, 26742, 26775, 26808 +dw 26841, 26874, 26907, 26939, 26972, 27004, 27036, 27069, 27101, 27133 +dw 27165, 27197, 27229, 27261, 27292, 27324, 27355, 27387, 27418, 27450 +dw 27481, 27512, 27543, 27574, 27605, 27635, 27666, 27697, 27727, 27758 +dw 27788, 27818, 27848, 27879, 27909, 27938, 27968, 27998, 28028, 28057 +dw 28087, 28116, 28146, 28175, 28204, 28233, 28262, 28291, 28320, 28348 +dw 28377, 28406, 28434, 28462, 28491, 28519, 28547, 28575, 28603, 28631 +dw 28659, 28686, 28714, 28741, 28769, 28796, 28823, 28851, 28878, 28905 +dw 28932, 28958, 28985, 29012, 29038, 29065, 29091, 29117, 29144, 29170 +dw 29196, 29222, 29247, 29273, 29299, 29324, 29350, 29375, 29400, 29426 +dw 29451, 29476, 29501, 29526, 29550, 29575, 29600, 29624, 29648, 29673 +dw 29697, 29721, 29745, 29769, 29793, 29817, 29840, 29864, 29887, 29911 +dw 29934, 29957, 29980, 30004, 30026, 30049, 30072, 30095, 30117, 30140 +dw 30162, 30184, 30207, 30229, 30251, 30273, 30295, 30316, 30338, 30360 +dw 30381, 30402, 30424, 30445, 30466, 30487, 30508, 30529, 30549, 30570 +dw 30591, 30611, 30631, 30652, 30672, 30692, 30712, 30732, 30752, 30771 +dw 30791, 30810, 30830, 30849, 30868, 30888, 30907, 30926, 30944, 30963 +dw 30982, 31000, 31019, 31037, 31056, 31074, 31092, 31110, 31128, 31146 +dw 31163, 31181, 31198, 31216, 31233, 31250, 31268, 31285, 31302, 31318 +dw 31335, 31352, 31368, 31385, 31401, 31418, 31434, 31450, 31466, 31482 +dw 31498, 31513, 31529, 31545, 31560, 31575, 31591, 31606, 31621, 31636 +dw 31650, 31665, 31680, 31694, 31709, 31723, 31738, 31752, 31766, 31780 +dw 31794, 31807, 31821, 31835, 31848, 31862, 31875, 31888, 31901, 31914 +dw 31927, 31940, 31953, 31965, 31978, 31990, 32003, 32015, 32027, 32039 +dw 32051, 32063, 32075, 32086, 32098, 32109, 32121, 32132, 32143, 32154 +dw 32165, 32176, 32187, 32197, 32208, 32218, 32229, 32239, 32249, 32259 +dw 32269, 32279, 32289, 32299, 32308, 32318, 32327, 32336, 32345, 32355 +dw 32364, 32372, 32381, 32390, 32399, 32407, 32415, 32424, 32432, 32440 +dw 32448, 32456, 32464, 32472, 32479, 32487, 32494, 32501, 32509, 32516 +dw 32523, 32530, 32537, 32543, 32550, 32556, 32563, 32569, 32575, 32581 +dw 32587, 32593, 32599, 32605, 32611, 32616, 32622, 32627, 32632, 32637 +dw 32642, 32647, 32652, 32657, 32661, 32666, 32670, 32675, 32679, 32683 +dw 32687, 32691, 32695, 32699, 32702, 32706, 32709, 32713, 32716, 32719 +dw 32722, 32725, 32728, 32731, 32733, 32736, 32738, 32741, 32743, 32745 +dw 32747, 32749, 32751, 32753, 32754, 32756, 32757, 32759, 32760, 32761 +dw 32762, 32763, 32764, 32765, 32765, 32766, 32766, 32767, 32767, 32767 +costable16 LABEL WORD +dw 32767, 32767, 32767, 32767, 32766, 32766, 32765, 32765, 32764, 32763 +dw 32762, 32761, 32760, 32759, 32757, 32756, 32754, 32753, 32751, 32749 +dw 32747, 32745, 32743, 32741, 32738, 32736, 32733, 32731, 32728, 32725 +dw 32722, 32719, 32716, 32713, 32709, 32706, 32702, 32699, 32695, 32691 +dw 32687, 32683, 32679, 32675, 32670, 32666, 32661, 32657, 32652, 32647 +dw 32642, 32637, 32632, 32627, 32622, 32616, 32611, 32605, 32599, 32593 +dw 32587, 32581, 32575, 32569, 32563, 32556, 32550, 32543, 32537, 32530 +dw 32523, 32516, 32509, 32501, 32494, 32487, 32479, 32472, 32464, 32456 +dw 32448, 32440, 32432, 32424, 32415, 32407, 32399, 32390, 32381, 32372 +dw 32364, 32355, 32345, 32336, 32327, 32318, 32308, 32299, 32289, 32279 +dw 32269, 32259, 32249, 32239, 32229, 32218, 32208, 32197, 32187, 32176 +dw 32165, 32154, 32143, 32132, 32121, 32109, 32098, 32086, 32075, 32063 +dw 32051, 32039, 32027, 32015, 32003, 31990, 31978, 31965, 31953, 31940 +dw 31927, 31914, 31901, 31888, 31875, 31862, 31848, 31835, 31821, 31807 +dw 31794, 31780, 31766, 31752, 31738, 31723, 31709, 31694, 31680, 31665 +dw 31650, 31636, 31621, 31606, 31591, 31575, 31560, 31545, 31529, 31513 +dw 31498, 31482, 31466, 31450, 31434, 31418, 31401, 31385, 31368, 31352 +dw 31335, 31318, 31302, 31285, 31268, 31250, 31233, 31216, 31198, 31181 +dw 31163, 31146, 31128, 31110, 31092, 31074, 31056, 31037, 31019, 31000 +dw 30982, 30963, 30944, 30926, 30907, 30888, 30868, 30849, 30830, 30810 +dw 30791, 30771, 30752, 30732, 30712, 30692, 30672, 30652, 30631, 30611 +dw 30591, 30570, 30549, 30529, 30508, 30487, 30466, 30445, 30424, 30402 +dw 30381, 30360, 30338, 30316, 30295, 30273, 30251, 30229, 30207, 30184 +dw 30162, 30140, 30117, 30095, 30072, 30049, 30026, 30004, 29980, 29957 +dw 29934, 29911, 29887, 29864, 29840, 29817, 29793, 29769, 29745, 29721 +dw 29697, 29673, 29648, 29624, 29600, 29575, 29550, 29526, 29501, 29476 +dw 29451, 29426, 29400, 29375, 29350, 29324, 29299, 29273, 29247, 29222 +dw 29196, 29170, 29144, 29117, 29091, 29065, 29038, 29012, 28985, 28958 +dw 28932, 28905, 28878, 28851, 28823, 28796, 28769, 28741, 28714, 28686 +dw 28659, 28631, 28603, 28575, 28547, 28519, 28491, 28462, 28434, 28406 +dw 28377, 28348, 28320, 28291, 28262, 28233, 28204, 28175, 28146, 28116 +dw 28087, 28057, 28028, 27998, 27968, 27938, 27909, 27879, 27848, 27818 +dw 27788, 27758, 27727, 27697, 27666, 27635, 27605, 27574, 27543, 27512 +dw 27481, 27450, 27418, 27387, 27355, 27324, 27292, 27261, 27229, 27197 +dw 27165, 27133, 27101, 27069, 27036, 27004, 26972, 26939, 26907, 26874 +dw 26841, 26808, 26775, 26742, 26709, 26676, 26643, 26610, 26576, 26543 +dw 26509, 26475, 26442, 26408, 26374, 26340, 26306, 26272, 26238, 26203 +dw 26169, 26134, 26100, 26065, 26031, 25996, 25961, 25926, 25891, 25856 +dw 25821, 25785, 25750, 25715, 25679, 25644, 25608, 25572, 25537, 25501 +dw 25465, 25429, 25393, 25356, 25320, 25284, 25247, 25211, 25174, 25138 +dw 25101, 25064, 25027, 24990, 24953, 24916, 24879, 24842, 24804, 24767 +dw 24730, 24692, 24654, 24617, 24579, 24541, 24503, 24465, 24427, 24389 +dw 24351, 24312, 24274, 24235, 24197, 24158, 24120, 24081, 24042, 24003 +dw 23964, 23925, 23886, 23847, 23808, 23768, 23729, 23689, 23650, 23610 +dw 23571, 23531, 23491, 23451, 23411, 23371, 23331, 23291, 23251, 23210 +dw 23170, 23129, 23089, 23048, 23007, 22967, 22926, 22885, 22844, 22803 +dw 22762, 22721, 22679, 22638, 22597, 22555, 22514, 22472, 22431, 22389 +dw 22347, 22305, 22263, 22221, 22179, 22137, 22095, 22053, 22010, 21968 +dw 21925, 21883, 21840, 21798, 21755, 21712, 21669, 21626, 21583, 21540 +dw 21497, 21454, 21411, 21367, 21324, 21280, 21237, 21193, 21150, 21106 +dw 21062, 21018, 20974, 20931, 20886, 20842, 20798, 20754, 20710, 20665 +dw 20621, 20576, 20532, 20487, 20443, 20398, 20353, 20308, 20263, 20218 +dw 20173, 20128, 20083, 20038, 19993, 19947, 19902, 19856, 19811, 19765 +dw 19720, 19674, 19628, 19582, 19537, 19491, 19445, 19398, 19352, 19306 +dw 19260, 19214, 19167, 19121, 19074, 19028, 18981, 18935, 18888, 18841 +dw 18794, 18748, 18701, 18654, 18607, 18559, 18512, 18465, 18418, 18370 +dw 18323, 18276, 18228, 18181, 18133, 18085, 18038, 17990, 17942, 17894 +dw 17846, 17798, 17750, 17702, 17654, 17606, 17557, 17509, 17461, 17412 +dw 17364, 17315, 17267, 17218, 17169, 17121, 17072, 17023, 16974, 16925 +dw 16876, 16827, 16778, 16729, 16680, 16631, 16581, 16532, 16482, 16433 +dw 16383, 16334, 16284, 16235, 16185, 16135, 16085, 16036, 15986, 15936 +dw 15886, 15836, 15786, 15735, 15685, 15635, 15585, 15534, 15484, 15434 +dw 15383, 15333, 15282, 15231, 15181, 15130, 15079, 15029, 14978, 14927 +dw 14876, 14825, 14774, 14723, 14672, 14621, 14569, 14518, 14467, 14415 +dw 14364, 14313, 14261, 14210, 14158, 14107, 14055, 14003, 13952, 13900 +dw 13848, 13796, 13744, 13692, 13640, 13588, 13536, 13484, 13432, 13380 +dw 13328, 13275, 13223, 13171, 13118, 13066, 13013, 12961, 12908, 12856 +dw 12803, 12750, 12698, 12645, 12592, 12539, 12487, 12434, 12381, 12328 +dw 12275, 12222, 12169, 12115, 12062, 12009, 11956, 11903, 11849, 11796 +dw 11743, 11689, 11636, 11582, 11529, 11475, 11422, 11368, 11314, 11261 +dw 11207, 11153, 11099, 11046, 10992, 10938, 10884, 10830, 10776, 10722 +dw 10668, 10614, 10560, 10506, 10451, 10397, 10343, 10289, 10234, 10180 +dw 10126, 10071, 10017, 9962, 9908, 9853, 9799, 9744, 9689, 9635 +dw 9580, 9525, 9471, 9416, 9361, 9306, 9251, 9197, 9142, 9087 +dw 9032, 8977, 8922, 8867, 8812, 8757, 8701, 8646, 8591, 8536 +dw 8481, 8425, 8370, 8315, 8260, 8204, 8149, 8093, 8038, 7983 +dw 7927, 7872, 7816, 7760, 7705, 7649, 7594, 7538, 7482, 7427 +dw 7371, 7315, 7259, 7204, 7148, 7092, 7036, 6980, 6924, 6869 +dw 6813, 6757, 6701, 6645, 6589, 6533, 6477, 6421, 6364, 6308 +dw 6252, 6196, 6140, 6084, 6028, 5971, 5915, 5859, 5803, 5746 +dw 5690, 5634, 5577, 5521, 5465, 5408, 5352, 5295, 5239, 5182 +dw 5126, 5069, 5013, 4956, 4900, 4843, 4787, 4730, 4674, 4617 +dw 4560, 4504, 4447, 4390, 4334, 4277, 4220, 4164, 4107, 4050 +dw 3993, 3937, 3880, 3823, 3766, 3709, 3653, 3596, 3539, 3482 +dw 3425, 3368, 3311, 3254, 3197, 3141, 3084, 3027, 2970, 2913 +dw 2856, 2799, 2742, 2685, 2628, 2571, 2514, 2457, 2400, 2343 +dw 2286, 2229, 2172, 2115, 2057, 2000, 1943, 1886, 1829, 1772 +dw 1715, 1658, 1601, 1544, 1486, 1429, 1372, 1315, 1258, 1201 +dw 1144, 1086, 1029, 972, 915, 858, 801, 743, 686, 629 +dw 572, 515, 457, 400, 343, 286, 229, 172, 114, 57 +dw 0, -56, -113, -171, -228, -285, -342, -399, -456, -514 +dw -571, -628, -685, -742, -800, -857, -914, -971, -1028, -1085 +dw -1143, -1200, -1257, -1314, -1371, -1428, -1485, -1543, -1600, -1657 +dw -1714, -1771, -1828, -1885, -1942, -1999, -2056, -2114, -2171, -2228 +dw -2285, -2342, -2399, -2456, -2513, -2570, -2627, -2684, -2741, -2798 +dw -2855, -2912, -2969, -3026, -3083, -3140, -3196, -3253, -3310, -3367 +dw -3424, -3481, -3538, -3595, -3652, -3708, -3765, -3822, -3879, -3936 +dw -3992, -4049, -4106, -4163, -4219, -4276, -4333, -4389, -4446, -4503 +dw -4559, -4616, -4673, -4729, -4786, -4842, -4899, -4955, -5012, -5068 +dw -5125, -5181, -5238, -5294, -5351, -5407, -5464, -5520, -5576, -5633 +dw -5689, -5745, -5802, -5858, -5914, -5970, -6027, -6083, -6139, -6195 +dw -6251, -6307, -6363, -6420, -6476, -6532, -6588, -6644, -6700, -6756 +dw -6812, -6868, -6923, -6979, -7035, -7091, -7147, -7203, -7258, -7314 +dw -7370, -7426, -7481, -7537, -7593, -7648, -7704, -7759, -7815, -7871 +dw -7926, -7982, -8037, -8092, -8148, -8203, -8259, -8314, -8369, -8424 +dw -8480, -8535, -8590, -8645, -8700, -8756, -8811, -8866, -8921, -8976 +dw -9031, -9086, -9141, -9196, -9250, -9305, -9360, -9415, -9470, -9524 +dw -9579, -9634, -9688, -9743, -9798, -9852, -9907, -9961,-10016,-10070 +dw -10125,-10179,-10233,-10288,-10342,-10396,-10450,-10505,-10559,-10613 +dw -10667,-10721,-10775,-10829,-10883,-10937,-10991,-11045,-11098,-11152 +dw -11206,-11260,-11313,-11367,-11421,-11474,-11528,-11581,-11635,-11688 +dw -11742,-11795,-11848,-11902,-11955,-12008,-12061,-12114,-12168,-12221 +dw -12274,-12327,-12380,-12433,-12486,-12538,-12591,-12644,-12697,-12749 +dw -12802,-12855,-12907,-12960,-13012,-13065,-13117,-13170,-13222,-13274 +dw -13327,-13379,-13431,-13483,-13535,-13587,-13639,-13691,-13743,-13795 +dw -13847,-13899,-13951,-14002,-14054,-14106,-14157,-14209,-14260,-14312 +dw -14363,-14414,-14466,-14517,-14568,-14620,-14671,-14722,-14773,-14824 +dw -14875,-14926,-14977,-15028,-15078,-15129,-15180,-15230,-15281,-15332 +dw -15382,-15433,-15483,-15533,-15584,-15634,-15684,-15734,-15785,-15835 +dw -15885,-15935,-15985,-16035,-16084,-16134,-16184,-16234,-16283,-16333 +dw -16382,-16432,-16481,-16531,-16580,-16630,-16679,-16728,-16777,-16826 +dw -16875,-16924,-16973,-17022,-17071,-17120,-17168,-17217,-17266,-17314 +dw -17363,-17411,-17460,-17508,-17556,-17605,-17653,-17701,-17749,-17797 +dw -17845,-17893,-17941,-17989,-18037,-18084,-18132,-18180,-18227,-18275 +dw -18322,-18369,-18417,-18464,-18511,-18558,-18606,-18653,-18700,-18747 +dw -18793,-18840,-18887,-18934,-18980,-19027,-19073,-19120,-19166,-19213 +dw -19259,-19305,-19351,-19397,-19444,-19490,-19536,-19581,-19627,-19673 +dw -19719,-19764,-19810,-19855,-19901,-19946,-19992,-20037,-20082,-20127 +dw -20172,-20217,-20262,-20307,-20352,-20397,-20442,-20486,-20531,-20575 +dw -20620,-20664,-20709,-20753,-20797,-20841,-20885,-20930,-20973,-21017 +dw -21061,-21105,-21149,-21192,-21236,-21279,-21323,-21366,-21410,-21453 +dw -21496,-21539,-21582,-21625,-21668,-21711,-21754,-21797,-21839,-21882 +dw -21924,-21967,-22009,-22052,-22094,-22136,-22178,-22220,-22262,-22304 +dw -22346,-22388,-22430,-22471,-22513,-22554,-22596,-22637,-22678,-22720 +dw -22761,-22802,-22843,-22884,-22925,-22966,-23006,-23047,-23088,-23128 +dw -23169,-23209,-23250,-23290,-23330,-23370,-23410,-23450,-23490,-23530 +dw -23570,-23609,-23649,-23688,-23728,-23767,-23807,-23846,-23885,-23924 +dw -23963,-24002,-24041,-24080,-24119,-24157,-24196,-24234,-24273,-24311 +dw -24350,-24388,-24426,-24464,-24502,-24540,-24578,-24616,-24653,-24691 +dw -24729,-24766,-24803,-24841,-24878,-24915,-24952,-24989,-25026,-25063 +dw -25100,-25137,-25173,-25210,-25246,-25283,-25319,-25355,-25392,-25428 +dw -25464,-25500,-25536,-25571,-25607,-25643,-25678,-25714,-25749,-25784 +dw -25820,-25855,-25890,-25925,-25960,-25995,-26030,-26064,-26099,-26133 +dw -26168,-26202,-26237,-26271,-26305,-26339,-26373,-26407,-26441,-26474 +dw -26508,-26542,-26575,-26609,-26642,-26675,-26708,-26741,-26774,-26807 +dw -26840,-26873,-26906,-26938,-26971,-27003,-27035,-27068,-27100,-27132 +dw -27164,-27196,-27228,-27260,-27291,-27323,-27354,-27386,-27417,-27449 +dw -27480,-27511,-27542,-27573,-27604,-27634,-27665,-27696,-27726,-27757 +dw -27787,-27817,-27847,-27878,-27908,-27937,-27967,-27997,-28027,-28056 +dw -28086,-28115,-28145,-28174,-28203,-28232,-28261,-28290,-28319,-28347 +dw -28376,-28405,-28433,-28461,-28490,-28518,-28546,-28574,-28602,-28630 +dw -28658,-28685,-28713,-28740,-28768,-28795,-28822,-28850,-28877,-28904 +dw -28931,-28957,-28984,-29011,-29037,-29064,-29090,-29116,-29143,-29169 +dw -29195,-29221,-29246,-29272,-29298,-29323,-29349,-29374,-29399,-29425 +dw -29450,-29475,-29500,-29525,-29549,-29574,-29599,-29623,-29647,-29672 +dw -29696,-29720,-29744,-29768,-29792,-29816,-29839,-29863,-29886,-29910 +dw -29933,-29956,-29979,-30003,-30025,-30048,-30071,-30094,-30116,-30139 +dw -30161,-30183,-30206,-30228,-30250,-30272,-30294,-30315,-30337,-30359 +dw -30380,-30401,-30423,-30444,-30465,-30486,-30507,-30528,-30548,-30569 +dw -30590,-30610,-30630,-30651,-30671,-30691,-30711,-30731,-30751,-30770 +dw -30790,-30809,-30829,-30848,-30867,-30887,-30906,-30925,-30943,-30962 +dw -30981,-30999,-31018,-31036,-31055,-31073,-31091,-31109,-31127,-31145 +dw -31162,-31180,-31197,-31215,-31232,-31249,-31267,-31284,-31301,-31317 +dw -31334,-31351,-31367,-31384,-31400,-31417,-31433,-31449,-31465,-31481 +dw -31497,-31512,-31528,-31544,-31559,-31574,-31590,-31605,-31620,-31635 +dw -31649,-31664,-31679,-31693,-31708,-31722,-31737,-31751,-31765,-31779 +dw -31793,-31806,-31820,-31834,-31847,-31861,-31874,-31887,-31900,-31913 +dw -31926,-31939,-31952,-31964,-31977,-31989,-32002,-32014,-32026,-32038 +dw -32050,-32062,-32074,-32085,-32097,-32108,-32120,-32131,-32142,-32153 +dw -32164,-32175,-32186,-32196,-32207,-32217,-32228,-32238,-32248,-32258 +dw -32268,-32278,-32288,-32298,-32307,-32317,-32326,-32335,-32344,-32354 +dw -32363,-32371,-32380,-32389,-32398,-32406,-32414,-32423,-32431,-32439 +dw -32447,-32455,-32463,-32471,-32478,-32486,-32493,-32500,-32508,-32515 +dw -32522,-32529,-32536,-32542,-32549,-32555,-32562,-32568,-32574,-32580 +dw -32586,-32592,-32598,-32604,-32610,-32615,-32621,-32626,-32631,-32636 +dw -32641,-32646,-32651,-32656,-32660,-32665,-32669,-32674,-32678,-32682 +dw -32686,-32690,-32694,-32698,-32701,-32705,-32708,-32712,-32715,-32718 +dw -32721,-32724,-32727,-32730,-32732,-32735,-32737,-32740,-32742,-32744 +dw -32746,-32748,-32750,-32752,-32753,-32755,-32756,-32758,-32759,-32760 +dw -32761,-32762,-32763,-32764,-32764,-32765,-32765,-32766,-32766,-32766 +dw -32766,-32766,-32766,-32766,-32765,-32765,-32764,-32764,-32763,-32762 +dw -32761,-32760,-32759,-32758,-32756,-32755,-32753,-32752,-32750,-32748 +dw -32746,-32744,-32742,-32740,-32737,-32735,-32732,-32730,-32727,-32724 +dw -32721,-32718,-32715,-32712,-32708,-32705,-32701,-32698,-32694,-32690 +dw -32686,-32682,-32678,-32674,-32669,-32665,-32660,-32656,-32651,-32646 +dw -32641,-32636,-32631,-32626,-32621,-32615,-32610,-32604,-32598,-32592 +dw -32586,-32580,-32574,-32568,-32562,-32555,-32549,-32542,-32536,-32529 +dw -32522,-32515,-32508,-32500,-32493,-32486,-32478,-32471,-32463,-32455 +dw -32447,-32439,-32431,-32423,-32414,-32406,-32398,-32389,-32380,-32371 +dw -32363,-32354,-32344,-32335,-32326,-32317,-32307,-32298,-32288,-32278 +dw -32268,-32258,-32248,-32238,-32228,-32217,-32207,-32196,-32186,-32175 +dw -32164,-32153,-32142,-32131,-32120,-32108,-32097,-32085,-32074,-32062 +dw -32050,-32038,-32026,-32014,-32002,-31989,-31977,-31964,-31952,-31939 +dw -31926,-31913,-31900,-31887,-31874,-31861,-31847,-31834,-31820,-31806 +dw -31793,-31779,-31765,-31751,-31737,-31722,-31708,-31693,-31679,-31664 +dw -31649,-31635,-31620,-31605,-31590,-31574,-31559,-31544,-31528,-31512 +dw -31497,-31481,-31465,-31449,-31433,-31417,-31400,-31384,-31367,-31351 +dw -31334,-31317,-31301,-31284,-31267,-31249,-31232,-31215,-31197,-31180 +dw -31162,-31145,-31127,-31109,-31091,-31073,-31055,-31036,-31018,-30999 +dw -30981,-30962,-30943,-30925,-30906,-30887,-30867,-30848,-30829,-30809 +dw -30790,-30770,-30751,-30731,-30711,-30691,-30671,-30651,-30630,-30610 +dw -30590,-30569,-30548,-30528,-30507,-30486,-30465,-30444,-30423,-30401 +dw -30380,-30359,-30337,-30315,-30294,-30272,-30250,-30228,-30206,-30183 +dw -30161,-30139,-30116,-30094,-30071,-30048,-30025,-30003,-29979,-29956 +dw -29933,-29910,-29886,-29863,-29839,-29816,-29792,-29768,-29744,-29720 +dw -29696,-29672,-29647,-29623,-29599,-29574,-29549,-29525,-29500,-29475 +dw -29450,-29425,-29399,-29374,-29349,-29323,-29298,-29272,-29246,-29221 +dw -29195,-29169,-29143,-29116,-29090,-29064,-29037,-29011,-28984,-28957 +dw -28931,-28904,-28877,-28850,-28822,-28795,-28768,-28740,-28713,-28685 +dw -28658,-28630,-28602,-28574,-28546,-28518,-28490,-28461,-28433,-28405 +dw -28376,-28347,-28319,-28290,-28261,-28232,-28203,-28174,-28145,-28115 +dw -28086,-28056,-28027,-27997,-27967,-27937,-27908,-27878,-27847,-27817 +dw -27787,-27757,-27726,-27696,-27665,-27634,-27604,-27573,-27542,-27511 +dw -27480,-27449,-27417,-27386,-27354,-27323,-27291,-27260,-27228,-27196 +dw -27164,-27132,-27100,-27068,-27035,-27003,-26971,-26938,-26906,-26873 +dw -26840,-26807,-26774,-26741,-26708,-26675,-26642,-26609,-26575,-26542 +dw -26508,-26474,-26441,-26407,-26373,-26339,-26305,-26271,-26237,-26202 +dw -26168,-26133,-26099,-26064,-26030,-25995,-25960,-25925,-25890,-25855 +dw -25820,-25784,-25749,-25714,-25678,-25643,-25607,-25571,-25536,-25500 +dw -25464,-25428,-25392,-25355,-25319,-25283,-25246,-25210,-25173,-25137 +dw -25100,-25063,-25026,-24989,-24952,-24915,-24878,-24841,-24803,-24766 +dw -24729,-24691,-24653,-24616,-24578,-24540,-24502,-24464,-24426,-24388 +dw -24350,-24311,-24273,-24234,-24196,-24157,-24119,-24080,-24041,-24002 +dw -23963,-23924,-23885,-23846,-23807,-23767,-23728,-23688,-23649,-23609 +dw -23570,-23530,-23490,-23450,-23410,-23370,-23330,-23290,-23250,-23209 +dw -23169,-23128,-23088,-23047,-23006,-22966,-22925,-22884,-22843,-22802 +dw -22761,-22720,-22678,-22637,-22596,-22554,-22513,-22471,-22430,-22388 +dw -22346,-22304,-22262,-22220,-22178,-22136,-22094,-22052,-22009,-21967 +dw -21924,-21882,-21839,-21797,-21754,-21711,-21668,-21625,-21582,-21539 +dw -21496,-21453,-21410,-21366,-21323,-21279,-21236,-21192,-21149,-21105 +dw -21061,-21017,-20973,-20930,-20885,-20841,-20797,-20753,-20709,-20664 +dw -20620,-20575,-20531,-20486,-20442,-20397,-20352,-20307,-20262,-20217 +dw -20172,-20127,-20082,-20037,-19992,-19946,-19901,-19855,-19810,-19764 +dw -19719,-19673,-19627,-19581,-19536,-19490,-19444,-19397,-19351,-19305 +dw -19259,-19213,-19166,-19120,-19073,-19027,-18980,-18934,-18887,-18840 +dw -18793,-18747,-18700,-18653,-18606,-18558,-18511,-18464,-18417,-18369 +dw -18322,-18275,-18227,-18180,-18132,-18084,-18037,-17989,-17941,-17893 +dw -17845,-17797,-17749,-17701,-17653,-17605,-17556,-17508,-17460,-17411 +dw -17363,-17314,-17266,-17217,-17168,-17120,-17071,-17022,-16973,-16924 +dw -16875,-16826,-16777,-16728,-16679,-16630,-16580,-16531,-16481,-16432 +dw -16383,-16333,-16283,-16234,-16184,-16134,-16084,-16035,-15985,-15935 +dw -15885,-15835,-15785,-15734,-15684,-15634,-15584,-15533,-15483,-15433 +dw -15382,-15332,-15281,-15230,-15180,-15129,-15078,-15028,-14977,-14926 +dw -14875,-14824,-14773,-14722,-14671,-14620,-14568,-14517,-14466,-14414 +dw -14363,-14312,-14260,-14209,-14157,-14106,-14054,-14002,-13951,-13899 +dw -13847,-13795,-13743,-13691,-13639,-13587,-13535,-13483,-13431,-13379 +dw -13327,-13274,-13222,-13170,-13117,-13065,-13012,-12960,-12907,-12855 +dw -12802,-12749,-12697,-12644,-12591,-12538,-12486,-12433,-12380,-12327 +dw -12274,-12221,-12168,-12114,-12061,-12008,-11955,-11902,-11848,-11795 +dw -11742,-11688,-11635,-11581,-11528,-11474,-11421,-11367,-11313,-11260 +dw -11206,-11152,-11098,-11045,-10991,-10937,-10883,-10829,-10775,-10721 +dw -10667,-10613,-10559,-10505,-10450,-10396,-10342,-10288,-10233,-10179 +dw -10125,-10070,-10016, -9961, -9907, -9852, -9798, -9743, -9688, -9634 +dw -9579, -9524, -9470, -9415, -9360, -9305, -9250, -9196, -9141, -9086 +dw -9031, -8976, -8921, -8866, -8811, -8756, -8700, -8645, -8590, -8535 +dw -8480, -8424, -8369, -8314, -8259, -8203, -8148, -8092, -8037, -7982 +dw -7926, -7871, -7815, -7759, -7704, -7648, -7593, -7537, -7481, -7426 +dw -7370, -7314, -7258, -7203, -7147, -7091, -7035, -6979, -6923, -6868 +dw -6812, -6756, -6700, -6644, -6588, -6532, -6476, -6420, -6363, -6307 +dw -6251, -6195, -6139, -6083, -6027, -5970, -5914, -5858, -5802, -5745 +dw -5689, -5633, -5576, -5520, -5464, -5407, -5351, -5294, -5238, -5181 +dw -5125, -5068, -5012, -4955, -4899, -4842, -4786, -4729, -4673, -4616 +dw -4559, -4503, -4446, -4389, -4333, -4276, -4219, -4163, -4106, -4049 +dw -3992, -3936, -3879, -3822, -3765, -3708, -3652, -3595, -3538, -3481 +dw -3424, -3367, -3310, -3253, -3196, -3140, -3083, -3026, -2969, -2912 +dw -2855, -2798, -2741, -2684, -2627, -2570, -2513, -2456, -2399, -2342 +dw -2285, -2228, -2171, -2114, -2056, -1999, -1942, -1885, -1828, -1771 +dw -1714, -1657, -1600, -1543, -1485, -1428, -1371, -1314, -1257, -1200 +dw -1143, -1085, -1028, -971, -914, -857, -800, -742, -685, -628 +dw -571, -514, -456, -399, -342, -285, -228, -171, -113, -56;(cosine continued) + +dw 0, 57, 114, 172, 229, 286, 343, 400, 457, 515 +dw 572, 629, 686, 743, 801, 858, 915, 972, 1029, 1086 +dw 1144, 1201, 1258, 1315, 1372, 1429, 1486, 1544, 1601, 1658 +dw 1715, 1772, 1829, 1886, 1943, 2000, 2057, 2115, 2172, 2229 +dw 2286, 2343, 2400, 2457, 2514, 2571, 2628, 2685, 2742, 2799 +dw 2856, 2913, 2970, 3027, 3084, 3141, 3197, 3254, 3311, 3368 +dw 3425, 3482, 3539, 3596, 3653, 3709, 3766, 3823, 3880, 3937 +dw 3993, 4050, 4107, 4164, 4220, 4277, 4334, 4390, 4447, 4504 +dw 4560, 4617, 4674, 4730, 4787, 4843, 4900, 4956, 5013, 5069 +dw 5126, 5182, 5239, 5295, 5352, 5408, 5465, 5521, 5577, 5634 +dw 5690, 5746, 5803, 5859, 5915, 5971, 6028, 6084, 6140, 6196 +dw 6252, 6308, 6364, 6421, 6477, 6533, 6589, 6645, 6701, 6757 +dw 6813, 6869, 6924, 6980, 7036, 7092, 7148, 7204, 7259, 7315 +dw 7371, 7427, 7482, 7538, 7594, 7649, 7705, 7760, 7816, 7872 +dw 7927, 7983, 8038, 8093, 8149, 8204, 8260, 8315, 8370, 8425 +dw 8481, 8536, 8591, 8646, 8701, 8757, 8812, 8867, 8922, 8977 +dw 9032, 9087, 9142, 9197, 9251, 9306, 9361, 9416, 9471, 9525 +dw 9580, 9635, 9689, 9744, 9799, 9853, 9908, 9962, 10017, 10071 +dw 10126, 10180, 10234, 10289, 10343, 10397, 10451, 10506, 10560, 10614 +dw 10668, 10722, 10776, 10830, 10884, 10938, 10992, 11046, 11099, 11153 +dw 11207, 11261, 11314, 11368, 11422, 11475, 11529, 11582, 11636, 11689 +dw 11743, 11796, 11849, 11903, 11956, 12009, 12062, 12115, 12169, 12222 +dw 12275, 12328, 12381, 12434, 12487, 12539, 12592, 12645, 12698, 12750 +dw 12803, 12856, 12908, 12961, 13013, 13066, 13118, 13171, 13223, 13275 +dw 13328, 13380, 13432, 13484, 13536, 13588, 13640, 13692, 13744, 13796 +dw 13848, 13900, 13952, 14003, 14055, 14107, 14158, 14210, 14261, 14313 +dw 14364, 14415, 14467, 14518, 14569, 14621, 14672, 14723, 14774, 14825 +dw 14876, 14927, 14978, 15029, 15079, 15130, 15181, 15231, 15282, 15333 +dw 15383, 15434, 15484, 15534, 15585, 15635, 15685, 15735, 15786, 15836 +dw 15886, 15936, 15986, 16036, 16085, 16135, 16185, 16235, 16284, 16334 +dw 16383, 16433, 16482, 16532, 16581, 16631, 16680, 16729, 16778, 16827 +dw 16876, 16925, 16974, 17023, 17072, 17121, 17169, 17218, 17267, 17315 +dw 17364, 17412, 17461, 17509, 17557, 17606, 17654, 17702, 17750, 17798 +dw 17846, 17894, 17942, 17990, 18038, 18085, 18133, 18181, 18228, 18276 +dw 18323, 18370, 18418, 18465, 18512, 18559, 18607, 18654, 18701, 18748 +dw 18794, 18841, 18888, 18935, 18981, 19028, 19074, 19121, 19167, 19214 +dw 19260, 19306, 19352, 19398, 19445, 19491, 19537, 19582, 19628, 19674 +dw 19720, 19765, 19811, 19856, 19902, 19947, 19993, 20038, 20083, 20128 +dw 20173, 20218, 20263, 20308, 20353, 20398, 20443, 20487, 20532, 20576 +dw 20621, 20665, 20710, 20754, 20798, 20842, 20886, 20931, 20974, 21018 +dw 21062, 21106, 21150, 21193, 21237, 21280, 21324, 21367, 21411, 21454 +dw 21497, 21540, 21583, 21626, 21669, 21712, 21755, 21798, 21840, 21883 +dw 21925, 21968, 22010, 22053, 22095, 22137, 22179, 22221, 22263, 22305 +dw 22347, 22389, 22431, 22472, 22514, 22555, 22597, 22638, 22679, 22721 +dw 22762, 22803, 22844, 22885, 22926, 22967, 23007, 23048, 23089, 23129 +dw 23170, 23210, 23251, 23291, 23331, 23371, 23411, 23451, 23491, 23531 +dw 23571, 23610, 23650, 23689, 23729, 23768, 23808, 23847, 23886, 23925 +dw 23964, 24003, 24042, 24081, 24120, 24158, 24197, 24235, 24274, 24312 +dw 24351, 24389, 24427, 24465, 24503, 24541, 24579, 24617, 24654, 24692 +dw 24730, 24767, 24804, 24842, 24879, 24916, 24953, 24990, 25027, 25064 +dw 25101, 25138, 25174, 25211, 25247, 25284, 25320, 25356, 25393, 25429 +dw 25465, 25501, 25537, 25572, 25608, 25644, 25679, 25715, 25750, 25785 +dw 25821, 25856, 25891, 25926, 25961, 25996, 26031, 26065, 26100, 26134 +dw 26169, 26203, 26238, 26272, 26306, 26340, 26374, 26408, 26442, 26475 +dw 26509, 26543, 26576, 26610, 26643, 26676, 26709, 26742, 26775, 26808 +dw 26841, 26874, 26907, 26939, 26972, 27004, 27036, 27069, 27101, 27133 +dw 27165, 27197, 27229, 27261, 27292, 27324, 27355, 27387, 27418, 27450 +dw 27481, 27512, 27543, 27574, 27605, 27635, 27666, 27697, 27727, 27758 +dw 27788, 27818, 27848, 27879, 27909, 27938, 27968, 27998, 28028, 28057 +dw 28087, 28116, 28146, 28175, 28204, 28233, 28262, 28291, 28320, 28348 +dw 28377, 28406, 28434, 28462, 28491, 28519, 28547, 28575, 28603, 28631 +dw 28659, 28686, 28714, 28741, 28769, 28796, 28823, 28851, 28878, 28905 +dw 28932, 28958, 28985, 29012, 29038, 29065, 29091, 29117, 29144, 29170 +dw 29196, 29222, 29247, 29273, 29299, 29324, 29350, 29375, 29400, 29426 +dw 29451, 29476, 29501, 29526, 29550, 29575, 29600, 29624, 29648, 29673 +dw 29697, 29721, 29745, 29769, 29793, 29817, 29840, 29864, 29887, 29911 +dw 29934, 29957, 29980, 30004, 30026, 30049, 30072, 30095, 30117, 30140 +dw 30162, 30184, 30207, 30229, 30251, 30273, 30295, 30316, 30338, 30360 +dw 30381, 30402, 30424, 30445, 30466, 30487, 30508, 30529, 30549, 30570 +dw 30591, 30611, 30631, 30652, 30672, 30692, 30712, 30732, 30752, 30771 +dw 30791, 30810, 30830, 30849, 30868, 30888, 30907, 30926, 30944, 30963 +dw 30982, 31000, 31019, 31037, 31056, 31074, 31092, 31110, 31128, 31146 +dw 31163, 31181, 31198, 31216, 31233, 31250, 31268, 31285, 31302, 31318 +dw 31335, 31352, 31368, 31385, 31401, 31418, 31434, 31450, 31466, 31482 +dw 31498, 31513, 31529, 31545, 31560, 31575, 31591, 31606, 31621, 31636 +dw 31650, 31665, 31680, 31694, 31709, 31723, 31738, 31752, 31766, 31780 +dw 31794, 31807, 31821, 31835, 31848, 31862, 31875, 31888, 31901, 31914 +dw 31927, 31940, 31953, 31965, 31978, 31990, 32003, 32015, 32027, 32039 +dw 32051, 32063, 32075, 32086, 32098, 32109, 32121, 32132, 32143, 32154 +dw 32165, 32176, 32187, 32197, 32208, 32218, 32229, 32239, 32249, 32259 +dw 32269, 32279, 32289, 32299, 32308, 32318, 32327, 32336, 32345, 32355 +dw 32364, 32372, 32381, 32390, 32399, 32407, 32415, 32424, 32432, 32440 +dw 32448, 32456, 32464, 32472, 32479, 32487, 32494, 32501, 32509, 32516 +dw 32523, 32530, 32537, 32543, 32550, 32556, 32563, 32569, 32575, 32581 +dw 32587, 32593, 32599, 32605, 32611, 32616, 32622, 32627, 32632, 32637 +dw 32642, 32647, 32652, 32657, 32661, 32666, 32670, 32675, 32679, 32683 +dw 32687, 32691, 32695, 32699, 32702, 32706, 32709, 32713, 32716, 32719 +dw 32722, 32725, 32728, 32731, 32733, 32736, 32738, 32741, 32743, 32745 +dw 32747, 32749, 32751, 32753, 32754, 32756, 32757, 32759, 32760, 32761 +dw 32762, 32763, 32764, 32765, 32765, 32766, 32766, 32767, 32767, 32767 +ALIGN 4 +dd -99999999 +tantable32 LABEL DWORD +dd 0, 114, 229, 343, 458, 572, 686, 801, 915, 1030 +dd 1144, 1258, 1373, 1487, 1602, 1716, 1831, 1945, 2060, 2174 +dd 2289, 2403, 2518, 2632, 2747, 2861, 2976, 3091, 3205, 3320 +dd 3435, 3549, 3664, 3779, 3894, 4008, 4123, 4238, 4353, 4468 +dd 4583, 4698, 4813, 4928, 5043, 5158, 5273, 5388, 5503, 5618 +dd 5734, 5849, 5964, 6080, 6195, 6310, 6426, 6541, 6657, 6772 +dd 6888, 7004, 7119, 7235, 7351, 7467, 7583, 7699, 7815, 7931 +dd 8047, 8163, 8279, 8395, 8512, 8628, 8744, 8861, 8977, 9094 +dd 9210, 9327, 9444, 9561, 9678, 9794, 9911, 10028, 10146, 10263 +dd 10380, 10497, 10615, 10732, 10849, 10967, 11085, 11202, 11320, 11438 +dd 11556, 11674, 11792, 11910, 12028, 12146, 12265, 12383, 12502, 12620 +dd 12739, 12858, 12976, 13095, 13214, 13333, 13453, 13572, 13691, 13811 +dd 13930, 14050, 14169, 14289, 14409, 14529, 14649, 14769, 14889, 15010 +dd 15130, 15251, 15371, 15492, 15613, 15734, 15855, 15976, 16097, 16219 +dd 16340, 16462, 16583, 16705, 16827, 16949, 17071, 17193, 17315, 17438 +dd 17560, 17683, 17806, 17929, 18052, 18175, 18298, 18421, 18545, 18668 +dd 18792, 18916, 19040, 19164, 19288, 19413, 19537, 19662, 19786, 19911 +dd 20036, 20162, 20287, 20412, 20538, 20663, 20789, 20915, 21041, 21168 +dd 21294, 21420, 21547, 21674, 21801, 21928, 22055, 22183, 22310, 22438 +dd 22566, 22694, 22822, 22950, 23079, 23208, 23336, 23465, 23594, 23724 +dd 23853, 23983, 24113, 24243, 24373, 24503, 24633, 24764, 24895, 25026 +dd 25157, 25288, 25420, 25551, 25683, 25815, 25948, 26080, 26213, 26345 +dd 26478, 26611, 26745, 26878, 27012, 27146, 27280, 27414, 27549, 27683 +dd 27818, 27953, 28089, 28224, 28360, 28496, 28632, 28768, 28905, 29042 +dd 29179, 29316, 29453, 29591, 29728, 29866, 30005, 30143, 30282, 30421 +dd 30560, 30699, 30839, 30979, 31119, 31259, 31400, 31540, 31681, 31823 +dd 31964, 32106, 32248, 32390, 32532, 32675, 32818, 32961, 33105, 33248 +dd 33392, 33536, 33681, 33826, 33971, 34116, 34261, 34407, 34553, 34700 +dd 34846, 34993, 35140, 35288, 35435, 35583, 35731, 35880, 36029, 36178 +dd 36327, 36477, 36627, 36777, 36928, 37078, 37230, 37381, 37533, 37685 +dd 37837, 37990, 38143, 38296, 38450, 38604, 38758, 38912, 39067, 39222 +dd 39378, 39534, 39690, 39847, 40003, 40161, 40318, 40476, 40634, 40793 +dd 40951, 41111, 41270, 41430, 41590, 41751, 41912, 42073, 42235, 42397 +dd 42560, 42722, 42886, 43049, 43213, 43377, 43542, 43707, 43873, 44038 +dd 44205, 44371, 44538, 44706, 44873, 45042, 45210, 45379, 45549, 45719 +dd 45889, 46059, 46231, 46402, 46574, 46746, 46919, 47092, 47266, 47440 +dd 47615, 47790, 47965, 48141, 48317, 48494, 48671, 48849, 49027, 49206 +dd 49385, 49564, 49745, 49925, 50106, 50288, 50470, 50652, 50835, 51018 +dd 51202, 51387, 51572, 51757, 51943, 52130, 52317, 52504, 52692, 52881 +dd 53070, 53260, 53450, 53641, 53832, 54024, 54216, 54409, 54603, 54797 +dd 54991, 55186, 55382, 55579, 55776, 55973, 56171, 56370, 56569, 56769 +dd 56970, 57171, 57372, 57575, 57778, 57981, 58186, 58390, 58596, 58802 +dd 59009, 59216, 59424, 59633, 59843, 60053, 60263, 60475, 60687, 60900 +dd 61113, 61328, 61542, 61758, 61974, 62191, 62409, 62628, 62847, 63067 +dd 63287, 63509, 63731, 63954, 64178, 64402, 64627, 64853, 65080, 65308 +dd 65536, 65765, 65995, 66226, 66458, 66690, 66923, 67157, 67392, 67628 +dd 67865, 68102, 68340, 68580, 68820, 69061, 69302, 69545, 69789, 70033 +dd 70279, 70525, 70772, 71021, 71270, 71520, 71771, 72023, 72276, 72530 +dd 72785, 73041, 73298, 73556, 73815, 74075, 74336, 74598, 74861, 75125 +dd 75391, 75657, 75924, 76193, 76462, 76733, 77005, 77277, 77551, 77827 +dd 78103, 78380, 78659, 78938, 79219, 79502, 79785, 80069, 80355, 80642 +dd 80930, 81220, 81510, 81802, 82096, 82390, 82686, 82983, 83281, 83581 +dd 83882, 84185, 84489, 84794, 85100, 85408, 85718, 86028, 86340, 86654 +dd 86969, 87286, 87604, 87923, 88244, 88567, 88891, 89216, 89544, 89872 +dd 90203, 90534, 90868, 91203, 91540, 91878, 92218, 92560, 92903, 93248 +dd 93595, 93944, 94294, 94646, 95000, 95355, 95713, 96072, 96433, 96796 +dd 97161, 97528, 97897, 98267, 98640, 99014, 99391, 99769, 100150, 100532 +dd 100917, 101303, 101692, 102083, 102476, 102871, 103268, 103668, 104069, 104473 +dd 104880, 105288, 105699, 106112, 106527, 106945, 107365, 107788, 108213, 108640 +dd 109070, 109503, 109938, 110375, 110815, 111258, 111703, 112151, 112602, 113056 +dd 113512, 113971, 114432, 114897, 115364, 115834, 116308, 116784, 117263, 117745 +dd 118230, 118718, 119210, 119704, 120202, 120702, 121206, 121714, 122224, 122738 +dd 123255, 123776, 124300, 124828, 125359, 125893, 126432, 126974, 127519, 128069 +dd 128622, 129179, 129739, 130304, 130872, 131445, 132021, 132602, 133187, 133776 +dd 134369, 134966, 135568, 136174, 136784, 137399, 138018, 138642, 139271, 139904 +dd 140542, 141185, 141833, 142485, 143143, 143806, 144473, 145146, 145824, 146508 +dd 147196, 147890, 148590, 149295, 150006, 150722, 151445, 152173, 152907, 153647 +dd 154393, 155145, 155904, 156669, 157440, 158218, 159002, 159793, 160591, 161396 +dd 162207, 163026, 163852, 164685, 165525, 166373, 167228, 168091, 168962, 169841 +dd 170727, 171622, 172525, 173436, 174356, 175284, 176221, 177167, 178122, 179086 +dd 180059, 181041, 182033, 183035, 184046, 185068, 186100, 187141, 188194, 189257 +dd 190330, 191415, 192511, 193618, 194736, 195866, 197008, 198163, 199329, 200508 +dd 201699, 202903, 204121, 205351, 206596, 207854, 209126, 210412, 211713, 213028 +dd 214359, 215704, 217066, 218443, 219836, 221246, 222672, 224116, 225576, 227055 +dd 228551, 230066, 231599, 233152, 234724, 236315, 237927, 239559, 241213, 242887 +dd 244584, 246302, 248044, 249808, 251597, 253409, 255246, 257108, 258996, 260910 +dd 262851, 264819, 266815, 268839, 270893, 272977, 275091, 277237, 279414, 281624 +dd 283868, 286145, 288458, 290806, 293191, 295614, 298075, 300575, 303116, 305698 +dd 308323, 310991, 313703, 316461, 319266, 322120, 325022, 327976, 330981, 334040 +dd 337153, 340324, 343552, 346839, 350189, 353601, 357078, 360621, 364234, 367917 +dd 371673, 375504, 379413, 383401, 387472, 391628, 395871, 400204, 404631, 409155 +dd 413778, 418504, 423337, 428280, 433337, 438512, 443809, 449233, 454788, 460480 +dd 466313, 472292, 478424, 484715, 491169, 497795, 504599, 511589, 518771, 526154 +dd 533748, 541560, 549601, 557881, 566411, 575202, 584267, 593618, 603269, 613236 +dd 623533, 634179, 645190, 656586, 668388, 680617, 693298, 706457, 720119, 734316 +dd 749080, 764444, 780447, 797130, 814536, 832714, 851716, 871601, 892431, 914274 +dd 937208, 961317, 986692, 1013437, 1041665, 1071504, 1103096, 1136601, 1172197, 1210088 +dd 1250501, 1293700, 1339981, 1389688, 1443215, 1501021, 1563642, 1631704, 1705950, 1787264 +dd 1876705, 1975558, 2085389, 2208138, 2346225, 2502719, 2681563, 2887917, 3128656, 3413159 +dd 3754555, 4171808, 4693365, 5363928, 6257998, 7509682, 9387188, 12516340, 18774605, 37549324 +dd 1024-900 dup(99999999) diff --git a/GLENZ/NEW.9 b/GLENZ/NEW.9 new file mode 100644 index 0000000..9fb2702 --- /dev/null +++ b/GLENZ/NEW.9 @@ -0,0 +1,306 @@ +;!!!!!! TRANSPARENT NEW COPPER !!!!!! + +FREELINE equ 200 + +PUBLIC _newsinus,_newsinusx +_newsinus dw 512 dup(0) +_newsinusx dw -1 + +newgroup PROC NEAR + ;hline list in gs:si + push ds + mov ax,SEG newdata + mov ds,ax + mov bx,gs:[si] + add si,2 +@@1: mov ax,gs:[si] + add si,2 + cmp ax,-32767 + je @@2 + mov dx,gs:[si] + add si,2 + cmp bx,7eh + jne @@z +@@z: push bx + ;hline ax..dx,bx with gs:color + cmp ax,dx + jle @@3 + xchg ax,dx +@@3: ; + mov cx,cs:_newsinusx + cmp cx,-1 + je @@nosin + push bx + add bx,cx + shl bx,1 + add ax,cs:_newsinus[bx] + add dx,cs:_newsinus[bx] + pop bx +@@nosin:; + cmp ax,0 + jge @@11 + xor ax,ax + cmp dx,0 + jl @@0 +@@11: cmp dx,320 + jle @@12 + mov dx,320 + cmp ax,320 + jg @@0 +@@12: push dx + shl bx,1 + mov dx,ds:[bx] + mov bp,ds:[FREELINE*2] + mov ds:[bx],bp + mov ds:[FREELINE*2],dx + mov bx,dx + ;modify list bx=>bp (edx/hi=last color) + ;copy blocks < hline start + xor edx,edx +@@b: mov ecx,ds:[bx] + cmp cx,ax + jae @@a ;[bx] bigger.. + add bx,4 + mov ds:[bp],ecx + add bp,4 + jmp @@b +@@a: ;add hline start + jne @@aa + mov ds:[bp],ax + mov ax,gs:color + ror ecx,16 + xor ax,cx + mov ds:[bp+2],ax + add bp,4 + add bx,4 + mov ecx,ds:[bx] + pop ax + jmp @@d +@@aa: rol eax,16 + mov ax,gs:color + rol eax,16 + mov ds:[bp],eax + add bp,4 + ;copy blocks < hline end + pop ax +@@d: cmp cx,ax + jae @@c + add bx,4 + mov ds:[bp],ecx + add bp,4 + mov edx,ecx + mov ecx,ds:[bx] + jmp @@d +@@c: ;add hline end + jne @@ca + mov ds:[bp],ax + mov ax,gs:color + ror ecx,16 + xor ax,cx + mov ds:[bp+2],ax + add bp,4 + add bx,4 + mov ecx,ds:[bx] + jmp @@f +@@ca: mov ds:[bp],ax + mov ax,gs:color + mov ds:[bp+2],ax + add bp,4 + ;copy rest of the list +@@f: cmp cx,32767 + je @@e + add bx,4 + mov ds:[bp],ecx + add bp,4 + mov ecx,ds:[bx] + jmp @@f +@@e: ;last + mov ds:[bp],ecx +@@0: pop bx + inc bx + jmp @@1 +@@2: pop ds + ret +newgroup ENDP + +grouppage dw 1024 + +PUBLIC _initnewgroup +_initnewgroup PROC FAR + CBEG + mov ax,SEG newdata + mov ds,ax + mov dx,cs:grouppage + xor dx,32768 + mov cs:grouppage,dx + mov cx,201 + xor bx,bx +@@2: mov ax,ds:[bx] + mov ds:[bx],dx + mov ds:[bx+256*2],ax + add dx,128 + add bx,2 + loop @@2 + mov cx,200 + mov eax,32767 + mov bx,cs:grouppage +@@1: mov ds:[bx],eax + add bx,128 + loop @@1 + CEND +_initnewgroup ENDP + +ALIGN 2 +dng_bgcolor dw 0 +dng_rowbase dw 0 +dng_random dw 0 + +PUBLIC _drawnewgroup +_drawnewgroup PROC FAR + CBEG + LOADDS + mov dx,3c4h + mov ax,0f02h + out dx,ax + mov es,ds:vram + mov ax,SEG newdata + mov gs,ax + mov cx,200 + xor bx,bx + xor di,di +@@3: push bx + push cx + push di + shl bx,1 + mov si,gs:[bx] + mov di,gs:[bx+512] ;last time row (for sorting out differences) + mov bp,32768 + ;si=thistime + ;di=lasttime + ;dl=thiscolor + ;dh=lastcolor + ;cx=thisX + ;bx=lastX + ;ax=X + ;bp=tmpdest + mov dx,cs:dng_bgcolor + mov dh,dl + xor ax,ax + mov cx,gs:[si] + mov bx,gs:[di] +@@1: cmp bx,cx + je @@10 + jl @@2 + ;cx..bx + cmp dl,dh + je @@5 + ;ax..cx color dl + mov gs:[bp],ax + mov gs:[bp+2],cx + add bp,6 + mov gs:[bp+4-6],dx +@@5: mov ax,cx + xor dl,gs:[si+2] + add si,4 + mov cx,gs:[si] + jmp @@1 +@@10: ;bx=cx + cmp bx,32767 + je @@7 + cmp dl,dh + je @@11 + ;ax..bx color dl + mov gs:[bp],ax + mov gs:[bp+2],bx + add bp,6 + mov gs:[bp+4-6],dx +@@11: mov ax,bx + xor dh,gs:[di+2] + add di,4 + mov bx,gs:[di] + xor dl,gs:[si+2] + add si,4 + mov cx,gs:[si] + jmp @@1 +@@2: ;bx..cx + cmp dl,dh + je @@4 + ;ax..bx color dl + mov gs:[bp],ax + mov gs:[bp+2],bx + mov gs:[bp+4],dx + add bp,6 +@@4: mov ax,bx + xor dh,gs:[di+2] + add di,4 + mov bx,gs:[di] + jmp @@1 +@@7: pop di + ;this line data in 8000h..bp + mov si,32768 + cmp si,bp + je @@8 +@@6: mov edx,gs:[si] + mov bx,dx + shr edx,16 + mov ch,gs:[si+4] + ; + mov cl,bl + and cl,3 + mov al,00fh + rol al,cl + mov cl,dl + and cl,3 + mov ah,0f0h + rol ah,cl + + shr bx,2 + shr dx,2 + cmp bx,dx + jne @@h1 + + and al,ah + mov dx,3c5h + out dx,al + mov es:[di+bx],ch + jmp @@h0 + +@@h1: inc bx + cmp bx,dx + jne @@h2 + mov dx,3c5h + out dx,al + mov es:[di+bx-1],ch + mov al,ah + out dx,al + mov es:[di+bx],ch + jmp @@h0 + +@@h2: push di + mov cl,dl + sub cl,bl + add di,bx + mov dx,3c5h + out dx,al + mov es:[di-1],ch + mov al,0fh + out dx,al + mov al,ch + xor ch,ch + rep stosb + xchg al,ah + out dx,al + mov es:[di],ah + pop di +@@h0: ; + add si,6 + cmp si,bp + jb @@6 +@@8: pop cx + pop bx + add di,80 + inc bx + loop @@3 + CEND +_drawnewgroup ENDP + diff --git a/GLENZ/NEW.ABK b/GLENZ/NEW.ABK new file mode 100644 index 0000000..6181b21 --- /dev/null +++ b/GLENZ/NEW.ABK @@ -0,0 +1,270 @@ +;!!!!!! TRANSPARENT NEW COPPER !!!!!! + +FREELINE equ 200 + +ALIGN 2 +newrows LABEL WORD +cc=0 +REPT 200 + dw cc + cc=cc+320 +ENDM + +PUBLIC _newsinus,_newsinusx +_newsinus dw 512 dup(0) +_newsinusx dw -1 + +newgroup PROC NEAR + ;hline list in gs:si + push ds + mov ax,SEG newdata1 + mov ds,ax + mov ax,SEG newdata2 + mov fs,ax + mov bx,gs:[si] + shl bx,1 + mov bx,cs:newrows[bx] + add si,2 + mov al,gs:color1 +@@1: mov edx,gs:[si] + cmp dx,-32767 + je @@2 + mov di,dx + shr edx,16 + add si,4 + cmp di,dx + jl @@133 + xchg di,dx +@@133: cmp di,1 + jl @@11 +@@111: cmp dx,319 + jg @@12 +@@122: add di,bx + xor ds:[di],al + shr di,2 + mov byte ptr fs:[di],1 + mov di,dx + add di,bx + xor ds:[di],al + shr di,2 + mov byte ptr fs:[di],1 +@@0: add bx,320 + jmp @@1 +@@2: pop ds + ret +@@11: mov di,1 + cmp dx,1 + jl @@0 + jmp @@111 +@@12: mov dx,319 + cmp di,319 + jg @@0 + jmp @@122 +newgroup ENDP + +PUBLIC _initnewgroup +_initnewgroup PROC FAR + CBEG + mov ax,SEG newdata2 + mov ds,ax + mov ax,-1 + mov ds:[8000h],ax + mov ds:[8000h+4000h],ax + CEND +_initnewgroup ENDP + +ALIGN 2 +dng_bgcolor dw 0 +dng_rowbase dw 0 +dng_random dw 0 +dng_page dw 8000h + +checkdword PROC NEAR + mov edx,fs:[bx] + xor eax,eax + mov fs:[bx],eax ;=0 + or dl,dl + jnz @@1 +@@1b: or dh,dh + jnz @@2 +@@2b: shr edx,16 + or dl,dl + jnz @@3 +@@3b: or dh,dh + jnz @@4 + ret +@@4: mov al,dh + shl eax,16 + lea ax,[bx+3] + mov ds:[si],eax + add si,4 + ret +@@3: mov al,dl + shl eax,16 + lea ax,[bx+2] + mov ds:[si],eax + add si,4 + jmp @@3b +@@2: mov al,dh + shl eax,16 + lea ax,[bx+1] + mov ds:[si],eax + add si,4 + jmp @@2b +@@1: mov al,dl + shl eax,16 + lea ax,[bx] + mov ds:[si],eax + add si,4 + jmp @@1b +checkdword ENDP + +PUBLIC _drawnewgroup +_drawnewgroup PROC FAR + CBEG + LOADDS + cld + mov dx,3c4h + mov ax,0f02h + out dx,ax + + ;mov ax,SEG newdata1 + ;mov ds,ax + ;xor si,si + ;mov ax,0a000h + ;mov es,ax + ;xor di,di + ;mov cx,16000 + ;rep movsd + + mov ax,SEG newdata2 + mov es,ax + mov ax,SEG newdata1 + mov fs,ax + xor di,di + mov ax,SEG newdata2 + mov ds,ax + mov si,cs:dng_page + xor si,4000h + mov cs:dng_page,si + + INT3 + mov cx,4000 +@@9: xor eax,eax + repz scasd + jcxz @@10 + lea bx,[di-4] + mov edx,es:[bx] + mov es:[bx],eax ;=0 + shl bx,2 + or dl,dl + jz @@c1 + xchg ebp,edx + call checkdword + xchg ebp,edx +@@c1: add bx,4 + or dh,dh + jz @@c2 + xchg ebp,edx + call checkdword + xchg ebp,edx +@@c2: add bx,4 + shr edx,16 + or dl,dl + jz @@c3 + xchg ebp,edx + call checkdword + xchg ebp,edx +@@c3: add bx,4 + or dh,dh + jz @@c4 + xchg ebp,edx + call checkdword + xchg ebp,edx +@@c4: jmp @@9 + ; +@@10: mov eax,-1 + mov ds:[si],eax + + setborder 4 + + mov ax,0a000h + mov es,ax + xor di,di + mov si,cs:dng_page + mov bx,si + xor bx,4000h + xor ax,ax + ;si=new bx=last + ;cx=newpos dx=lastpos + ;al=newcol ah=lastcol + mov edx,ds:[bx] + add bx,4 + mov ecx,ds:[si] + add si,4 + ; +@@21: cmp dx,cx + jb @@23 + je @@22 + ;cx=0 && xstart, di->end + mov ax,cs:tmp_color + mov cs:[bp+NE_COLOR],ax + mov bx,es:[si+2] ;y1 + mov cx,es:[di+2] ;y2 + cmp bx,cx + jg @@i1 ;y1>y2 + mov ax,es:[si+0] ;x1 + mov dx,es:[di+0] ;x2 + jmp @@i0 +@@i1: xchg bx,cx + mov ax,es:[di+0] ;x1 + mov dx,es:[si+0] ;x2 +@@i0: ;ax,bx=xy1 dx,cx=xy2 +@@i9: mov cs:[bp+NE_Y1],bx + mov cs:[bp+NE_Y2],cx + mov word ptr cs:[bp+NE_X],0 + mov cs:[bp+NE_X+2],ax + neg ax + add ax,dx + shl eax,16 + cdq + sub cx,bx + ;cx=y2-y1,edx:eax=(x2-x1)<<16 + cmp cx,0 + je @@n1 ;skip horizontal lines + movzx ecx,cx + idiv ecx + mov cs:[bp+NE_DX],eax + ;!!!if y1<0, clip + cmp bx,0 + jge @@nc + mov dx,cs:[bp+NE_Y2] + cmp dx,0 + jle @@n1 + neg bx + movzx ebx,bx + imul ebx + add cs:[bp+NE_X],eax + xor bx,bx + mov cs:[bp+NE_Y1],bx +@@nc: ;!!! + shl bx,1 + mov ax,cs:nep[bx] + or ax,ax + jnz @@j1 + ;first on this row + mov cs:nep[bx],bp + mov word ptr cs:[bp+NE_NEXT],0 + jmp @@j0 +@@j1: ;add to this row + ;scan if already exists + push ax + push si + mov si,ax + jmp @@h11 +@@h1: mov si,cs:[si+NE_NEXT] +@@h11: mov ax,cs:[bp+NE_Y2] + cmp ax,cs:[si+NE_Y2] + jne @@h2 + mov eax,cs:[bp+NE_X] + cmp eax,cs:[si+NE_X] + jne @@h2 + mov eax,cs:[bp+NE_DX] + cmp eax,cs:[si+NE_DX] + jne @@h2 + ;duplicate line SI + mov al,cs:[bp+NE_COLOR] + xor cs:[si+NE_COLOR],al + pop si + pop ax + jmp @@n1 +@@h2: cmp si,0 + jne @@h1 ;end of list +@@h3: pop si + pop ax + mov cs:nep[bx],bp + mov word ptr cs:[bp+NE_NEXT],ax +@@j0: add bp,16 +@@n1: ;next + pop cx + loop @@3 + add si,4 + mov di,si + jmp @@2 + +@@1: mov cs:nec,bp + sub bp,OFFSET ne + shr bp,4 + mov cs:__ndebug1,bp + + ret +__newgroup ENDP diff --git a/GLENZ/NEW.CUT b/GLENZ/NEW.CUT new file mode 100644 index 0000000..66b1baf --- /dev/null +++ b/GLENZ/NEW.CUT @@ -0,0 +1,20 @@ + mov ax,0a000h + mov es,ax + xor di,di + xor ax,ax + mov cx,32000 + rep stosw + + mov ax,SEG newdata1 + mov ds,ax + xor si,si + xor di,di + xor ax,ax + mov dx,cs:ndp +@@b: mov bx,ds:[si] + mov al,ds:[si+2] + xor es:[bx],al + add si,4 + cmp si,dx + jb @@b + ret diff --git a/GLENZ/NEW1.ASM b/GLENZ/NEW1.ASM new file mode 100644 index 0000000..addaee6 --- /dev/null +++ b/GLENZ/NEW1.ASM @@ -0,0 +1,206 @@ +FREELINE equ 200 + +ALIGN 2 +bgcolor dw 101h + +newgroup PROC NEAR + ;hline list in gs:si + push ds + mov ax,SEG newdata + mov ds,ax + mov bx,gs:[si] + add si,2 +@@1: mov ax,gs:[si] + add si,2 + cmp ax,-32767 + je @@2 + mov dx,gs:[si] + add si,2 + cmp bx,7eh + jne @@z +@@z: push bx + ;hline ax..dx,bx with gs:color + cmp ax,dx + jle @@3 + xchg ax,dx +@@3: push dx + shl bx,1 + mov dx,ds:[bx] + mov bp,ds:[FREELINE*2] + mov ds:[bx],bp + mov ds:[FREELINE*2],dx + mov bx,dx + ;modify list bx=>bp (edx/hi=last color) + ;copy blocks < hline start + xor edx,edx +@@b: mov ecx,ds:[bx] + cmp cx,ax + jae @@a ;[bx] bigger.. + add bx,4 + mov ds:[bp],ecx + add bp,4 + jmp @@b +@@a: ;add hline start + jne @@aa + mov edx,ecx + add bx,4 + mov ecx,ds:[bx] +@@aa: mov ds:[bp],ax + mov ax,gs:color + mov ah,al + mov ds:[bp+2],ax + add bp,4 + ;copy blocks < hline end + pop ax +@@d: cmp cx,ax + jae @@c + add bx,4 + mov edx,ecx + mov ecx,ds:[bx] + jmp @@d +@@c: ;add hline end + jne @@ca + mov edx,ecx + add bx,4 + mov ecx,ds:[bx] +@@ca: mov dx,ax + mov ds:[bp],edx + add bp,4 + ;copy rest of the list +@@f: cmp cx,32767 + je @@e + add bx,4 + mov ds:[bp],ecx + add bp,4 + mov ecx,ds:[bx] + jmp @@f +@@e: ;last + mov ds:[bp],ecx + pop bx + inc bx + jmp @@1 +@@2: pop ds + ret +newgroup ENDP + +grouppage dw 1024 + +PUBLIC _initnewgroup +_initnewgroup PROC FAR + CBEG + mov ax,SEG newdata + mov ds,ax + mov dx,cs:grouppage + xor dx,32768 + mov cs:grouppage,dx + mov cx,201 + xor bx,bx +@@2: mov ax,ds:[bx] + mov ds:[bx],dx + mov ds:[bx+256*2],ax + add dx,128 + add bx,2 + loop @@2 + mov cx,200 + mov eax,32767 + mov bx,cs:grouppage +@@1: mov ds:[bx],eax + add bx,128 + loop @@1 + CEND +_initnewgroup ENDP + +PUBLIC _drawnewgroup +_drawnewgroup PROC FAR + CBEG + LOADDS + mov dx,3c4h + mov ax,0f02h + out dx,ax + mov es,ds:vram + mov ax,SEG newdata + mov gs,ax + mov cx,200 + xor bx,bx + xor di,di +@@3: push cx + push di + push bx + shl bx,1 + mov si,gs:[bx] + mov bx,di + mov bp,cs:bgcolor + mov dx,3c5h + mov al,0fh +@@1: mov cx,gs:[si] + cmp cx,32767 + je @@2 + mov ah,cl + shr cx,2 + add cx,bx + sub cx,di + jcxz @@4 + out dx,al + xchg ax,bp + dec cx + mov es:[di],ah + inc di + mov al,0fh + out dx,al + mov al,ah + shr cx,1 + rep stosw + adc cx,cx + rep stosb + mov ch,al + mov ax,bp + mov al,0f0h + mov cl,ah + and cl,3 + rol al,cl + out dx,al + mov es:[di],ch + xor al,0fh + mov bp,gs:[si+2] + add si,4 + jmp @@1 +@@4: mov ch,0f0h + mov cl,ah + and cl,3 + rol ch,cl + mov ah,ch + and al,ch + out dx,al + mov cx,bp + mov es:[di],cl + mov al,ah + xor al,0fh + mov bp,gs:[si+2] + add si,4 + jmp @@1 +@@2: out dx,al + mov ax,cs:bgcolor + mov cx,bx + add cx,80 + sub cx,di + jcxz @@5 + dec cx + mov es:[di],ah + inc di + mov al,0fh + out dx,al + mov al,ah + shr cx,1 + rep stosw + adc cx,cx + rep stosb +@@5: ; + pop bx + pop di + pop cx + add di,80 + inc bx + loop @@3 + CEND +_drawnewgroup ENDP + diff --git a/GLENZ/NEW2.ASM b/GLENZ/NEW2.ASM new file mode 100644 index 0000000..d290f05 --- /dev/null +++ b/GLENZ/NEW2.ASM @@ -0,0 +1,208 @@ +FREELINE equ 200 + +newgroup PROC NEAR + ;hline list in gs:si + push ds + mov ax,SEG newdata + mov ds,ax + mov bx,gs:[si] + add si,2 +@@1: mov ax,gs:[si] + add si,2 + cmp ax,-32767 + je @@2 + mov dx,gs:[si] + add si,2 + cmp bx,7eh + jne @@z +@@z: push bx + ;hline ax..dx,bx with gs:color + cmp ax,dx + jle @@3 + xchg ax,dx +@@3: push dx + shl bx,1 + mov dx,ds:[bx] + mov bp,ds:[FREELINE*2] + mov ds:[bx],bp + mov ds:[FREELINE*2],dx + mov bx,dx + ;modify list bx=>bp (edx/hi=last color) + ;copy blocks < hline start + xor edx,edx +@@b: mov ecx,ds:[bx] + cmp cx,ax + jae @@a ;[bx] bigger.. + add bx,4 + mov ds:[bp],ecx + add bp,4 + jmp @@b +@@a: ;add hline start + jne @@aa + mov edx,ecx + add bx,4 + mov ecx,ds:[bx] +@@aa: mov ds:[bp],ax + mov ax,gs:color + mov ah,al + mov ds:[bp+2],ax + add bp,4 + ;copy blocks < hline end + pop ax +@@d: cmp cx,ax + jae @@c + add bx,4 + mov edx,ecx + mov ecx,ds:[bx] + jmp @@d +@@c: ;add hline end + jne @@ca + mov edx,ecx + add bx,4 + mov ecx,ds:[bx] +@@ca: mov dx,ax + mov ds:[bp],edx + add bp,4 + ;copy rest of the list +@@f: cmp cx,32767 + je @@e + add bx,4 + mov ds:[bp],ecx + add bp,4 + mov ecx,ds:[bx] + jmp @@f +@@e: ;last + mov ds:[bp],ecx + pop bx + inc bx + jmp @@1 +@@2: pop ds + ret +newgroup ENDP + +grouppage dw 1024 + +PUBLIC _initnewgroup +_initnewgroup PROC FAR + CBEG + mov ax,SEG newdata + mov ds,ax + mov dx,cs:grouppage + xor dx,32768 + mov cs:grouppage,dx + mov cx,201 + xor bx,bx +@@2: mov ax,ds:[bx] + mov ds:[bx],dx + mov ds:[bx+256*2],ax + add dx,128 + add bx,2 + loop @@2 + mov cx,200 + mov eax,32767 + mov bx,cs:grouppage +@@1: mov ds:[bx],eax + add bx,128 + loop @@1 + CEND +_initnewgroup ENDP + +ALIGN 2 +dng_bgcolor dw 101h +dng_rowbase dw 0 + +PUBLIC _drawnewgroup +_drawnewgroup PROC FAR + CBEG + LOADDS + mov dx,3c4h + mov ax,0f02h + out dx,ax + mov es,ds:vram + mov ax,SEG newdata + mov gs,ax + mov cx,200 + xor bx,bx + xor di,di +@@3: push cx + push di + push bx + shl bx,1 + mov si,gs:[bx] + mov bx,gs:[bx+512] ;last time row (for sorting out differences) + mov cs:dng_rowbase,di + mov bp,cs:dng_bgcolor + mov dx,3c5h + mov al,0fh +@@1: mov cx,gs:[si] + cmp cx,32767 + je @@2 + mov ah,cl + shr cx,2 + add cx,cs:dng_rowbase + sub cx,di + jcxz @@4 + out dx,al + xchg ax,bp + dec cx + mov es:[di],ah + inc di + mov al,0fh + out dx,al + mov al,ah + shr cx,1 + rep stosw + adc cx,cx + rep stosb + mov ch,al + mov ax,bp + mov al,0f0h + mov cl,ah + and cl,3 + rol al,cl + out dx,al + mov es:[di],ch + xor al,0fh + mov bp,gs:[si+2] + add si,4 + jmp @@1 +@@4: mov ch,0f0h + mov cl,ah + and cl,3 + rol ch,cl + mov ah,ch + and al,ch + out dx,al + mov cx,bp + mov es:[di],cl + mov al,ah + xor al,0fh + mov bp,gs:[si+2] + add si,4 + jmp @@1 +@@2: out dx,al + mov ax,cs:dng_bgcolor + mov cx,cs:dng_rowbase + add cx,80 + sub cx,di + jcxz @@5 + dec cx + mov es:[di],ah + inc di + mov al,0fh + out dx,al + mov al,ah + shr cx,1 + rep stosw + adc cx,cx + rep stosb +@@5: ; + pop bx + pop di + pop cx + add di,80 + inc bx + loop @@3 + CEND +_drawnewgroup ENDP + diff --git a/GLENZ/NEWNORM.ASM b/GLENZ/NEWNORM.ASM new file mode 100644 index 0000000..abc9525 --- /dev/null +++ b/GLENZ/NEWNORM.ASM @@ -0,0 +1,267 @@ +FREELINE equ 200 + +newgroup PROC NEAR + ;hline list in gs:si + push ds + mov ax,SEG newdata + mov ds,ax + mov bx,gs:[si] + add si,2 +@@1: mov ax,gs:[si] + add si,2 + cmp ax,-32767 + je @@2 + mov dx,gs:[si] + add si,2 + cmp bx,7eh + jne @@z +@@z: push bx + ;hline ax..dx,bx with gs:color + cmp ax,dx + jle @@3 + xchg ax,dx +@@3: push dx + shl bx,1 + mov dx,ds:[bx] + mov bp,ds:[FREELINE*2] + mov ds:[bx],bp + mov ds:[FREELINE*2],dx + mov bx,dx + ;modify list bx=>bp (edx/hi=last color) + ;copy blocks < hline start + xor edx,edx +@@b: mov ecx,ds:[bx] + cmp cx,ax + jae @@a ;[bx] bigger.. + add bx,4 + mov ds:[bp],ecx + add bp,4 + jmp @@b +@@a: ;add hline start + jne @@aa + mov edx,ecx + add bx,4 + mov ecx,ds:[bx] +@@aa: mov ds:[bp],ax + mov ax,gs:color + mov ah,al + mov ds:[bp+2],ax + add bp,4 + ;copy blocks < hline end + pop ax +@@d: cmp cx,ax + jae @@c + add bx,4 + mov edx,ecx + mov ecx,ds:[bx] + jmp @@d +@@c: ;add hline end + jne @@ca + mov edx,ecx + add bx,4 + mov ecx,ds:[bx] +@@ca: mov dx,ax + mov ds:[bp],edx + add bp,4 + ;copy rest of the list +@@f: cmp cx,32767 + je @@e + add bx,4 + mov ds:[bp],ecx + add bp,4 + mov ecx,ds:[bx] + jmp @@f +@@e: ;last + mov ds:[bp],ecx + pop bx + inc bx + jmp @@1 +@@2: pop ds + ret +newgroup ENDP + +grouppage dw 1024 + +PUBLIC _initnewgroup +_initnewgroup PROC FAR + CBEG + mov ax,SEG newdata + mov ds,ax + mov dx,cs:grouppage + xor dx,32768 + mov cs:grouppage,dx + mov cx,201 + xor bx,bx +@@2: mov ax,ds:[bx] + mov ds:[bx],dx + mov ds:[bx+256*2],ax + add dx,128 + add bx,2 + loop @@2 + mov cx,200 + mov eax,32767 + mov bx,cs:grouppage +@@1: mov ds:[bx],eax + add bx,128 + loop @@1 + CEND +_initnewgroup ENDP + +ALIGN 2 +dng_bgcolor dw 0 +dng_rowbase dw 0 +dng_random dw 0 + +PUBLIC _drawnewgroup +_drawnewgroup PROC FAR + CBEG + LOADDS + mov dx,3c4h + mov ax,0f02h + out dx,ax + mov es,ds:vram + mov ax,SEG newdata + mov gs,ax + mov cx,200 + xor bx,bx + xor di,di +@@3: push cx + push di + push bx + shl bx,1 + mov si,gs:[bx] + mov di,gs:[bx+512] ;last time row (for sorting out differences) + mov bp,32768 + ;si=thistime + ;di=lasttime + ;dl=thiscolor + ;dh=lastcolor + ;cx=thisX + ;bx=lastX + ;ax=X + ;bp=tmpdest + mov dx,cs:dng_bgcolor + mov dh,dl + xor ax,ax + mov cx,gs:[si] + mov bx,gs:[di] +@@1: cmp bx,cx + je @@10 + jl @@2 + ;cx..bx + cmp dl,dh + je @@5 + ;ax..cx color dl + mov gs:[bp],ax + mov gs:[bp+2],cx + mov gs:[bp+4],dx + add bp,6 +@@5: mov ax,cx + mov dl,gs:[si+2] + add si,4 + mov cx,gs:[si] + jmp @@1 +@@10: ;bx=cx + cmp bx,32767 + je @@7 + cmp dl,dh + je @@11 + ;ax..bx color dl + mov gs:[bp],ax + mov gs:[bp+2],bx + mov gs:[bp+4],dx + add bp,6 +@@11: mov ax,bx + mov dh,gs:[di+2] + add di,4 + mov bx,gs:[di] + mov dl,gs:[si+2] + add si,4 + mov cx,gs:[si] + jmp @@1 +@@2: ;bx..cx + cmp dl,dh + je @@4 + ;ax..bx color dl + mov gs:[bp],ax + mov gs:[bp+2],bx + mov gs:[bp+4],dx + add bp,6 +@@4: mov ax,bx + mov dh,gs:[di+2] + add di,4 + mov bx,gs:[di] + jmp @@1 +@@7: pop bx + pop di + ;this line data in 8000h..bp + mov si,32768 + cmp si,bp + je @@8 +@@6: push di + push bx + push bp + mov ch,gs:[si+4] + mov ds:color,ax + mov bx,gs:[si] + mov dx,gs:[si+2] + ; + mov cl,bl + and cl,3 + mov al,00fh + rol al,cl + mov cl,dl + and cl,3 + mov ah,0f0h + rol ah,cl + + shr bx,2 + shr dx,2 + cmp bx,dx + jne @@h1 + + and al,ah + mov dx,3c5h + out dx,al + mov es:[di+bx],ch + jmp @@h0 + +@@h1: inc bx + cmp bx,dx + jne @@h2 + mov dx,3c5h + out dx,al + mov es:[di+bx-1],ch + mov al,ah + out dx,al + mov es:[di+bx],ch + jmp @@h0 + +@@h2: mov cl,dl + sub cl,bl + add di,bx + mov dx,3c5h + out dx,al + mov es:[di-1],ch + mov al,0fh + out dx,al + mov al,ch + xor ch,ch + rep stosb + xchg al,ah + out dx,al + mov es:[di],ah +@@h0: ; + pop bp + pop bx + pop di + add si,6 + cmp si,bp + jb @@6 +@@8: pop cx + add di,80 + inc bx + loop @@3 + CEND +_drawnewgroup ENDP + diff --git a/GLENZ/NOTS b/GLENZ/NOTS new file mode 100644 index 0000000..4e82055 --- /dev/null +++ b/GLENZ/NOTS @@ -0,0 +1 @@ +martin, silents diff --git a/GLENZ/PIC001.LBM b/GLENZ/PIC001.LBM new file mode 100644 index 0000000..ff56c4d Binary files /dev/null and b/GLENZ/PIC001.LBM differ diff --git a/GLENZ/PIC002.LBM b/GLENZ/PIC002.LBM new file mode 100644 index 0000000..ff56c4d Binary files /dev/null and b/GLENZ/PIC002.LBM differ diff --git a/GLENZ/SIN1024.INC b/GLENZ/SIN1024.INC new file mode 100644 index 0000000..6614fbe --- /dev/null +++ b/GLENZ/SIN1024.INC @@ -0,0 +1,33 @@ +_sin1024 LABEL WORD +dw 0,1,3,4,6,7,9,10,12,14,15,17,18,20,21,23,25,26,28,29,31,32,34,36,37,39,40,42,43,45,46,48 +dw 49,51,53,54,56,57,59,60,62,63,65,66,68,69,71,72,74,75,77,78,80,81,83,84,86,87,89,90,92,93,95,96 +dw 97,99,100,102,103,105,106,108,109,110,112,113,115,116,117,119,120,122,123,124,126,127,128,130,131,132,134,135,136,138,139,140 +dw 142,143,144,146,147,148,149,151,152,153,155,156,157,158,159,161,162,163,164,166,167,168,169,170,171,173,174,175,176,177,178,179 +dw 181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,211 +dw 212,213,214,215,216,217,217,218,219,220,221,221,222,223,224,225,225,226,227,227,228,229,230,230,231,232,232,233,234,234,235,235 +dw 236,237,237,238,238,239,239,240,241,241,242,242,243,243,244,244,244,245,245,246,246,247,247,247,248,248,249,249,249,250,250,250 +dw 251,251,251,251,252,252,252,252,253,253,253,253,254,254,254,254,254,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255 +dw 256,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,254,254,254,254,253,253,253,253,252,252,252,252,251,251,251 +dw 251,250,250,250,249,249,249,248,248,247,247,247,246,246,245,245,244,244,244,243,243,242,242,241,241,240,239,239,238,238,237,237 +dw 236,235,235,234,234,233,232,232,231,230,230,229,228,227,227,226,225,225,224,223,222,221,221,220,219,218,217,217,216,215,214,213 +dw 212,211,211,210,209,208,207,206,205,204,203,202,201,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182 +dw 181,179,178,177,176,175,174,173,171,170,169,168,167,166,164,163,162,161,159,158,157,156,155,153,152,151,149,148,147,146,144,143 +dw 142,140,139,138,136,135,134,132,131,130,128,127,126,124,123,122,120,119,117,116,115,113,112,110,109,108,106,105,103,102,100,99 +dw 97,96,95,93,92,90,89,87,86,84,83,81,80,78,77,75,74,72,71,69,68,66,65,63,62,60,59,57,56,54,53,51 +dw 49,48,46,45,43,42,40,39,37,36,34,32,31,29,28,26,25,23,21,20,18,17,15,14,12,10,9,7,6,4,3,1 +dw 0,-1,-3,-4,-6,-7,-9,-10,-12,-14,-15,-17,-18,-20,-21,-23,-25,-26,-28,-29,-31,-32,-34,-36,-37,-39,-40,-42,-43,-45,-46,-48 +dw -49,-51,-53,-54,-56,-57,-59,-60,-62,-63,-65,-66,-68,-69,-71,-72,-74,-75,-77,-78,-80,-81,-83,-84,-86,-87,-89,-90,-92,-93,-95,-96 +dw -97,-99,-100,-102,-103,-105,-106,-108,-109,-110,-112,-113,-115,-116,-117,-119,-120,-122,-123,-124,-126,-127,-128,-130,-131,-132,-134,-135,-136,-138,-139,-140 +dw -142,-143,-144,-146,-147,-148,-149,-151,-152,-153,-155,-156,-157,-158,-159,-161,-162,-163,-164,-166,-167,-168,-169,-170,-171,-173,-174,-175,-176,-177,-178,-179 +dw -181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,-192,-193,-194,-195,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-211 +dw -212,-213,-214,-215,-216,-217,-217,-218,-219,-220,-221,-221,-222,-223,-224,-225,-225,-226,-227,-227,-228,-229,-230,-230,-231,-232,-232,-233,-234,-234,-235,-235 +dw -236,-237,-237,-238,-238,-239,-239,-240,-241,-241,-242,-242,-243,-243,-244,-244,-244,-245,-245,-246,-246,-247,-247,-247,-248,-248,-249,-249,-249,-250,-250,-250 +dw -251,-251,-251,-251,-252,-252,-252,-252,-253,-253,-253,-253,-254,-254,-254,-254,-254,-254,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255 +dw -256,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-254,-254,-254,-254,-254,-254,-253,-253,-253,-253,-252,-252,-252,-252,-251,-251,-251 +dw -251,-250,-250,-250,-249,-249,-249,-248,-248,-247,-247,-247,-246,-246,-245,-245,-244,-244,-244,-243,-243,-242,-242,-241,-241,-240,-239,-239,-238,-238,-237,-237 +dw -236,-235,-235,-234,-234,-233,-232,-232,-231,-230,-230,-229,-228,-227,-227,-226,-225,-225,-224,-223,-222,-221,-221,-220,-219,-218,-217,-217,-216,-215,-214,-213 +dw -212,-211,-211,-210,-209,-208,-207,-206,-205,-204,-203,-202,-201,-200,-199,-198,-197,-196,-195,-194,-193,-192,-191,-190,-189,-188,-187,-186,-185,-184,-183,-182 +dw -181,-179,-178,-177,-176,-175,-174,-173,-171,-170,-169,-168,-167,-166,-164,-163,-162,-161,-159,-158,-157,-156,-155,-153,-152,-151,-149,-148,-147,-146,-144,-143 +dw -142,-140,-139,-138,-136,-135,-134,-132,-131,-130,-128,-127,-126,-124,-123,-122,-120,-119,-117,-116,-115,-113,-112,-110,-109,-108,-106,-105,-103,-102,-100,-99 +dw -97,-96,-95,-93,-92,-90,-89,-87,-86,-84,-83,-81,-80,-78,-77,-75,-74,-72,-71,-69,-68,-66,-65,-63,-62,-60,-59,-57,-56,-54,-53,-51 +dw -49,-48,-46,-45,-43,-42,-40,-39,-37,-36,-34,-32,-31,-29,-28,-26,-25,-23,-21,-20,-18,-17,-15,-14,-12,-10,-9,-7,-6,-4,-3,-1 diff --git a/GLENZ/TMP b/GLENZ/TMP new file mode 100644 index 0000000..f563409 --- /dev/null +++ b/GLENZ/TMP @@ -0,0 +1 @@ +-157,-464,1030 Z:7000 LS:8 diff --git a/GLENZ/V.EXE b/GLENZ/V.EXE new file mode 100644 index 0000000..312662c Binary files /dev/null and b/GLENZ/V.EXE differ diff --git a/GLENZ/V.MAP b/GLENZ/V.MAP new file mode 100644 index 0000000..1d1ad9c --- /dev/null +++ b/GLENZ/V.MAP @@ -0,0 +1,61 @@ + + Start Stop Length Name Class + 00000H 006C3H 006C4H ZOOMER_TEXT CODE + 006C4H 017C8H 01105H MAIN_TEXT CODE + 017D0H 06BDDH 0540EH text__vid CODE + 06BE0H 06D57H 00178H text__asm CODE + 06D60H 079E0H 00C81H text__vec CODE + 079F0H 0B288H 03899H text__math CODE + 0B290H 0B363H 000D4H text_disc CODE + 0B370H 0D7FBH 0248CH glvtext CODE + 0D7FCH 0E36BH 00B70H _TEXT CODE + 0E370H 0E371H 00002H EMULATOR_TEXT CODE + 0E372H 0E372H 00000H C_ETEXT ENDCODE + 0E380H 10801H 02482H data_v DATA + 10802H 10AB5H 002B4H MAIN_DATA FAR_DATA + 10AB6H 10AB6H 00000H MAIN_CONST FAR_DATA + 10AB6H 10AB6H 00000H MAIN_BSS FAR_DATA + 10AC0H 10AC0H 00000H EMULATOR_DATA FAR_DATA + 10AC0H 1F6CFH 0EC10H text__zoom CODE2 + 1F6D0H 2F6BFH 0FFF0H data_new1 FARDATA + 2F6C0H 3F6AFH 0FFF0H data_new2 FARDATA + 3F6B0H 4F3BFH 0FD10H DATA__fc FARDATA + 4F3C0H 4FF95H 00BD6H FAR_BSS FAR_BSS + 4FFA0H 5FF9EH 0FFFFH FAR_BSS FAR_BSS + 5FFA0H 60D2FH 00D90H FAR_BSS FAR_BSS + 60D30H 60D71H 00042H NULL BEGDATA + 60D72H 61511H 007A0H _DATA DATA + 61512H 61513H 00002H XIQC DATA + 61514H 61521H 0000EH DBDATA DATA + 61522H 6152FH 0000EH CDATA DATA + 61530H 61530H 00000H XIFB DATA + 61530H 61530H 00000H XIF DATA + 61530H 61530H 00000H XIFE DATA + 61530H 61530H 00000H XIB DATA + 61530H 61530H 00000H XI DATA + 61530H 61530H 00000H XIE DATA + 61530H 61530H 00000H XPB DATA + 61530H 61530H 00000H XP DATA + 61530H 61530H 00000H XPE DATA + 61530H 61530H 00000H XCB DATA + 61530H 61530H 00000H XC DATA + 61530H 61530H 00000H XCE DATA + 61530H 61530H 00000H XCFB DATA + 61530H 61530H 00000H XCF DATA + 61530H 61530H 00000H XCFE DATA + 61530H 6154FH 00020H CONST CONST + 61550H 61557H 00008H HDR MSG + 61558H 6162DH 000D6H MSG MSG + 6162EH 6162FH 00002H PAD MSG + 61630H 61630H 00001H EPAD MSG + 61632H 61632H 00000H _BSS BSS + 61632H 61632H 00000H XOB BSS + 61632H 61632H 00000H XO BSS + 61632H 61632H 00000H XOE BSS + 61640H 61640H 00000H c_common BSS + 61640H 61E3FH 00800H STACK STACK + + Origin Group + 60D3:0 DGROUP + +Program entry point at 0D7F:001C diff --git a/GLENZ/VEC.A b/GLENZ/VEC.A new file mode 100644 index 0000000..c1ae11c --- /dev/null +++ b/GLENZ/VEC.A @@ -0,0 +1,1601 @@ +groupheader equ 2 ;bytes to add to group offset to get MEMBERS COUNT + +globalshr equ 0 ;2 + +MAXCMD equ 10000 ;maximum num of commands done by docmd_dssi + +ALIGN 4 +curxpos dd ? +curypos dd ? +curzpos dd ? +curmatrix dw 9 dup(?) +tmpmatrix dw 9 dup(?) + dw 9 dup(?) + dw 9 dup(?) + +ALIGN 4 +objoffset dw ? +objsegment dw ? + +PUBLIC _zadd +_zadd LABEL WORD +unused dw ? +getme dw ? + +ALIGN 4 +;rotate sins/coss +rxsin dw 0 +rxcos dw 0 +rysin dw 0 +rycos dw 0 +rzsin dw 0 +rzcos dw 0 + +ALIGN 4 +projxmul dd 256 +projymul dd 256 +projminz dd 256 +projminzshr dw 8 +projxadd dw 160 +projyadd dw 80 + +addx dw 0 +addy dw 0 +addz dw 0 +addshr dw 0 +addy0 dw 0 ;temp shadow + +;rotated point data +pointadd equ 32 +pointshl equ 5 +pointnum dw 0 +ALIGN 4 +cpoint dw 32 dup(16 dup(0)) +MAXPOINT equ 512 +point dw MAXPOINT dup(16 dup(0)) ;-,-,-,flags,PX,PY,-,-, ddX,ddY,ddZ,-,- + ;+1 = out to right + ;+2 = out to left + ;+4 = out to up + ;+8 = out to down + ;+16 = behind the eye + ;PX/PY=projected + ;ddX/Y/Z are 32 bit for point vertices, + ; but only 16 bits for normal vertices +pointend dw pointadd dup('!') +PX equ 0 +PY equ 4 +PZ equ 8 +PPX equ 12 +PPY equ 14 ;PPY must be just after PPX +PFL equ 16 +PRX equ 18 +PRY equ 20 ;PRY must be just after PRX +PRFL equ 22 +PTX equ 24 +PTY equ 26 +totalhiddenflags dw 0 +groupflags dw 0 ;of polygon group +objectflags dw 0 ;of current object +polynormal dw 0 ;tmp storage + +ALIGN 2 +pointlist dw 32 dup(0) + +d3clipcut PROC NEAR + ;save bp(invisible)/bx,si,di, return dx/ax + push si + + mov cl,byte ptr ds:projminzshr + + mov esi,dword ptr ds:point[bx+PZ] + mov edx,esi + sub esi,dword ptr ds:point[bp+PZ] + sub edx,ds:projminz + xor eax,eax + shr edx,1 + rcr eax,1 + cmp esi,edx + jle dcp23 + div esi + mov esi,eax + +dcp3: mov eax,dword ptr ds:point[bp+PX] + sub eax,dword ptr ds:point[bx+PX] + imul esi + shld edx,eax,1 + mov eax,edx + add eax,dword ptr ds:point[bx+PX] + imul ds:projxmul + shrd eax,edx,cl + add ax,ds:projxadd + + push ax + + mov eax,dword ptr ds:point[bp+PY] + sub eax,dword ptr ds:point[bx+PY] + imul esi + shld edx,eax,1 + mov eax,edx + add eax,dword ptr ds:point[bx+PY] + imul ds:projymul + shrd eax,edx,cl + add ax,ds:projyadd + + pop dx + + pop si + ret + +dcp23: mov esi,16384 + jmp dcp3 +d3clipcut ENDP + +ALIGN 2 +lastindex dw 0 +clipped dw 0 + +d3clip PROC NEAR + ;ds:[si]=>points, bp=lastindex + push ds + mov ax,cs + mov ds,ax + mov ds:clipped,0 + add bp,OFFSET pointlist + mov ds:lastindex,bp + mov si,OFFSET pointlist + mov di,OFFSET polyxy + ;first dot + mov bp,ds:[si] + mov dl,-1 ;invisible + test ds:point[bp+PFL],16 + jnz dcl5 + mov dl,1 ;visible + mov eax,DWORD PTR ds:point[bp+PPX] + mov ds:[di],eax + add di,4 +dcl5: add si,2 + ;other dots +dcl1: mov bx,ds:[si] + test ds:point[bx+PFL],16 + jz dcl3 + ;invisible dot + cmp dl,-1 + je dcl4 ;last was also invisible + mov ds:clipped,1 + ;last line was visible, cut + xchg bp,bx + call d3clipcut ;points bp/bx + xchg bp,bx + mov ds:[di],dx ;x + mov ds:[di+2],ax ;y + add di,4 + mov dl,-1 + jmp dcl4 + +dcl3: ;visible dot + cmp dl,1 + je dcl6 ;last was also visible + ;last line was invisible, cut + call d3clipcut ;points bp/bx + mov ds:[di],dx ;x + mov ds:[di+2],ax ;y + add di,4 + mov dl,1 +dcl6: cmp si,ds:lastindex + je dcl2 + mov eax,DWORD PTR ds:point[bx+PPX] + mov ds:[di],eax + add di,4 + +dcl4: cmp si,ds:lastindex + je dcl2 + add si,2 + mov bp,bx + jmp dcl1 +dcl2: + sub di,OFFSET polyxy + shr di,2 + mov ds:polysides,di + mov ax,ds:clipped + pop ds + ret +d3clip ENDP + +ALIGN 4 +tmpesi dd ? +td3clipcut2 PROC NEAR + ;save bp(invisible)/bx,si,di, return edx/eax/cx(=hiddenflags) + push si + + mov cl,byte ptr ds:projminzshr + + mov esi,dword ptr ds:point[bx+PZ] + mov eax,esi + sub esi,dword ptr ds:point[bp+PZ] + sub eax,ds:projminz + cdq + shl eax,14 + div esi + mov esi,eax + +dc1p3: mov ds:tmpesi,esi + ;mov eax,16384 + ;sub eax,esi + ;imul eax + ;sar eax,14 + ;mov esi,16384 + ;sub esi,eax + ; + mov ax,word ptr ds:point[bp+PTX] + sub ax,word ptr ds:point[bx+PTX] + cwde + imul esi + sar eax,14 + add ax,word ptr ds:point[bx+PTX] + push ax ;X + mov ax,word ptr ds:point[bp+PTY] + sub ax,word ptr ds:point[bx+PTY] + cwde + imul esi + sar eax,14 + add ax,word ptr ds:point[bx+PTY] + push ax ;Y + mov esi,ds:tmpesi + + mov eax,dword ptr ds:point[bp+PX] + sub eax,dword ptr ds:point[bx+PX] + imul esi + sar eax,14 + add eax,dword ptr ds:point[bx+PX] + imul ds:projxmul + shrd eax,edx,cl + add ax,ds:projxadd + push ax + + mov eax,dword ptr ds:point[bp+PY] + sub eax,dword ptr ds:point[bx+PY] + imul esi + sar eax,14 + add eax,dword ptr ds:point[bx+PY] + imul ds:projymul + shrd eax,edx,cl + add ax,ds:projyadd + pop dx + + xor cx,cx + cmp dx,ds:WMINX + jnl dc1p41 + or cl,1 +dc1p41: cmp dx,ds:WMAXX + jng dc1p42 + or cl,2 +dc1p42: cmp ax,ds:WMINY + jnl dc1p43 + or cl,4 +dc1p43: cmp ax,ds:WMAXY + jnl dc1p44 + or cl,8 +dc1p44: + shl eax,16 + mov ax,dx + + pop dx + shl edx,16 + pop dx + + pop si + ret +td3clipcut2 ENDP + +td3clip2 PROC NEAR + ;ds:[si]=>points, bp=lastindex + push ds + mov ax,cs + mov ds,ax + mov ds:clipped,0 + add bp,OFFSET pointlist + mov ds:lastindex,bp + mov si,OFFSET pointlist + mov di,OFFSET cpoint + ;first dot + mov bp,ds:[si] + mov dl,-1 ;invisible + test ds:point[bp+PFL],16 + jnz dc1l5 + mov dl,1 ;visible + mov eax,DWORD PTR ds:point[bp+PPX] + mov ds:[di+PPX],eax + mov eax,DWORD PTR ds:point[bp+PTX] + mov ds:[di+PTX],eax + mov eax,DWORD PTR ds:point[bp+PZ] + mov ds:[di+PZ],eax + mov ax,ds:point[bp+PFL] + mov ds:[di+PFL],ax + add di,pointadd +dc1l5: add si,2 + ;other dots +dc1l1: mov bx,ds:[si] + test ds:point[bx+PFL],16 + jz dc1l3 + ;invisible dot + cmp dl,-1 + je dc1l4 ;last was also invisible + mov ds:clipped,1 + ;last line was visible, cut + xchg bp,bx + call td3clipcut2 ;points bp/bx + mov ds:[di+PPX],eax + mov ds:[di+PTX],edx + mov ds:[di+PFL],cx + mov eax,cs:projminz + mov ds:[di+PZ],eax + xchg bp,bx + add di,pointadd + mov dl,-1 + jmp dc1l4 + +dc1l3: ;visible dot + cmp dl,1 + je dc1l6 ;last was also visible + ;last line was invisible, cut + call td3clipcut2 ;points bp/bx + mov ds:[di+PPX],eax + mov ds:[di+PTX],edx + mov ds:[di+PFL],cx + mov eax,cs:projminz + mov ds:[di+PZ],eax + add di,pointadd + mov dl,1 +dc1l6: cmp si,ds:lastindex + je dc1l2 + mov eax,DWORD PTR ds:point[bx+PPX] + mov ds:[di+PPX],eax + mov eax,DWORD PTR ds:point[bx+PZ] + mov ds:[di+PZ],eax + mov eax,DWORD PTR ds:point[bx+PTX] + mov ds:[di+PTX],eax + mov ax,ds:point[bx+PFL] + mov ds:[di+PFL],ax + add di,pointadd + +dc1l4: cmp si,ds:lastindex + je dc1l2 + add si,2 + mov bp,bx + jmp dc1l1 +dc1l2: + sub di,OFFSET cpoint + shr di,pointshl + mov ds:polysides,di + mov ax,ds:clipped + pop ds + ret +td3clip2 ENDP + +td3loadbp PROC NEAR + mov eax,dword ptr ds:cpoint[bp+PPX] + mov ecx,dword ptr ds:cpoint[bp+PZ] + mov edx,dword ptr ds:cpoint[bp+PTX] + ret +td3loadbp ENDP + +td3storebx PROC NEAR + mov ds:[di],eax + mov ds:[POLYTXY+di],edx + mov ds:[POLYZ+di],ecx + add di,4 + ret +td3storebx ENDP + +td3clipbx PROC NEAR + ;bx=end to be clipped + ;bp=other end + ;return: eax=y/x + push si + push di + mov cx,16384 ;delta + mov si,ds:cpoint[bx+PFL] +td3k0: test si,1 + jz td3k4 + ;xmaxx + test ds:cpoint[bp+PFL],2 + jnz td3k9 + mov ax,ds:cpoint[bx+PPX] + mov di,ax + sub ax,ds:WMAXX + cwde + shl eax,14 + sub di,ds:cpoint[bp+PPX] + movsx edi,di + cdq + idiv edi + cmp ax,cx + jg td3k2 + mov cx,ax +td3k2: ;clip by cx (0..16383) + ;X/Y + mov eax,dword ptr ds:cpoint[bp+PPX] ;end + mov esi,dword ptr ds:cpoint[bx+PPX] ;beg + sub ax,si + imul cx + shrd ax,dx,14 + add ax,si ;x + rol eax,16 + rol esi,16 + sub ax,si + imul cx + shrd ax,dx,14 + add ax,si ;y + rol eax,16 ;y/x + push eax + ;Z + ;find suitable texture function + mov eax,256 + imul dword ptr ds:cpoint[bx+PZ] + idiv dword ptr ds:cpoint[bp+PZ] + mov si,-4 +td3k8: add si,4 + cmp fs:[si],ax + ja td3k8 + mov si,fs:[si+2] + mov ax,cx + shr ax,5 + shl ax,1 + add si,ax + mov cx,fs:[si] ;si=0..511 + mov eax,dword ptr ds:cpoint[bp+PZ] ;end + mov esi,dword ptr ds:cpoint[bx+PZ] ;beg + sub eax,esi + imul cx + shrd ax,dx,9 + add eax,esi + push eax ;Z + ;texture X/Y + mov eax,dword ptr ds:cpoint[bp+PTX] ;end + mov esi,dword ptr ds:cpoint[bx+PTX] ;beg + sub ax,si + imul cx + shrd ax,dx,9 + add ax,si ;x + rol eax,16 + rol esi,16 + sub ax,si + imul cx + shrd ax,dx,9 + add ax,si ;y + rol eax,16 ;y/x + pop ecx ;z + mov edx,eax ;txy + pop eax ;xy + ; + pop di + pop si + clc + ret +td3k9: pop di + pop si + stc + ret +td3clipbx ENDP + +td3clip PROC NEAR + push ds + mov fs,cs:depthseg + mov ax,cs + mov ds,ax + mov ds:clipped,0 + mov bp,ds:polysides + shl bp,pointshl + mov ds:lastindex,bp + xor si,si + mov di,OFFSET polyxy + ;BX=beg, BP=endp + ;first dot + mov bp,si +td3l1: cmp si,ds:lastindex + jb td3l2 + sub di,OFFSET polyxy + shr di,2 + mov ds:polysides,di + pop ds + ret +td3l2: mov bx,bp + add si,pointadd + mov bp,si + cmp bp,ds:lastindex + jne td3l7 + xor bp,bp +td3l7: mov ax,ds:cpoint[PFL+bx] + and ax,not (4+8) + mov dx,ds:cpoint[PFL+bp] + and dx,not (4+8) + cmp ax,0 + je td3l5 + cmp dx,0 + je td3l4 + ;clip both ends + call td3clipbx + jc td3l91 + call td3storebx +td3l91: xchg bx,bp + call td3clipbx + jc td3l92 + call td3storebx +td3l92: xchg bx,bp + jmp td3l1 +td3l4: cmp ax,0 + je td3l5 + ;bf + call td3clipbx + jc td3l93 + call td3storebx +td3l93: call td3loadbp + jc td3l94 + call td3storebx +td3l94: jmp td3l1 +td3l5: cmp dx,0 + je td3l6 + ;ef + xchg bx,bp + call td3clipbx + jc td3l95 + call td3storebx +td3l95: xchg bx,bp + jmp td3l1 +td3l6: call td3loadbp + call td3storebx + jmp td3l1 +td3clip ENDP + +unify32 PROC NEAR + ;returns: ax,bx,cx (vector length=256) + jmp uni1 +uni2: sar eax,4 + sar ebx,4 + sar ecx,4 +uni1: cmp eax,16000 + jg uni2 + cmp eax,-16000 + jl uni2 + cmp ebx,16000 + jg uni2 + cmp ebx,-16000 + jl uni2 + cmp ecx,16000 + jg uni2 + cmp ecx,-16000 + jl uni2 + ; + push ax + push bx + push cx + imul eax + mov edi,eax + mov eax,ebx + imul eax + add edi,eax + mov eax,ecx + imul eax + add edi,eax + mov si,di + shr edi,16 + call longsqrt + cmp ax,0 + je uni3 + mov si,ax + ; + pop ax + cwd + shld dx,ax,8 + shl ax,8 + idiv si + mov cx,ax + ; + pop ax + cwd + shld dx,ax,8 + shl ax,8 + idiv si + mov bx,ax + ; + pop ax + cwd + shld dx,ax,8 + shl ax,8 + idiv si + ; + ret + +uni3: xor ax,ax + xor bx,bx + xor cx,cx + ret +unify32 ENDP + +ALIGN 2 +public _testflash,_testflasho,_testflashgo,_testflashpnt +_testflash dw 0 +_testflasho dw 0 +_testflashgo dw 0 +_testflashpnt dw 0,0 +testflashc dw 0 +flashgo dw 0 +flashgo0 dw 0 +flasher db 0 + +checkdeg MACRO reg + local l0,l1,l2 +l0: cmp reg,3600 + jb l1 + jl l2 + ;>3600 + sub reg,3600 + jmp l0 +l2: ;<0 + add reg,3600 + jmp l0 +l1: ENDM + + ALIGN 4 +rotatedx dd ? +rotatedy dd ? +rotatedz dd ? + +rotateposition PROC NEAR + mov eax,ds:[si+0] + movsx ecx,word ptr cs:[di+0] + imul ecx + shld edx,eax,17 + mov ebx,edx + + mov eax,ds:[si+4] + movsx ecx,word ptr cs:[di+2] + imul ecx + shld edx,eax,17 + add ebx,edx + + mov eax,ds:[si+8] + movsx ecx,word ptr cs:[di+4] + imul ecx + shld edx,eax,17 + add ebx,edx + + mov cs:rotatedx,ebx + + mov eax,ds:[si+0] + movsx ecx,word ptr cs:[di+6] + imul ecx + shld edx,eax,17 + mov ebx,edx + + mov eax,ds:[si+4] + movsx ecx,word ptr cs:[di+8] + imul ecx + shld edx,eax,17 + add ebx,edx + + mov eax,ds:[si+8] + movsx ecx,word ptr cs:[di+10] + imul ecx + shld edx,eax,17 + add ebx,edx + + mov cs:rotatedy,ebx + + mov eax,ds:[si+0] + movsx ecx,word ptr cs:[di+12] + imul ecx + shld edx,eax,17 + mov ebx,edx + + mov eax,ds:[si+4] + movsx ecx,word ptr cs:[di+14] + imul ecx + shld edx,eax,17 + add ebx,edx + + mov eax,ds:[si+8] + movsx ecx,word ptr cs:[di+16] + imul ecx + shld edx,eax,17 + add ebx,edx + + mov cs:rotatedz,ebx + ret +rotateposition ENDP + +objadd LABEL WORD + dw 0 + dw -1000 + dw 10000 +objrot LABEL WORD + dw 0 + dw 0 + dw 0 +ALIGN 4 +zorder dw 64 dup(0,0) + +;****NRS**** + +nxpos dd ? +nypos dd ? +nzpos dd ? +;shadow +nxspos dd ? +nyspos dd ? +nzspos dd ? +PUBLIC _cammatrix +_cammatrix dw 9 dup(?) + dw 9 dup(?) ;reverse cammatrix +nmatrix dw 9 dup(?) +np0 dw ? ;first point number under this node +npn0 dw ? ;first normal number under this node +noflags dw 0 + +tmprotx dw ? +tmproty dw ? +tmprotz dw ? + +shadow db 0 ;flag for drawing + +dofirstnrs PROC NEAR + mov ax,cs + mov ds,ax + ; + cmp dword ptr ds:_tmpxyz[0],-200000000 + je notrack + mov ax,asm_objs + mov es,ax + mov si,OFFSET _camera + mov di,OFFSET _tmpxyz + call trackcam + mov ds:_camera[18],bx + mov ds:_camera[20],ax +notrack: + ;initial rotate matrix + mov ax,ds:_camera[18] + mov ds:tmprotx,ax + mov ax,ds:_camera[20] + mov ds:tmproty,ax + mov ax,ds:_camera[22] + mov ds:tmprotz,ax + ;calc XYZ rot + mov si,OFFSET tmprotx + mov di,OFFSET tmpmatrix + call calcmatrixsep ;ds:si=src(rx,ry,rz), ds:di=dest[3 matrices] + mov ax,cs + mov es,ax + mov si,OFFSET tmpmatrix+1*18 + mov di,OFFSET tmpmatrix+0*18 + call mulmatrices ;Y*=X + mov si,OFFSET tmpmatrix+1*18 + mov di,OFFSET tmpmatrix+2*18 + call mulmatrices ;Y*=Z + mov si,OFFSET tmpmatrix+1*18 + mov cx,9 + xor bx,bx +ccam2: mov ax,cs:[si+bx] + mov cs:_cammatrix[bx+9*2],ax + add bx,2 + loop ccam2 + ; + neg ds:tmprotx + neg ds:tmproty + neg ds:tmprotz + mov si,OFFSET tmprotx + mov di,OFFSET tmpmatrix + call calcmatrixsep ;ds:si=src(rx,ry,rz), ds:di=dest[3 matrices] + ;multiply to get: Z*X*Y + mov ax,cs + mov es,ax + mov si,OFFSET tmpmatrix+2*18 + mov di,OFFSET tmpmatrix+0*18 + call mulmatrices ;Z*=X + mov si,OFFSET tmpmatrix+2*18 + mov di,OFFSET tmpmatrix+1*18 + call mulmatrices ;Z*=Y + ;move the result to nmatrix + mov si,OFFSET tmpmatrix+2*18 + mov cx,9 + xor bx,bx +ccam1: mov ax,cs:[si+bx] + mov cs:nmatrix[bx],ax + mov cs:_cammatrix[bx],ax + add bx,2 + loop ccam1 + ;calc initial camera rotation + mov eax,dword ptr ds:_camera[0] + neg eax + mov ds:nxpos,eax + mov eax,dword ptr ds:_camera[4] + neg eax + mov ds:nypos,eax + mov eax,dword ptr ds:_camera[8] + neg eax + mov ds:nzpos,eax + mov si,OFFSET nxpos + mov di,OFFSET nmatrix + call rotateposition ;si=>rotatedx,y,z + mov ebx,ds:rotatedx + mov ecx,ds:rotatedy + mov edx,ds:rotatedz + mov ds:nxpos,ebx + mov ds:nypos,ecx + mov ds:nzpos,edx + mov ds:nxspos,ebx + mov ds:nyspos,ecx + mov ds:nzspos,edx +; mov ds:addy0,cx ;for temp shadow + mov ds:noflags,0 + ;init OBJD list pointers + mov cs:oopnt,OFFSET objdoffs + mov cs:odpnt,OFFSET objdarea + ;calc horizon + cmp cs:_horizonenabled,0 + je nohorz + call calchorizon + call drawhorizon +nohorz: ;do world + mov ax,asm_objs + mov ds,ax + mov si,OFFSET _worldroot + call donrsnode + ret +dofirstnrs ENDP + +ALIGN 2 +newlight dw 9460,9460,9460 + +normallight PROC NEAR + ;ds=cs + ;bx=normal vertex number (preshifted by pointshl) + ;ret: ax=relative brightness 0..255 + mov ax,cs + mov ds,ax + mov ax,ds:point[bx+PX] + imul ds:newlight[0] + mov bp,ax + mov cx,dx + mov ax,ds:point[bx+PY] + imul ds:newlight[2] + add bp,ax + adc cx,dx + mov ax,ds:point[bx+PZ] + imul ds:newlight[4] + add bp,ax + adc cx,dx + shld cx,bp,2 + mov ax,cx + sar ax,7 + add ax,128 + ;ax=0..255 + ret +normallight ENDP + +checknormalhidden PROC NEAR + ;ds=cs + ;bx=normal vertex number,di=vertex number from tested polygon + ;^both above should be preshifted by pointshl + ;ret: carry=1=hidden + mov eax,dword ptr ds:point[di+PX] + movsx edx,word ptr ds:point[bx+PX] + imul edx + mov ebp,eax + mov ecx,edx + mov eax,dword ptr ds:point[di+PY] + movsx edx,word ptr ds:point[bx+PY] + imul edx + add ebp,eax + adc ecx,edx + mov eax,dword ptr ds:point[di+PZ] + movsx edx,word ptr ds:point[bx+PZ] + imul edx + add ebp,eax + adc ecx,edx + rcl ecx,1 ;if cx<0, carry=1=visible + cmc ;now carry=1 when invisible + ret +checknormalhidden ENDP + +ALIGN 4 +_texturexy LABEL DWORD +dd 00000000h,0000003fh,003f003fh,003f0000h +dd 00000000h,0000003fh,003f003fh,003f0000h +dd 00000000h,0000003fh,003f003fh,003f0000h +dd 00000000h,0000003fh,003f003fh,003f0000h + +nrs_poly PROC NEAR + test cs:noflags,1 + jnz nrsnewpoly + mov si,OFFSET m_oldpoly + jmp fatalexit +nrsnewpoly: ;new polys are created by OC, so some user features done by OC + ;are disabled for (minimum :-) speed gains. + sub si,2 ;point si to command + push si + ;single polygon + mov ax,ds:[si+4] + mov cs:color,ax + mov ax,ds:[si+0] + and ah,not 1 + mov byte ptr cs:groupflags,ah ;+2=always show, +4=texture, +8=dim + mov cl,al + xor ch,ch ;cx=sides + mov byte ptr cs:polysides,cl + mov ax,ds:[si+2] ;normal + mov cs:polynormal,ax + add si,6 + + ;normal vector selfhidden? (for dot/line, always visible flag should be on) + test byte ptr cs:groupflags,2 + jnz nrp15 + mov di,ds:[si] + push ds + mov ax,cs + mov ds,ax + mov bx,ds:polynormal + shl bx,pointshl + shl di,pointshl + push cx + call checknormalhidden + pop cx ;cx=polysides + jc nrp19 ;hidden by culling (pop ds also at nrp19) + pop ds + +nrp15: mov di,OFFSET polyxy + xor bp,bp + mov dx,0ff00h +nrp4: mov bx,ds:[si] + shl bx,pointshl + mov cs:pointlist[bp],bx + add bp,2 + mov al,byte ptr cs:point[bx+PFL] + and dh,al + or dl,al + mov eax,DWORD PTR cs:point[bx+PPX] + mov cs:[di],eax + add di,4 + add si,2 + loop nrp4 + test cs:groupflags,4 + jz nrp9 + ;texture + push dx + add si,2 ;pic segment + mov cx,cs:polysides + xor di,di +nrpt1: mov dx,ds:[si] + movzx ax,dh + shl eax,16 + movzx ax,dl + mov bx,cs:pointlist[di] + ;shl eax,5 + add si,2 + mov dword ptr cs:point[bx+PTX],eax + shl di,1 + mov dword ptr cs:polyxy[POLYTXY+di],eax + mov eax,dword ptr cs:point[bx+PZ] + mov dword ptr cs:polyxy[POLYZ+di],eax + shr di,1 + add di,2 + loop nrpt1 + pop dx + +nrp9: push ds + mov ax,cs + mov ds,ax + ; + ;check polygon visibility / do 3D clip if required + cmp dh,0 + jnz nrp19 ;hidden, beside screen + test cs:groupflags,4 + jnz nrp7 + test dl,16 + jz nrp2 + ;3D-clip + cmp ds:polysides,1 + je nrp19 ;hidden automaticly + mov ax,ds:pointlist[0] + mov ds:pointlist[bp],ax + call d3clip + jmp nrp2 +nrp7: test dl,31 + jz nrp2 + mov ax,ds:pointlist[0] + mov ds:pointlist[bp],ax + call td3clip2 ;clip point=>cpoint + call td3clip ;clip cpoint=>polyxy texture +nrp2: ; + ;polygon visible! + mov ax,ds:color + test ax,256+512 + jz nrp16 + push ax + mov bx,ds:polynormal + shl bx,pointshl + call normallight + pop dx + mov cl,dh + add cl,2 + shr ax,cl ;256=0..31, 512=0..15, 768=0..7 + add dx,ax + mov ds:color,dx +nrp16: jmp nrp17 ;no antialiasing + test ds:groupflags,4 + jz nrp17 + ;antialiaising + + mov eax,dword ptr ds:polyxy[POLYZ+0] + cmp eax,20000h + ja nr17d4 + cmp eax,10000h + ja nr17d3 + cmp eax,8000h + ja nr17d2 + cmp eax,4000h + ja nr17d1 + jmp nrp17 + +nr17d1: mov cl,1 + mov bx,not (8000h) + mov edx,800000h + jmp nr17d0 +nr17d2: mov cl,2 + mov bx,not (8000h+4000h) + mov edx,800080h + jmp nr17d0 +nr17d3: mov cl,3 + mov bx,not (8000h+4000h+2000h) + mov edx,8000c0h + jmp nr17d0 +nr17d4: mov cl,4 + mov bx,not (8000h+4000h+2000h+1000h) + mov edx,8000e0h + jmp nr17d0 + +nr17d0: xor si,si + mov di,cs:polysides + cmp di,0 + je nrp19 +nrp17b: mov eax,dword ptr ds:polyxy[POLYTXY+si] + shr eax,cl + and ax,bx + add eax,edx + mov dword ptr ds:polyxy[POLYTXY+si],eax + add si,4 + dec di + jnz nrp17b + ; +nrp17: call poly ;draw - tests groupflags&4 for texture + +nrp19: ;polygon invisible/done! + pop ds + pop si +nrxxx: mov dx,ds:[si] + movzx ax,dl + test dh,4 + jz nrp20 + ;textured polygon + add ax,ax + inc ax +nrp20: add ax,3 + shl ax,1 + add si,ax + ret +nrs_poly ENDP + +ALIGN 2 +npcount dw 0 +npandflag dw 0 + +overflb: jmp overfl + +ncalcpoints PROC NEAR + ;CX=count, DS:SI=pointsource + mov ax,ds + mov es,ax + mov ax,cs + mov ds,ax + mov cs:npcount,cx + mov cs:npandflag,0ffffh + mov di,ds:np0 + shl di,pointshl + add di,OFFSET point + add ds:np0,cx + ; + mov ax,cx + shl ax,pointshl + add ax,di + jc overflb + cmp ax,OFFSET pointend + jae overflb + +nrtp1: ;rotate with matrix + push si + push di + push bp + mov bp,es:[si+4] + mov di,es:[si+2] + mov si,es:[si+0] + +mtrn00: mov ax,1234h + imul si + mov bx,ax + mov cx,dx +mtrn02: mov ax,1234h + imul di + add bx,ax + adc cx,dx +mtrn04: mov ax,1234h + imul bp + add bx,ax + adc cx,dx + shld cx,bx,1 + push cx +mtrn06: mov ax,1234h + imul si + mov bx,ax + mov cx,dx +mtrn08: mov ax,1234h + imul di + add bx,ax + adc cx,dx +mtrn10: mov ax,1234h + imul bp + add bx,ax + adc cx,dx + shld cx,bx,1 + push cx +mtrn12: mov ax,1234h + imul si + mov bx,ax + mov cx,dx +mtrn14: mov ax,1234h + imul di + add bx,ax + adc cx,dx +mtrn16: mov ax,1234h + imul bp + add bx,ax + adc cx,dx + shld cx,bx,1 + pop dx + pop ax + pop bp + pop di + pop si + + mov ds:[di+PX],ax + mov ds:[di+PY],dx + ;mov ds:[di+PZ],cx + + ;project + + xor bp,bp + movsx ebx,cx ;word ptr ds:[di+PZ] + add ebx,ds:nzpos + mov dword ptr ds:[di+PZ],ebx + cmp ebx,ds:projminz + jge nprp2 + mov ebx,ds:projminz + or bp,16 +nprp2: ; + movsx eax,word ptr ds:[di+PY] + add eax,ds:nypos + mov dword ptr ds:[di+PY],eax + imul ds:projymul + idiv ebx + add ax,ds:projyadd + cmp ax,ds:WMAXY ;projymax + jng nprp41 + or bp,8 +nprp41: cmp ax,ds:WMINY ;projymin + jnl nprp42 + or bp,4 +nprp42: mov ds:[di+PPY],ax ;store Y + ; + movsx eax,word ptr ds:[di+PX] + add eax,ds:nxpos + mov dword ptr ds:[di+PX],eax + imul ds:projxmul + idiv ebx + add ax,ds:projxadd + cmp ax,ds:WMAXX ;projxmax + jng nprp43 + or bp,2 +nprp43: cmp ax,ds:WMINX ;projxmin + jnl nprp44 + or bp,1 +nprp44: mov ds:[di+PPX],ax ;store X + +nprp5: mov ds:[di+PFL],bp ;store flags, only Zbehind set for now + + ;and ds:npandflag,bp + ;next point + add si,6 + add di,pointadd + dec ds:npcount + jz nrtp2 + jmp nrtp1 +nrtp2: ret +ncalcpoints ENDP + +overfl PROC NEAR + mov si,OFFSET m_outofvx + jmp fatalexit +overfl ENDP + +ncalcpoints2 PROC NEAR + ;normals etc, only rotate + ;CX=count, DS:SI=pointsource + mov ax,ds + mov es,ax + mov ax,cs + mov ds,ax + mov cs:npcount,cx + mov di,ds:np0 + shl di,pointshl + add di,OFFSET point + add ds:np0,cx + ; + mov ax,cx + shl ax,pointshl + add ax,di + jc overfl + cmp ax,OFFSET pointend + jae overfl + +nrup1: ;rotate with matrix + push si + push di + push bp + mov bp,es:[si+4] + mov di,es:[si+2] + mov si,es:[si+0] + +mtrm00: mov ax,1234h + imul si + mov bx,ax + mov cx,dx +mtrm02: mov ax,1234h + imul di + add bx,ax + adc cx,dx +mtrm04: mov ax,1234h + imul bp + add bx,ax + adc cx,dx + shld cx,bx,1 + push cx +mtrm06: mov ax,1234h + imul si + mov bx,ax + mov cx,dx +mtrm08: mov ax,1234h + imul di + add bx,ax + adc cx,dx +mtrm10: mov ax,1234h + imul bp + add bx,ax + adc cx,dx + shld cx,bx,1 + push cx +mtrm12: mov ax,1234h + imul si + mov bx,ax + mov cx,dx +mtrm14: mov ax,1234h + imul di + add bx,ax + adc cx,dx +mtrm16: mov ax,1234h + imul bp + add bx,ax + adc cx,dx + shld cx,bx,1 + pop dx + pop ax + pop bp + pop di + pop si + + mov ds:[di+PZ],cx + mov ds:[di+PY],dx + mov ds:[di+PX],ax + + ;next point + add si,6 + add di,pointadd + dec ds:npcount + jz nrup2 + jmp nrup1 +nrup2: ret +ncalcpoints2 ENDP + +initnrsobj PROC NEAR + push ds + push si + + mov ax,cs + mov ds,ax + mov ds:np0,0 + + pop si + pop ds + ret + + mov ebx,ds:nxpos + mov eax,ds:nypos + mov edx,ds:nzpos + mov cx,globalshr + mov bp,cx + sar ebx,cl + sar eax,cl + sar edx,cl +ino3: cmp edx,16000 + jg ino1 + cmp edx,-16000 + jl ino1 + cmp ebx,16000 + jg ino1 + cmp ebx,-16000 + jl ino1 + cmp eax,16000 + jg ino1 + cmp eax,-16000 + jl ino1 + jmp ino2 +ino1: inc bp + sar ebx,1 + sar eax,1 + sar edx,1 + jmp ino3 + +ino2: mov ds:addx,bx + mov ds:addy,ax + mov ds:addz,dx + mov ds:addshr,bp + + pop si + pop ds + ret +initnrsobj ENDP + +include veccmd.asm + +ALIGN 4 +objdoffs LABEL WORD + dw 256 dup(0) +sentinel1 db 'FCRZ' +objdarea LABEL WORD + db 4096 dup(0) +sentinel2 db 'FCRZ' +odpnt dw ? +oopnt dw ? +tmpoo dw ? + +pushnstuff MACRO + push dword ptr cs:nxpos + push dword ptr cs:nypos + push dword ptr cs:nzpos + push dword ptr cs:nmatrix[0] + push dword ptr cs:nmatrix[4] + push dword ptr cs:nmatrix[8] + push dword ptr cs:nmatrix[12] + push word ptr cs:nmatrix[16] + push word ptr cs:np0 + ENDM + +popnstuff MACRO + pop word ptr cs:np0 + pop word ptr cs:nmatrix[16] + pop dword ptr cs:nmatrix[12] + pop dword ptr cs:nmatrix[8] + pop dword ptr cs:nmatrix[4] + pop dword ptr cs:nmatrix[0] + pop dword ptr cs:nzpos + pop dword ptr cs:nypos + pop dword ptr cs:nxpos + ENDM + +OBJDSIZE equ 40 ;nstuff size + +loadnstuffdi PROC NEAR + mov eax,cs:[di+8] + mov cs:nxpos,eax + mov eax,cs:[di+12] + mov cs:nypos,eax + mov eax,cs:[di+16] + mov cs:nzpos,eax + mov eax,dword ptr cs:[di+20] + mov dword ptr cs:nmatrix[0],eax + mov eax,dword ptr cs:[di+24] + mov dword ptr cs:nmatrix[4],eax + mov eax,dword ptr cs:[di+28] + mov dword ptr cs:nmatrix[8],eax + mov eax,dword ptr cs:[di+32] + mov dword ptr cs:nmatrix[12],eax + mov ax,cs:[di+36] + mov cs:nmatrix[16],ax + mov ax,cs:[di+38] + mov cs:noflags,ax + ret +loadnstuffdi ENDP + +savenstuffdi PROC NEAR + mov eax,cs:nxpos + mov cs:[di+8],eax + mov eax,cs:nypos + mov cs:[di+12],eax + mov eax,cs:nzpos + mov cs:[di+16],eax + mov eax,dword ptr cs:nmatrix[0] + mov dword ptr cs:[di+20],eax + mov eax,dword ptr cs:nmatrix[4] + mov dword ptr cs:[di+24],eax + mov eax,dword ptr cs:nmatrix[8] + mov dword ptr cs:[di+28],eax + mov eax,dword ptr cs:nmatrix[12] + mov dword ptr cs:[di+32],eax + mov word ptr ax,cs:nmatrix[16] + mov word ptr cs:[di+36],ax + mov ax,cs:noflags + mov cs:[di+38],ax + ret +savenstuffdi ENDP + +visibledi PROC NEAR +;di=element offset in OBJD struct +;return carry if object invisible + clc + ret +visibledi ENDP + +comparebxbp PROC NEAR +;bx=first element, bp=second element (both offsets to the OBJD structs) +;return carry if these should be swapped + mov eax,dword ptr cs:[bp+16] ;zadd + cmp eax,dword ptr cs:[bx+16] ;zadd + ret +comparebxbp ENDP + +nrsproc PROC NEAR +donrswheader: +;initalize/dobj nodess + push cs:odpnt + push cs:oopnt + ;set partial OBJD area for this 'father' node + mov di,cs:odpnt + call savenstuffdi + add di,OBJDSIZE ;OBJD structure size + mov cs:odpnt,di + sub di,OBJDSIZE + push cs:oopnt + push cs:oopnt +dnh1: ;do initialization + push di + push ds + push si + mov ax,ds:[si] + and ax,255 + add si,ax + mov ax,MAXCMD + call docmd_dssi + mov dx,si ;current command pos=drawing commands start + pop si + pop ds + ;check visibility 1 + cmp ax,0 + je dnh4 ;initialization command returned, don't draw + ;allocate OBJD area + mov bx,cs:oopnt + mov di,cs:odpnt + mov cs:[bx],di + ;set OBJD area + mov al,ds:[si+1] ;type + mov cs:[di+0],al + mov cs:[di+2],dx ;offset to draw commands + mov cs:[di+4],ds ;segment to draw commands + call savenstuffdi + add di,OBJDSIZE ;OBJD structure size + mov cs:odpnt,di + ;check for visibility 2 + call visibledi + jc dnh4 + ;accept the entry in the OBJDoffset list + add bx,2 + mov cs:oopnt,bx +dnh4: ;next + pop di + call loadnstuffdi + mov si,ds:[si+4] + cmp si,0 + jne dnh1 +;sort.. not yet :-) + pop cs:tmpoo + mov si,cs:tmpoo +dns2: cmp si,cs:oopnt + jae dns1 + mov bx,cs:[si] + mov di,si +dns4: sub di,2 + cmp di,cs:tmpoo + jb dns3 + mov bp,cs:[di] + call comparebxbp ;carry=switch bx/bp + jnc dns3 + mov cs:[di+2],bp + jmp dns4 +dns3: mov cs:[di+2],bx + add si,2 + jmp dns2 +dns1: ; +;display what's in OBJD list + pop bx ;original oopnt +dnh3: cmp bx,cs:oopnt + jae dnh2 + push bx + mov bx,cs:[bx] + + ;load pos/matrix + mov di,bx + call loadnstuffdi + test cs:noflags,2 + jz dnh5 + ;??Shadow?? Doesn't work ok. + push bx + ;load command offset + mov si,cs:[bx+2] + mov ds,cs:[bx+4] + ;do drawing + mov ax,MAXCMD + mov cs:shadow,1 + call docmd_dssi + pop bx + ;load pos/matrix + mov di,bx + call loadnstuffdi +dnh5: ;load command offset + mov si,cs:[bx+2] + mov ds,cs:[bx+4] + ;do drawing + mov ax,MAXCMD + mov cs:shadow,0 + call docmd_dssi + ; + pop bx + add bx,2 + jmp dnh3 +dnh2:;done! + pop cs:oopnt + pop cs:odpnt + mov di,cs:odpnt + call loadnstuffdi + ret + +donrsnode: ;temp for older structs + pushnstuff + mov ax,MAXCMD + call docmd_dssi + popnstuff + ret +nrsproc ENDP diff --git a/GLENZ/VEC.ASM b/GLENZ/VEC.ASM new file mode 100644 index 0000000..91a19ee --- /dev/null +++ b/GLENZ/VEC.ASM @@ -0,0 +1,718 @@ +include asm.inc + +extrn __newgroup:far + +text__vec SEGMENT para public 'CODE' + ASSUME cs:text__vec + +.386 + +PUBLIC _lightshift +_lightshift db 0 + +PUBLIC _csetmatrix +_csetmatrix PROC FAR + CBEG + LOADDS + mov eax,[bp+10] + mov ds:xadd,eax + mov eax,[bp+14] + mov ds:yadd,eax + mov eax,[bp+18] + mov ds:zadd,eax + mov si,[bp+6] + mov ds,word ptr [bp+8] + call setmatrix + CEND +_csetmatrix ENDP + +PUBLIC _crotlist +_crotlist PROC FAR + CBEG + mov si,[bp+10] + mov ds,word ptr [bp+12] + mov di,[bp+6] + mov es,word ptr [bp+8] + call rotlist + CEND +_crotlist ENDP + +PUBLIC _cprojlist +_cprojlist PROC FAR + CBEG + mov si,[bp+10] + mov ds,word ptr [bp+12] + mov di,[bp+6] + mov es,word ptr [bp+8] + call projlist + CEND +_cprojlist ENDP + +PUBLIC _ccliplist +_ccliplist PROC FAR + CBEG + mov si,[bp+6] + mov ds,word ptr [bp+8] + call cliplist + CEND +_ccliplist ENDP + +PUBLIC setmatrix +setmatrix PROC FAR + ;ds:si=matrix + movsx eax,word ptr ds:[si+0] + mov dword ptr cs:[2+mtrm00],eax + movsx eax,word ptr ds:[si+2] + mov dword ptr cs:[2+mtrm02],eax + movsx eax,word ptr ds:[si+4] + mov dword ptr cs:[2+mtrm04],eax + movsx eax,word ptr ds:[si+6] + mov dword ptr cs:[2+mtrm06],eax + movsx eax,word ptr ds:[si+8] + mov dword ptr cs:[2+mtrm08],eax + movsx eax,word ptr ds:[si+10] + mov dword ptr cs:[2+mtrm10],eax + movsx eax,word ptr ds:[si+12] + mov dword ptr cs:[2+mtrm12],eax + movsx eax,word ptr ds:[si+14] + mov dword ptr cs:[2+mtrm14],eax + movsx eax,word ptr ds:[si+16] + mov dword ptr cs:[2+mtrm16],eax + ret +setmatrix ENDP + +ALIGN 2 +count dw 0 + +rotlist PROC FAR + ;pointlist@DS:SI=>pointlist@ES:DI + push di + LOADGS + mov cx,ds:[si] + add si,4 + mov cs:count,cx + mov ax,es:[di] + add es:[di],cx + mov bx,ax + shl ax,1 + add ax,bx + shl ax,2 + add di,ax + add di,4 + +nrup1: ;rotate with matrix + push si + push di + mov ebp,ds:[si+8] + mov edi,ds:[si+4] + mov esi,ds:[si+0] +mtrm00: mov eax,12345678h + imul esi + mov ebx,eax + mov ecx,edx +mtrm02: mov eax,12345678h + imul edi + add ebx,eax + adc ecx,edx +mtrm04: mov eax,12345678h + imul ebp + add ebx,eax + adc ecx,edx + shld ecx,ebx,17 + push ecx +mtrm06: mov eax,12345678h + imul esi + mov ebx,eax + mov ecx,edx +mtrm08: mov eax,12345678h + imul edi + add ebx,eax + adc ecx,edx +mtrm10: mov eax,12345678h + imul ebp + add ebx,eax + adc ecx,edx + shld ecx,ebx,17 + push ecx +mtrm12: mov eax,12345678h + imul esi + mov ebx,eax + mov ecx,edx +mtrm14: mov eax,12345678h + imul edi + add ebx,eax + adc ecx,edx +mtrm16: mov eax,12345678h + imul ebp + add ebx,eax + adc ecx,edx + shld ecx,ebx,17 + pop edx + pop eax + pop di + pop si + ; + add eax,gs:xadd + mov es:[di+0],eax + add ecx,gs:yadd + mov es:[di+4],ecx + add edx,gs:zadd + mov es:[di+8],edx + ;next point + add si,12 + add di,12 + dec cs:count + jnz nrup1 + pop di + ret +rotlist ENDP + +projlist PROC FAR + ;pointlist@DS:SI=>projectedpointlist@ES:DI + push di + LOADGS + mov cx,ds:[si] + add si,4 + mov cs:count,cx + mov ax,es:[di] + add es:[di],cx + mov bx,ax + shl ax,1 + add ax,bx + shl ax,2 + add di,ax + add di,4 + +@@1: ;rotate with matrix + mov ebx,ds:[si+8] + mov eax,ds:[si+4] + mov ecx,ds:[si+0] + + ;project + + xor bp,bp + mov dword ptr es:[di+8],ebx + cmp ebx,gs:projminz + jge @@2 + mov ebx,gs:projminz + or bp,16 +@@2: ; + imul gs:projymul + idiv ebx + add ax,gs:projyadd + cmp ax,gs:wmaxy + jng @@41 + or bp,8 +@@41: cmp ax,gs:wminy + jnl @@42 + or bp,4 +@@42: mov es:[di+2],ax ;store Y + ; + mov eax,gs:projxmul + imul ecx + idiv ebx + add ax,gs:projxadd + cmp ax,gs:wmaxx + jng @@43 + or bp,2 +@@43: cmp ax,gs:wminx + jnl @@44 + or bp,1 +@@44: mov es:[di+0],ax ;store X + +@@5: mov es:[di+4],bp ;store visiblity flags + + ;next point + add si,12 + add di,12 + dec cs:count + jnz @@1 + pop di + ret +projlist ENDP + +cliplist PROC FAR + ;pointlist@DS:SI + push di + LOADGS + mov cx,ds:[si] + add si,4 + +@@1: ;rotate with matrix + mov eax,ds:[si+4] + cmp eax,1500 + jl @@2 + mov dword ptr ds:[si+4],1500 +@@2: + ;next point + add si,12 + dec cx + jnz @@1 + pop di + ret +cliplist ENDP + +ALIGN 2 +edgesoff dw 0 +pointsoff dw 0 +cntoff dw 0 + +adddot PROC NEAR + cmp ax,bp + je @@3 + mov bp,ax + ;add dot + push bx + mov bx,ax + shl bx,1 + add bx,ax + shl bx,2 + add bx,cs:pointsoff + mov eax,gs:[bx] + stosd + pop bx +@@3: ret +adddot ENDP + +checkhiddenbx PROC NEAR + push si + mov ax,es:[bx] + mov si,es:[bx+2] + sub ax,es:[bx+4] + sub si,es:[bx+8+2] + imul si + push ax + push dx + mov ax,es:[bx+2] + mov si,es:[bx] + sub ax,es:[bx+4+2] + sub si,es:[bx+8] + imul si + pop cx + pop si + xchg si,ax + xchg dx,cx + sub ax,si + sbb dx,cx + pop si + cmp dx,0 + jl @@1 + clc + ret +@@1: stc + ret +checkhiddenbx ENDP + +PUBLIC _cpolylist +_cpolylist PROC FAR ;polylist,polys,edges,points3 + CBEG + mov di,[bp+6] + mov es,word ptr [bp+8] + mov si,[bp+10] + mov ds,word ptr [bp+12] + mov ax,[bp+14] + add ax,4 + mov cs:edgesoff,ax + mov fs,word ptr [bp+16] + mov ax,[bp+18] + add ax,4 + mov cs:pointsoff,ax + mov gs,word ptr [bp+20] + mov bp,-1 +@@2: lodsw + cmp ax,0 + je @@1 + add di,2 + mov cx,ax + movsw + mov cs:cntoff,di +@@3: push cx + mov bx,ds:[si] + add si,2 + shl bx,3 + add bx,cs:edgesoff + test word ptr fs:[bx+4],8000h + jnz @@7 + mov ax,fs:[bx+2] + cmp ax,bp + je @@5 + mov ax,fs:[bx] + call adddot + mov ax,fs:[bx+2] + call adddot +@@7: pop cx + loop @@3 + jmp @@6 +@@5: mov ax,fs:[bx+2] + call adddot + mov ax,fs:[bx] + call adddot + pop cx + loop @@3 +@@6: mov bx,cs:cntoff + mov eax,es:[bx] + cmp eax,es:[di-4] + jne @@4 + sub di,4 +@@4: mov ax,di + sub ax,cs:cntoff + shr ax,2 + mov es:[bx-4],ax + call checkhiddenbx + jnc @@2 + xor word ptr es:[bx-2],8000h + jmp @@2 +@@1: mov word ptr es:[di],0 + CEND +_cpolylist ENDP + +setpalxxx MACRO + local l1,l2,l3 + mov al,cl + cmp al,64 + jb l1 + mov al,63 +l1: out dx,al + mov al,bl + cmp al,64 + jb l2 + mov al,63 +l2: out dx,al + mov al,bh + cmp al,64 + jb l3 + mov al,63 +l3: out dx,al + ENDM + +public _backpal +_backpal db 16 dup(16,16,16) + +back1 db 0,4,8 +back2 db 4,0,0 +back3 db 7,0,0 +back4 db 13,0,0 + +rolcol db 256 dup(0) +rolused db 256 dup(0) + +demo_norm PROC NEAR + ret +demo_norm ENDP + +demo_glz2 PROC NEAR + jc @@1 + mov al,es:[bx-2] + shr al,1 + and al,1 + mov es:[bx-2],al +@@1: ret +demo_glz2 ENDP + +demo_glz PROC NEAR + jnc @@7 ;visible + mov ax,es:[bx-2] + push bx + push ax + mov bl,al + xor bh,bh + mov al,cs:rolcol[bx] + mov byte ptr cs:rolcol[bx],0 + mov bl,al + mov cs:rolused[bx],0 + pop ax + pop bx + shr al,1 + and al,1 + shl al,2 + mov es:[bx-2],ax + ret +@@7: mov cl,cs:_lightshift + cmp cl,9 + je @@x9 + shrd ax,dx,8 + push ax + shrd ax,dx,1 + pop dx + add ax,dx + jmp @@x10 +@@x9: mov cl,7 + shrd ax,dx,cl +@@x10: cmp ax,0 + jge @@s1 + mov ax,0 +@@s1: cmp ax,63 + jle @@s2 + mov ax,63 +@@s2: mov ah,al + ; + push bx + movzx bx,es:[bx-2] + mov al,cs:rolcol[bx] + cmp al,0 + jne @@rc1 + mov cx,15 + mov bp,2 +@@rc3: cmp cs:rolused[bp],0 + je @@rc4 + add bp,2 + loop @@rc3 +@@rc4: mov ax,bp +@@rc2: mov cs:rolcol[bx],al + mov cs:rolused[bp],1 +@@rc1: pop bx + mov bp,es:[bx-2] + shl al,3 + mov es:[bx-2],al + + mov dx,3c8h + out dx,al + inc dx + + test bp,2 + jz @@b1 + mov bh,ah ;B + shr ah,1 + mov bl,ah ;G + jmp @@b2 +@@b1: mov cl,ah ;R + mov bl,ah ;G + mov bh,ah ;B +@@b2: push si + push di + mov si,cx + mov di,bx + + zzz=0 + REPT 16 + mov al,cs:_backpal[zzz*3+0] + shr al,2 + add cl,al + mov al,cs:_backpal[zzz*3+1] + shr al,2 + add bl,al + mov al,cs:_backpal[zzz*3+2] + shr al,2 + add bh,al + setpalxxx + mov bx,di + mov cx,si + zzz=zzz+1 + ENDM + + pop di + pop si +@@xx: ret +demo_glz ENDP + +ALIGN 2 +PUBLIC _demomode +_demomode dw OFFSET demo_glz + dw OFFSET demo_glz + dw OFFSET demo_glz2 + +PUBLIC _ceasypolylist +_ceasypolylist PROC FAR ;polylist,polys,points3 + CBEG + mov di,[bp+6] + mov es,word ptr [bp+8] + mov si,[bp+10] + mov ds,word ptr [bp+12] + mov ax,[bp+14] + add ax,4 + mov cs:pointsoff,ax + mov gs,word ptr [bp+16] + mov bp,-1 +@@2: lodsw + cmp ax,0 + je @@1 + add di,2 + mov cx,ax + movsw + mov cs:cntoff,di +@@3: push cx + mov ax,ds:[si] + add si,2 + call adddot + pop cx + loop @@3 +@@6: mov bx,cs:cntoff + mov eax,es:[bx] + cmp eax,es:[di-4] + jne @@4 + sub di,4 +@@4: mov ax,di + sub ax,cs:cntoff + shr ax,2 + mov es:[bx-4],ax + call checkhiddenbx + call cs:_demomode ;sets colors etc / hidden faces flipped + jmp @@2 +@@1: mov word ptr es:[di],0 + CEND +_ceasypolylist ENDP + +PUBLIC _cglenzinit +_cglenzinit PROC FAR + CBEG + LOADDS + mov ax,0 + call __newgroup + CEND +_cglenzinit ENDP + +PUBLIC _cglenzdone +_cglenzdone PROC FAR + CBEG + LOADDS + mov ax,2 + call __newgroup + CEND +_cglenzdone ENDP + +PUBLIC _cglenzpolylist +_cglenzpolylist PROC FAR + CBEG + LOADDS + movpar di,0 + movpar es,1 + mov ax,1 + call __newgroup + CEND +_cglenzpolylist ENDP + +PUBLIC _cdrawpolylist +_cdrawpolylist PROC FAR + CBEG + LOADDS + movpar di,0 + mov es,word ptr [bp+8] + call VIDPOLYGROUP + CEND +_cdrawpolylist ENDP + +ALIGN 4 +clipz dd 2200 + +clipsidi PROC NEAR + ;si=point1(hidden), di=point2 + ;adds new point to pointlist (fs:bp-4) + ;returns number of new point (si) + push bx + mov ecx,fs:[di+8] + mov edx,ecx + sub ecx,fs:[si+8] + ;cx=length of entire edge + sub edx,cs:clipz + ;dx=length of clipped edge + xor eax,eax + div ecx + shr eax,16 + mov ecx,eax + ;ecx=multiplier (0..65535) + mov eax,fs:[si] + sub eax,fs:[di] + imul ecx + shld edx,eax,16 + add edx,fs:[di] + push edx ;X + mov eax,fs:[si+4] + sub eax,fs:[di+4] + imul ecx + shld edx,eax,16 + add edx,fs:[di+4] ;edx=Y + ; + mov bx,fs:[bp-4] + inc bx + mov fs:[bp-4],bx + dec bx + mov si,bx + shl bx,1 + add bx,si + shl bx,2 + add bx,bp + mov fs:[bx+4],edx + pop edx + mov fs:[bx],edx + mov edx,cs:clipz + mov fs:[bx+8],edx + pop bx + ret +clipsidi ENDP + +PUBLIC _cclipedges +_cclipedges PROC FAR ;(destedges,edges,points) + CBEG + movpar bx,0 + movpar es,1 + movpar si,2 + movpar ds,3 + movpar fs,5 + movpar bp,4 + mov cx,ds:[si] + add si,4 + mov es:[bx],cx + add bx,4 + add bp,4 + ; +@@1: push cx + push si + push di + push bx + mov ax,ds:[si+4] + mov es:[bx+4],ax + mov di,ds:[si+2] + mov es:[bx+2],di + mov ax,di + shl di,1 + add di,ax + shl di,2 + add di,bp + mov si,ds:[si] + mov es:[bx],si + mov ax,si + shl si,1 + add si,ax + shl si,2 + add si,bp + ; + xor cx,cx + mov eax,fs:[si+8] ;Z + cmp eax,cs:clipz + jge @@2 + or cx,1 +@@2: mov edx,fs:[di+8] ;Z + cmp edx,cs:clipz + jge @@3 + or cx,2 +@@3: ; + cmp cx,0 + je @@4 + cmp cx,3 + jne @@5 + or word ptr es:[bx+4],8000h + jmp @@4 +@@5: cmp cx,1 + jne @@6 + ;si hidden + call clipsidi + mov es:[bx],si + jmp @@4 +@@6: ;di hidden + xchg si,di + call clipsidi + mov es:[bx+2],si +@@4: pop bx + add bx,8 + pop di + add di,8 + pop si + add si,8 + pop cx + loop @@1 + CEND +_cclipedges ENDP + +text__vec ENDS + END + \ No newline at end of file diff --git a/GLENZ/VEC.BK1 b/GLENZ/VEC.BK1 new file mode 100644 index 0000000..bcac558 --- /dev/null +++ b/GLENZ/VEC.BK1 @@ -0,0 +1,635 @@ +include asm.inc + +extrn __newgroup:far + +text__vec SEGMENT para public 'CODE' + ASSUME cs:text__vec + +.386 + +PUBLIC _lightshift +_lightshift db 0 + +PUBLIC _csetmatrix +_csetmatrix PROC FAR + CBEG + LOADDS + mov eax,[bp+10] + mov ds:xadd,eax + mov eax,[bp+14] + mov ds:yadd,eax + mov eax,[bp+18] + mov ds:zadd,eax + mov si,[bp+6] + mov ds,word ptr [bp+8] + call setmatrix + CEND +_csetmatrix ENDP + +PUBLIC _crotlist +_crotlist PROC FAR + CBEG + mov si,[bp+10] + mov ds,word ptr [bp+12] + mov di,[bp+6] + mov es,word ptr [bp+8] + call rotlist + CEND +_crotlist ENDP + +PUBLIC _cprojlist +_cprojlist PROC FAR + CBEG + mov si,[bp+10] + mov ds,word ptr [bp+12] + mov di,[bp+6] + mov es,word ptr [bp+8] + call projlist + CEND +_cprojlist ENDP + +PUBLIC setmatrix +setmatrix PROC FAR + ;ds:si=matrix + movsx eax,word ptr ds:[si+0] + mov dword ptr cs:[2+mtrm00],eax + movsx eax,word ptr ds:[si+2] + mov dword ptr cs:[2+mtrm02],eax + movsx eax,word ptr ds:[si+4] + mov dword ptr cs:[2+mtrm04],eax + movsx eax,word ptr ds:[si+6] + mov dword ptr cs:[2+mtrm06],eax + movsx eax,word ptr ds:[si+8] + mov dword ptr cs:[2+mtrm08],eax + movsx eax,word ptr ds:[si+10] + mov dword ptr cs:[2+mtrm10],eax + movsx eax,word ptr ds:[si+12] + mov dword ptr cs:[2+mtrm12],eax + movsx eax,word ptr ds:[si+14] + mov dword ptr cs:[2+mtrm14],eax + movsx eax,word ptr ds:[si+16] + mov dword ptr cs:[2+mtrm16],eax + ret +setmatrix ENDP + +ALIGN 2 +count dw 0 + +rotlist PROC FAR + ;pointlist@DS:SI=>pointlist@ES:DI + push di + LOADGS + mov cx,ds:[si] + add si,4 + mov cs:count,cx + mov ax,es:[di] + add es:[di],cx + mov bx,ax + shl ax,1 + add ax,bx + shl ax,2 + add di,ax + add di,4 + +nrup1: ;rotate with matrix + push si + push di + mov ebp,ds:[si+8] + mov edi,ds:[si+4] + mov esi,ds:[si+0] +mtrm00: mov eax,12345678h + imul esi + mov ebx,eax + mov ecx,edx +mtrm02: mov eax,12345678h + imul edi + add ebx,eax + adc ecx,edx +mtrm04: mov eax,12345678h + imul ebp + add ebx,eax + adc ecx,edx + shld ecx,ebx,17 + push ecx +mtrm06: mov eax,12345678h + imul esi + mov ebx,eax + mov ecx,edx +mtrm08: mov eax,12345678h + imul edi + add ebx,eax + adc ecx,edx +mtrm10: mov eax,12345678h + imul ebp + add ebx,eax + adc ecx,edx + shld ecx,ebx,17 + push ecx +mtrm12: mov eax,12345678h + imul esi + mov ebx,eax + mov ecx,edx +mtrm14: mov eax,12345678h + imul edi + add ebx,eax + adc ecx,edx +mtrm16: mov eax,12345678h + imul ebp + add ebx,eax + adc ecx,edx + shld ecx,ebx,17 + pop edx + pop eax + pop di + pop si + ; + add ecx,gs:xadd + mov es:[di+0],ecx + add edx,gs:yadd + mov es:[di+4],edx + add eax,gs:zadd + mov es:[di+8],eax + ;next point + add si,12 + add di,12 + dec cs:count + jnz nrup1 + pop di + ret +rotlist ENDP + +projlist PROC FAR + ;pointlist@DS:SI=>projectedpointlist@ES:DI + push di + LOADGS + mov cx,ds:[si] + add si,4 + mov cs:count,cx + mov ax,es:[di] + add es:[di],cx + mov bx,ax + shl ax,1 + add ax,bx + shl ax,2 + add di,ax + add di,4 + +@@1: ;rotate with matrix + mov ebx,ds:[si+8] + mov eax,ds:[si+4] + mov ecx,ds:[si+0] + + ;project + + xor bp,bp + mov dword ptr es:[di+8],ebx + cmp ebx,gs:projminz + jge @@2 + mov ebx,gs:projminz + or bp,16 +@@2: ; + imul gs:projymul + idiv ebx + add ax,gs:projyadd + cmp ax,gs:wmaxy + jng @@41 + or bp,8 +@@41: cmp ax,gs:wminy + jnl @@42 + or bp,4 +@@42: mov es:[di+2],ax ;store Y + ; + mov eax,gs:projxmul + imul ecx + idiv ebx + add ax,gs:projxadd + cmp ax,gs:wmaxx + jng @@43 + or bp,2 +@@43: cmp ax,gs:wminx + jnl @@44 + or bp,1 +@@44: mov es:[di+0],ax ;store X + +@@5: mov es:[di+4],bp ;store visiblity flags + + ;next point + add si,12 + add di,12 + dec cs:count + jnz @@1 + pop di + ret +projlist ENDP + +ALIGN 2 +edgesoff dw 0 +pointsoff dw 0 +cntoff dw 0 + +adddot PROC NEAR + cmp ax,bp + je @@3 + mov bp,ax + ;add dot + push bx + mov bx,ax + shl bx,1 + add bx,ax + shl bx,2 + add bx,cs:pointsoff + mov eax,gs:[bx] + stosd + pop bx +@@3: ret +adddot ENDP + +checkhiddenbx PROC NEAR + push si + mov ax,es:[bx] + mov si,es:[bx+2] + sub ax,es:[bx+4] + sub si,es:[bx+8+2] + imul si + push ax + push dx + mov ax,es:[bx+2] + mov si,es:[bx] + sub ax,es:[bx+4+2] + sub si,es:[bx+8] + imul si + pop cx + pop si + sub ax,si + sbb dx,cx + pop si + cmp dx,0 + jl @@1 + clc + ret +@@1: stc + ret +checkhiddenbx ENDP + +PUBLIC _cpolylist +_cpolylist PROC FAR ;polylist,polys,edges,points3 + CBEG + mov di,[bp+6] + mov es,word ptr [bp+8] + mov si,[bp+10] + mov ds,word ptr [bp+12] + mov ax,[bp+14] + add ax,4 + mov cs:edgesoff,ax + mov fs,word ptr [bp+16] + mov ax,[bp+18] + add ax,4 + mov cs:pointsoff,ax + mov gs,word ptr [bp+20] + mov bp,-1 +@@2: lodsw + cmp ax,0 + je @@1 + add di,2 + mov cx,ax + movsw + mov cs:cntoff,di +@@3: push cx + mov bx,ds:[si] + add si,2 + shl bx,3 + add bx,cs:edgesoff + test word ptr fs:[bx+4],8000h + jnz @@7 + mov ax,fs:[bx+2] + cmp ax,bp + je @@5 + mov ax,fs:[bx] + call adddot + mov ax,fs:[bx+2] + call adddot +@@7: pop cx + loop @@3 + jmp @@6 +@@5: mov ax,fs:[bx+2] + call adddot + mov ax,fs:[bx] + call adddot + pop cx + loop @@3 +@@6: mov bx,cs:cntoff + mov eax,es:[bx] + cmp eax,es:[di-4] + jne @@4 + sub di,4 +@@4: mov ax,di + sub ax,cs:cntoff + shr ax,2 + mov es:[bx-4],ax + call checkhiddenbx + jnc @@2 + xor word ptr es:[bx-2],8000h + jmp @@2 +@@1: mov word ptr es:[di],0 + CEND +_cpolylist ENDP + +setpalxxx MACRO + local l1,l2,l3 + mov al,cl + cmp al,64 + jb l1 + mov al,63 +l1: out dx,al + mov al,bl + cmp al,64 + jb l2 + mov al,63 +l2: out dx,al + mov al,bh + cmp al,64 + jb l3 + mov al,63 +l3: out dx,al + ENDM + +demo_glz PROC NEAR + jnc @@7 ;visible + push ax + mov ax,es:[bx-2] + shr al,3 + and al,1 + mov es:[bx-2],ax + pop ax + ret +@@7: mov cl,cs:_lightshift + sub cl,2 + shrd ax,dx,cl + cmp ax,0 + jge @@s1 + mov ax,0 +@@s1: cmp ax,63 + jle @@s2 + mov ax,63 +@@s2: mov ah,al + ; + mov dx,3c8h + mov al,es:[bx-2] + test al,7 + jnz @@xx + out dx,al + inc dx + mov cl,ah ;R + mov bl,ah ;G + mov bh,ah ;B + ;Inner1 Inner2 Back + setpalxxx ;- - - + + add cl,16 + setpalxxx ;- - + + sub cl,16 + + add bl,16 + add cl,16 ; + setpalxxx ;- + - + sub cl,16 ; + sub bl,16 + + add cl,16 + add bl,16 + setpalxxx ;- + + + sub bl,16 + sub cl,16 + + add bh,16 + setpalxxx ;+ - - + sub bh,16 + + add cl,16 + add bh,16 + setpalxxx ;+ - + + sub bh,16 + sub cl,16 + + add bl,16 + add bh,16 + setpalxxx ;+ + - + sub bh,16 + sub bl,16 + + add cl,16 + add bl,16 + add bh,16 + setpalxxx ;+ + + + add bh,16 + add bl,16 + sub cl,16 + +@@xx: ret +demo_glz ENDP + +PUBLIC _ceasypolylist +_ceasypolylist PROC FAR ;polylist,polys,points3 + CBEG + mov di,[bp+6] + mov es,word ptr [bp+8] + mov si,[bp+10] + mov ds,word ptr [bp+12] + mov ax,[bp+14] + add ax,4 + mov cs:pointsoff,ax + mov gs,word ptr [bp+16] + mov bp,-1 +@@2: lodsw + cmp ax,0 + je @@1 + add di,2 + mov cx,ax + movsw + mov cs:cntoff,di +@@3: push cx + mov ax,ds:[si] + add si,2 + call adddot + pop cx + loop @@3 +@@6: mov bx,cs:cntoff + mov eax,es:[bx] + cmp eax,es:[di-4] + jne @@4 + sub di,4 +@@4: mov ax,di + sub ax,cs:cntoff + shr ax,2 + mov es:[bx-4],ax + call checkhiddenbx + call demo_glz ;sets colors etc / hidden faces flipped + jmp @@2 +@@1: mov word ptr es:[di],0 + CEND +_ceasypolylist ENDP + +PUBLIC _cglenzinit +_cglenzinit PROC FAR + CBEG + LOADDS + mov ax,0 + call __newgroup + CEND +_cglenzinit ENDP + +PUBLIC _cglenzdone +_cglenzdone PROC FAR + CBEG + LOADDS + mov ax,2 + call __newgroup + CEND +_cglenzdone ENDP + +PUBLIC _cglenzpolylist +_cglenzpolylist PROC FAR + CBEG + LOADDS + movpar di,0 + movpar es,1 + mov ax,1 + call __newgroup + CEND +_cglenzpolylist ENDP + +PUBLIC _cdrawpolylist +_cdrawpolylist PROC FAR + CBEG + LOADDS + movpar di,0 + mov es,word ptr [bp+8] + call VIDPOLYGROUP + CEND +_cdrawpolylist ENDP + +ALIGN 4 +clipz dd 2200 + +clipsidi PROC NEAR + ;si=point1(hidden), di=point2 + ;adds new point to pointlist (fs:bp-4) + ;returns number of new point (si) + push bx + mov ecx,fs:[di+8] + mov edx,ecx + sub ecx,fs:[si+8] + ;cx=length of entire edge + sub edx,cs:clipz + ;dx=length of clipped edge + xor eax,eax + div ecx + shr eax,16 + mov ecx,eax + ;ecx=multiplier (0..65535) + mov eax,fs:[si] + sub eax,fs:[di] + imul ecx + shld edx,eax,16 + add edx,fs:[di] + push edx ;X + mov eax,fs:[si+4] + sub eax,fs:[di+4] + imul ecx + shld edx,eax,16 + add edx,fs:[di+4] ;edx=Y + ; + mov bx,fs:[bp-4] + inc bx + mov fs:[bp-4],bx + dec bx + mov si,bx + shl bx,1 + add bx,si + shl bx,2 + add bx,bp + mov fs:[bx+4],edx + pop edx + mov fs:[bx],edx + mov edx,cs:clipz + mov fs:[bx+8],edx + pop bx + ret +clipsidi ENDP + +PUBLIC _cclipedges +_cclipedges PROC FAR ;(destedges,edges,points) + CBEG + movpar bx,0 + movpar es,1 + movpar si,2 + movpar ds,3 + movpar fs,5 + movpar bp,4 + mov cx,ds:[si] + add si,4 + mov es:[bx],cx + add bx,4 + add bp,4 + ; +@@1: push cx + push si + push di + push bx + mov ax,ds:[si+4] + mov es:[bx+4],ax + mov di,ds:[si+2] + mov es:[bx+2],di + mov ax,di + shl di,1 + add di,ax + shl di,2 + add di,bp + mov si,ds:[si] + mov es:[bx],si + mov ax,si + shl si,1 + add si,ax + shl si,2 + add si,bp + ; + xor cx,cx + mov eax,fs:[si+8] ;Z + cmp eax,cs:clipz + jge @@2 + or cx,1 +@@2: mov edx,fs:[di+8] ;Z + cmp edx,cs:clipz + jge @@3 + or cx,2 +@@3: ; + cmp cx,0 + je @@4 + cmp cx,3 + jne @@5 + or word ptr es:[bx+4],8000h + jmp @@4 +@@5: cmp cx,1 + jne @@6 + ;si hidden + call clipsidi + mov es:[bx],si + jmp @@4 +@@6: ;di hidden + xchg si,di + call clipsidi + mov es:[bx+2],si +@@4: pop bx + add bx,8 + pop di + add di,8 + pop si + add si,8 + pop cx + loop @@1 + CEND +_cclipedges ENDP + +text__vec ENDS + END + \ No newline at end of file diff --git a/GLENZ/VEC.CUT b/GLENZ/VEC.CUT new file mode 100644 index 0000000..fdec706 --- /dev/null +++ b/GLENZ/VEC.CUT @@ -0,0 +1,164 @@ + push si + push di + mov si,cx + mov di,bx + setpalxxx + + add cl,cs:back1[0] + add bl,cs:back1[1] + add bh,cs:back1[2] + setpalxxx + mov bx,di + mov cx,si + + add cl,cs:back2[0] + add bl,cs:back2[1] + add bh,cs:back2[2] + setpalxxx + mov bx,di + mov cx,si + + add cl,cs:back1[0] + add bl,cs:back1[1] + add bh,cs:back1[2] + add cl,cs:back2[0] + add bl,cs:back2[1] + add bh,cs:back2[2] + setpalxxx + mov bx,di + mov cx,si + + add cl,cs:back3[0] + add bl,cs:back3[1] + add bh,cs:back3[2] + setpalxxx + mov bx,di + mov cx,si + + add cl,cs:back1[0] + add bl,cs:back1[1] + add bh,cs:back1[2] + add cl,cs:back3[0] + add bl,cs:back3[1] + add bh,cs:back3[2] + setpalxxx + mov bx,di + mov cx,si + + add cl,cs:back3[0] + add bl,cs:back3[1] + add bh,cs:back3[2] + add cl,cs:back2[0] + add bl,cs:back2[1] + add bh,cs:back2[2] + setpalxxx + mov bx,di + mov cx,si + + add cl,cs:back3[0] + add bl,cs:back3[1] + add bh,cs:back3[2] + add cl,cs:back2[0] + add bl,cs:back2[1] + add bh,cs:back2[2] + add cl,cs:back1[0] + add bl,cs:back1[1] + add bh,cs:back1[2] + setpalxxx + mov bx,di + mov cx,si + + add cl,cs:back4[0] + add bl,cs:back4[1] + add bh,cs:back4[2] + setpalxxx + mov bx,di + mov cx,si + + add cl,cs:back1[0] + add bl,cs:back1[1] + add bh,cs:back1[2] + add cl,cs:back4[0] + add bl,cs:back4[1] + add bh,cs:back4[2] + setpalxxx + mov bx,di + mov cx,si + + add cl,cs:back4[0] + add bl,cs:back4[1] + add bh,cs:back4[2] + add cl,cs:back2[0] + add bl,cs:back2[1] + add bh,cs:back2[2] + setpalxxx + mov bx,di + mov cx,si + + add cl,cs:back4[0] + add bl,cs:back4[1] + add bh,cs:back4[2] + add cl,cs:back2[0] + add bl,cs:back2[1] + add bh,cs:back2[2] + add cl,cs:back1[0] + add bl,cs:back1[1] + add bh,cs:back1[2] + setpalxxx + mov bx,di + mov cx,si + + add cl,cs:back4[0] + add bl,cs:back4[1] + add bh,cs:back4[2] + add cl,cs:back3[0] + add bl,cs:back3[1] + add bh,cs:back3[2] + setpalxxx + mov bx,di + mov cx,si + + add cl,cs:back4[0] + add bl,cs:back4[1] + add bh,cs:back4[2] + add cl,cs:back3[0] + add bl,cs:back3[1] + add bh,cs:back3[2] + add cl,cs:back1[0] + add bl,cs:back1[1] + add bh,cs:back1[2] + setpalxxx + mov bx,di + mov cx,si + + add cl,cs:back4[0] + add bl,cs:back4[1] + add bh,cs:back4[2] + add cl,cs:back3[0] + add bl,cs:back3[1] + add bh,cs:back3[2] + add cl,cs:back2[0] + add bl,cs:back2[1] + add bh,cs:back2[2] + setpalxxx + mov bx,di + mov cx,si + + add cl,cs:back4[0] + add bl,cs:back4[1] + add bh,cs:back4[2] + add cl,cs:back3[0] + add bl,cs:back3[1] + add bh,cs:back3[2] + add cl,cs:back2[0] + add bl,cs:back2[1] + add bh,cs:back2[2] + add cl,cs:back1[0] + add bl,cs:back1[1] + add bh,cs:back1[2] + setpalxxx + mov bx,di + mov cx,si + + pop di + pop si diff --git a/GLENZ/VEC.LST b/GLENZ/VEC.LST new file mode 100644 index 0000000..0ef2996 --- /dev/null +++ b/GLENZ/VEC.LST @@ -0,0 +1,173 @@ +Turbo Assembler Version 2.5 02/21/93 18:09:17 Page 1 +vec.asm + + + + 1 0000 text__vec SEGMENT para public 'CODE' + 2 ASSUME cs:text__vec + 3 + 4 .386 + 5 + 6 PUBLIC setmatrix + 7 0000 setmatrix PROC FAR + 8 ;ds:si=matrix + 9 0000 8B 04 mov ax,ds:[si+0] + 10 0002 2E: A3 006Fr mov word ptr cs:[1+mtrm00],ax + 11 0006 8B 44 02 mov ax,ds:[si+2] + 12 0009 2E: A3 007Cr mov word ptr cs:[1+mtrm02],ax + 13 000D 8B 44 04 mov ax,ds:[si+4] + 14 0010 2E: A3 0089r mov word ptr cs:[1+mtrm04],ax + 15 0014 8B 44 06 mov ax,ds:[si+6] + 16 0017 2E: A3 009Dr mov word ptr cs:[1+mtrm06],ax + 17 001B 8B 44 08 mov ax,ds:[si+8] + 18 001E 2E: A3 00AAr mov word ptr cs:[1+mtrm08],ax + 19 0022 8B 44 0A mov ax,ds:[si+10] + 20 0025 2E: A3 00B7r mov word ptr cs:[1+mtrm10],ax + 21 0029 8B 44 0C mov ax,ds:[si+12] + 22 002C 2E: A3 00CBr mov word ptr cs:[1+mtrm12],ax + 23 0030 8B 44 0E mov ax,ds:[si+14] + 24 0033 2E: A3 00DAr mov word ptr cs:[1+mtrm14],ax + 25 0037 8B 44 10 mov ax,ds:[si+16] + 26 003A 2E: A3 00E7r mov word ptr cs:[1+mtrm16],ax + 27 003E CB ret + 28 003F setmatrix ENDP + 29 + 30 003F 90 ALIGN 2 + 31 0040 0000 count dw 0 + 32 + 33 0042 dovertices PROC FAR + 34 ;normals etc, only rotate + 35 ;pointlist@DS:SI=>pointlist@ES:DI + 36 0042 57 push di + 37 LOADGS +**Error** vec.asm(37) Illegal instruction + 38 0043 8B 0C mov cx,ds:[si] + 39 0045 83 C6 04 add si,4 + 40 0048 2E: 89 0E 0040r mov cs:count,cx + 41 004D 26: 8B 05 mov ax,es:[di] + 42 0050 26: 01 0D add es:[di],cx + 43 0053 8B D8 mov bx,ax + 44 0055 D1 E0 shl ax,1 + 45 0057 03 C3 add ax,bx + 46 0059 C1 E0 02 shl ax,2 + 47 005C 03 F8 add di,ax + 48 005E 83 C7 04 add di,4 + 49 + 50 0061 nrup1: ;rotate with matrix + 51 0061 56 push si + 52 0062 57 push di + 53 0063 66| 8B 6C 08 mov ebp,ds:[si+8] + 54 0067 66| 8B 7C 04 mov edi,ds:[si+4] + 55 006B 66| 8B 34 mov esi,ds:[si+0] + 56 + Turbo Assembler Version 2.5 02/21/93 18:09:17 Page 2 +vec.asm + + + + 57 006E 66| 69 F6 12345678 mtrm00: imul esi,12345678h + 58 0075 66| 8B D8 mov ebx,eax + 59 0078 66| 8B CA mov ecx,edx + 60 007B 66| 69 FF 12345678 mtrm02: imul edi,12345678h + 61 0082 66| 03 D8 add ebx,eax + 62 0085 66| 13 CA adc ecx,edx + 63 0088 66| 69 ED 12345678 mtrm04: imul ebp,12345678h + 64 008F 66| 03 D8 add ebx,eax + 65 0092 66| 13 CA adc ecx,edx + 66 0095 66| 0F A4 D9 11 shld ecx,ebx,17 + 67 009A 66| 51 push ecx + 68 009C 66| 69 F6 12345678 mtrm06: imul esi,12345678h + 69 00A3 66| 8B D8 mov ebx,eax + 70 00A6 66| 8B CA mov ecx,edx + 71 00A9 66| 69 FF 12345678 mtrm08: imul edi,12345678h + 72 00B0 66| 03 D8 add ebx,eax + 73 00B3 66| 13 CA adc ecx,edx + 74 00B6 66| 69 ED 12345678 mtrm10: imul ebp,12345678h + 75 00BD 66| 03 D8 add ebx,eax + 76 00C0 66| 13 CA adc ecx,edx + 77 00C3 66| 0F A4 D9 11 shld ecx,ebx,17 + 78 00C8 66| 51 push ecx + 79 00CA 66| B8 12345678 mtrm12: mov eax,12345678h + 80 00D0 66| F7 EE imul esi + 81 00D3 66| 8B D8 mov ebx,eax + 82 00D6 66| 8B CA mov ecx,edx + 83 00D9 66| 69 FF 12345678 mtrm14: imul edi,12345678h + 84 00E0 66| 03 D8 add ebx,eax + 85 00E3 66| 13 CA adc ecx,edx + 86 00E6 66| 69 ED 12345678 mtrm16: imul ebp,12345678h + 87 00ED 66| 03 D8 add ebx,eax + 88 00F0 66| 13 CA adc ecx,edx + 89 00F3 66| 0F A4 D9 11 shld ecx,ebx,17 + 90 00F8 66| 5A pop edx + 91 00FA 66| 58 pop eax + 92 00FC 5F pop di + 93 00FD 5E pop si + 94 ; + 95 00FE 66| 65: 03 0E 0000 add ecx,gs:xadd +**Error** vec.asm(95) Undefined symbol: XADD + 96 0104 66| 26: 89 0D mov es:[di+0],ecx + 97 0108 66| 65: 03 0E 0000 add ecx,gs:yadd +**Error** vec.asm(97) Undefined symbol: YADD + 98 010E 66| 26: 89 55 04 mov es:[di+4],edx + 99 0113 66| 65: 03 06 0000 add eax,gs:zadd +**Error** vec.asm(99) Undefined symbol: ZADD + 100 0119 66| 26: 89 45 08 mov es:[di+8],eax + 101 ;next point + 102 011E 83 C6 0C add si,12 + 103 0121 83 C7 0C add di,12 + 104 0124 FF 0E 0040r dec ds:count + 105 0128 0F 85 FF35 jnz nrup1 + 106 012C 5F pop di + 107 012D CB ret + 108 012E dovertices ENDP + 109 + 110 012E text__vec ENDS + Turbo Assembler Version 2.5 02/21/93 18:09:17 Page 3 +vec.asm + + + + 111 END + Turbo Assembler Version 2.5 02/21/93 18:09:17 Page 4 +Symbol Table + + + + +Symbol Name Type Value + +??DATE Text "02/21/93" +??FILENAME Text "vec " +??TIME Text "18:09:13" +??VERSION Number 0205 +@CPU Text 0D0FH +@CURSEG Text TEXT__VEC +@FILENAME Text VEC +@WORDSIZE Text 4 +COUNT Word TEXT__VEC:0040 +DOVERTICES Far TEXT__VEC:0042 +MTRM00 Near TEXT__VEC:006E +MTRM02 Near TEXT__VEC:007B +MTRM04 Near TEXT__VEC:0088 +MTRM06 Near TEXT__VEC:009C +MTRM08 Near TEXT__VEC:00A9 +MTRM10 Near TEXT__VEC:00B6 +MTRM12 Near TEXT__VEC:00CA +MTRM14 Near TEXT__VEC:00D9 +MTRM16 Near TEXT__VEC:00E6 +NRUP1 Near TEXT__VEC:0061 +SETMATRIX Far TEXT__VEC:0000 + +Groups & Segments Bit Size Align Combine Class + +TEXT__VEC 16 012E Para Public CODE + Turbo Assembler Version 2.5 02/21/93 18:09:17 Page 5 +Error Summary + + + +**Error** vec.asm(37) Illegal instruction +**Error** vec.asm(95) Undefined symbol: XADD +**Error** vec.asm(97) Undefined symbol: YADD +**Error** vec.asm(99) Undefined symbol: ZADD + \ No newline at end of file diff --git a/GLENZ/VEC.OBJ b/GLENZ/VEC.OBJ new file mode 100644 index 0000000..5385be7 Binary files /dev/null and b/GLENZ/VEC.OBJ differ diff --git a/GLENZ/VECCMD.ASM b/GLENZ/VECCMD.ASM new file mode 100644 index 0000000..6d51eb9 --- /dev/null +++ b/GLENZ/VECCMD.ASM @@ -0,0 +1,394 @@ + +cmdo1max equ 15 ;##?? +cmdo2 LABEL WORD ;commads 77## + dw OFFSET cmd700 + dw OFFSET cmd701 + dw OFFSET cmd702 + dw OFFSET nrserr;cmd703 + dw OFFSET nrserr;cmd704 + dw OFFSET cmd705 + dw OFFSET cmd706 + dw OFFSET cmd707 + dw OFFSET cmd708 + dw OFFSET cmd709 + dw OFFSET cmd70a + dw OFFSET cmd70b + dw OFFSET nrserr;cmd70c + dw OFFSET nrserr + dw OFFSET nrserr + dw OFFSET nrserr + dw OFFSET cmd710 + dw OFFSET cmd711 + dw OFFSET cmd712 + dw OFFSET cmd713 + dw OFFSET cmd714 + dw OFFSET cmd715 + dw OFFSET cmd716 + dw OFFSET nrserr + dw OFFSET nrserr + dw OFFSET cmd719 + dw OFFSET nrserr + dw OFFSET nrserr + dw OFFSET nrserr + dw OFFSET nrserr + dw OFFSET nrserr + dw OFFSET cmd71F + dw OFFSET cmd720 + dw OFFSET cmd721 + dw OFFSET cmd722 +cmdo2max equ 22h + +ALIGN 2 +nrscount dw 0 +nrsbase dw 0 +docmd_dssi PROC NEAR + push cs:[nrscount] + inc ax + mov cs:nrscount,ax +nrsl: ;nodeloop, entered also by goto + dec cs:nrscount + jz nrsret + lodsw + cmp ah,77h + je nrs77 + cmp ah,cmdo1max + ja nrserr + cmp ah,0 + je cmd00 + call nrs_poly + jmp nrsl +nrs77: cmp al,cmdo2max + ja nrserr + mov bl,al + xor bh,bh + shl bx,1 + jmp cs:cmdo2[bx] +nrsret: pop cs:[nrscount] + ret + +nrserr: ;error, unknown block etc! + sub si,2 + mov ax,ds:[si] + int 3 + mov cx,16 +nrserr1: push cx + forcesetborder 1 + forcesetborder 15 + pop cx + loop nrserr1 + +cmd00: mov ax,1 ;add this object to OBJD list + jmp nrsret + +cmd700: ;goto + mov si,ds:[si] + jmp nrsl + +cmd701: ;call + push si + push ds + mov si,ds:[si] + call donrsnode + pop ds + pop si + add si,2 + jmp nrsl + +cmd702: ;call multiple + lodsw + cmp ax,-1 + je nr7c1 + push si + push ds + mov si,ax + call donrsnode + pop ds + pop si + jmp cmd702 +nr7c1: jmp nrsl + +cmd705: ;call just one command (no node push/pop/etc) + lodsw + push si + push ds + add ax,cs:nrsbase + mov si,ax + mov ax,1 ;do just one command + call docmd_dssi + pop ds + pop si + jmp nrsl + +cmd70a: ;call multiple one command (no node push/pop/etc) + mov cx,ds:[si] + add si,2 +cm70a2: push cx + lodsw + push si + push ds + add ax,cs:nrsbase + mov si,ax + mov ax,1 ;do just one command + call docmd_dssi + pop ds + pop si + pop cx + loop cm70a2 + jmp nrsl + +cmd706: ;set base offset + mov ax,si + sub ax,2 + mov cs:nrsbase,ax + jmp nrsl + +cmd707: ;goto/relative + mov si,ds:[si] + add si,cs:nrsbase + jmp nrsl + +cmd708: lodsw + or cs:noflags,ax + jmp nrsl + +cmd709: ;call NRS header equipped node + push si + push ds + mov si,ds:[si] + call donrswheader + pop ds + pop si + add si,2 + jmp nrsl + +cmd712: ;translate and move +cmd710: ;translate + push ax + mov di,OFFSET nmatrix + call rotateposition ;si=>rotatedx,y,z + mov eax,cs:rotatedx + add cs:nxpos,eax + mov eax,cs:rotatedy + add cs:nypos,eax + mov eax,cs:rotatedz + add cs:nzpos,eax + + mov ebp,ds:[si+4] + mov dword ptr ds:[si+4],0 + mov di,OFFSET nmatrix + call rotateposition ;si=>rotatedx,y,z + mov eax,cs:rotatedx + add cs:nxspos,eax + mov eax,cs:rotatedy + add cs:nyspos,eax + mov eax,cs:rotatedz + add cs:nzspos,eax + mov ds:[si+4],ebp + + add si,12 + pop ax + cmp al,12h + jne nr7d2 + mov cx,cs:_framestaken +cm710b: mov eax,ds:[si] + add ds:[si-3*4],eax + mov eax,ds:[si+4] + add ds:[si-2*4],eax + mov eax,ds:[si+8] + add ds:[si-1*4],eax + loop cm710b + add si,12 +nr7d2: jmp nrsl + +cmd711: ;rotate ZR*YR*XR + push si + push ds + mov ax,ds:[si+0] + mov bx,ds:[si+2] + mov cx,ds:[si+4] + cmp ax,0 + jne nr7e1 + cmp bx,0 + jne nr7e1 + cmp cx,0 + jne nr7e1 + jmp nr7e2 +nr7e1: cmp ax,ds:[si+6] + jne nr7e3 + cmp bx,ds:[si+8] + jne nr7e3 + cmp cx,ds:[si+10] + jne nr7e3 + mov ax,ds + mov es,ax + mov di,si + add di,12 + jmp nr7e4 +nr7e3: mov ds:[si+6],ax + mov ds:[si+8],bx + mov ds:[si+10],cx + mov di,si + add di,12 + call calcmatrix ;ds:si=src(rx,ry,rz) => ds:di=dest + mov ax,ds + mov es,ax +nr7e4: mov si,OFFSET nmatrix + mov ax,cs + mov ds,ax + call mulmatrices +nr7e2: pop ds + pop si + add si,6+6+9*2 + jmp nrsl + +cmd719: ;simplex precalced zsort jmp + mov cx,ds:[si] + add si,2 + mov edx,32767 +cm719b: mov ebx,ds:[si] + shl bx,pointshl + push edx + mov eax,dword ptr cs:point[PX+bx] ;X + imul eax + mov edi,eax + mov eax,dword ptr cs:point[PY+bx] ;Y + imul eax + add edi,eax + mov eax,dword ptr cs:point[PZ+bx] ;Z + imul eax + add edi,eax + sar edi,16 + mov bx,di + pop edx + cmp bx,dx + jg cm719c + mov edx,ebx +cm719c: add si,4 + loop cm719b + shr edx,16 + add dx,cs:nrsbase + mov si,dx + jmp nrsl + +cmd720: ;bounding box + add si,6 + call initnrsobj + jmp nrsl + +cmd721: ;points + push si + push ds + mov ax,cs + mov ds,ax + mov si,OFFSET nmatrix + call nwritematrix + pop ds + pop si + mov cx,ds:[si] + add si,2 + ;calc + push cx + push ds + push si + call ncalcpoints ;cx,ds:si + pop si + pop ds + pop cx + ;add si + shl cx,1 + mov dx,cx + shl cx,1 + add cx,dx + add si,cx + jmp nrsl + +cmd722: ;normals + push si + push ds + mov ax,cs + mov ds,ax + mov si,OFFSET nmatrix + call nwritematrix2 + pop ds + pop si + mov cx,ds:[si] + add si,2 + ;calc + push cx + push ds + push si + call ncalcpoints2 ;cx,ds:si + pop si + pop ds + pop cx + ;add si + shl cx,1 + mov dx,cx + shl cx,1 + add cx,dx + add si,cx + jmp nrsl + +cmd70b: ;breakpoint + int 3 + jmp nrsl + +cmd713: ;killer counter + cmp word ptr ds:[si],0 + jg nr7k1 + mov ax,0 ;do NOT add this object to OBJD list + jmp nrsret +nr7k1: dec word ptr ds:[si] + add si,2 + jmp nrsl + +cmd714: ;rotate ZR*YR*XR + push si + push ds + mov ax,ds + mov es,ax + mov di,si + mov si,OFFSET nmatrix + mov ax,cs + mov ds,ax + call mulmatrices + pop ds + pop si + add si,9*2 + jmp nrsl + +cmd715: ;far goto + mov bx,ds:[si] + mov ax,ds:[si+2] + cmp bx,0 + jne cm715a + cmp ax,0 + jne cm715a + jmp cmd00 +cm715a: mov ds,ax + mov si,bx + jmp nrsl + +cmd716: ;lightsource position + push ds + push si + mov di,OFFSET nmatrix + call rotateposition + mov eax,cs:rotatedx + mov ebx,cs:rotatedy + mov ecx,cs:rotatedz + call unify32 + shl ax,6 + shl bx,6 + shl cx,6 + mov cs:newlight[0],ax + mov cs:newlight[2],bx + mov cs:newlight[4],cx + pop si + pop ds + add si,12 + jmp nrsl + +cmd71F: ;set shadow level + jmp nrsl +docmd_dssi ENDP diff --git a/GLENZ/VID.ASM b/GLENZ/VID.ASM new file mode 100644 index 0000000..f707457 --- /dev/null +++ b/GLENZ/VID.ASM @@ -0,0 +1,409 @@ +include asm.inc + +;publics: +;setvmode() + +extrn _bgpic:far + +text__vid SEGMENT para public 'CODE' + ASSUME cs:text__vid + +.386 + +modes dw OFFSET v320x200x256 + dw OFFSET v320x350x256 + dw OFFSET v320x350x256 + dw OFFSET v320x240x256 + dw OFFSET vtseng640x400x256 + +PUBLIC setvmode +setvmode PROC FAR + ;ax=mode => ds:si + mov bx,ax + shl bx,1 + mov bx,cs:modes[bx] + mov cx,16 +@@1: mov ax,cs:[bx] + mov ds:[si],ax + mov word ptr ds:[si+2],cs + add si,4 + add bx,2 + loop @@1 + ret +setvmode ENDP + +;video mode structure +v320x200x256 LABEL WORD + dw OFFSET init320x200 ;init routine + dw OFFSET switch320x200 ;page switcher + dw OFFSET clear64k ;clear all screens + dw OFFSET twpset + dw OFFSET twlineto + dw OFFSET twhline + dw OFFSET twhlinegroup + dw OFFSET twthlinegroup + dw OFFSET polygroup + dw OFFSET clearpage + dw OFFSET fwaitborder +v320x350x256 LABEL WORD + dw OFFSET init320x350 ;init routine + dw OFFSET switch320x350 ;page switcher + dw OFFSET clear64k ;clear all screens + dw OFFSET twpset + dw OFFSET twlineto + dw OFFSET twhline + dw OFFSET twhlinegroup + dw OFFSET twthlinegroup + dw OFFSET polygroup + dw OFFSET clearpage + dw OFFSET fwaitborder +v320x350x256unr LABEL WORD + dw OFFSET init320x350unr ;init routine + dw OFFSET switch320x350 ;page switcher + dw OFFSET clear64k ;clear all screens + dw OFFSET twpset + dw OFFSET twlineto + dw OFFSET twhline + dw OFFSET twhlinegroup + dw OFFSET twthlinegroup + dw OFFSET polygroup + dw OFFSET clearpage + dw OFFSET fwaitborder +v320x240x256 LABEL WORD + dw OFFSET init320x240 ;init routine + dw OFFSET switch320x240 ;page switcher + dw OFFSET clear64k ;clear all screens + dw OFFSET twpset + dw OFFSET twlineto + dw OFFSET twhline + dw OFFSET twhlinegroup + dw OFFSET twthlinegroup + dw OFFSET polygroup + dw OFFSET clearpage + dw OFFSET fwaitborder +vtseng640x400x256 LABEL WORD + dw OFFSET init640x400 ;init routine + dw OFFSET switch640x400 ;page switcher + dw OFFSET clear640x400 ;clear all screens + dw OFFSET twpset + dw OFFSET twlineto + dw OFFSET twhline + dw OFFSET twhlinegroup + dw OFFSET twthlinegroup + dw OFFSET polygroup + dw OFFSET clearpage + dw OFFSET fwaitborder + +include vidmisc.asm +include vidinit.asm +include vidtwe.asm +include vidnrm.asm +include vidpoly.asm + +;**************************************************************** + +setrows PROC NEAR + mov cs:rowsadd,dx + mov cs:truerowsadd,dx + xor ax,ax + mov bx,OFFSET rows +ain1: mov ds:[bx],ax + add ax,dx + add bx,2 + loop ain1 + ret +setrows ENDP + +ALIGN 2 +pagep dw 0 +wpage dw 0,1,2 +wpage2 dw 0,4,8 +spage dw 2,0,1 + +init640x400 PROC FAR + LOADDS + mov ds:projxmul,256*2 + mov ds:projymul,213*2 + mov ds:projxadd,320 + mov ds:projyadd,200 + mov ds:projminz,128 + mov ds:projminzshr,7 + mov ds:wminx,0 + mov ds:wminy,0 + mov ds:wmaxx,639 + mov ds:wmaxy,399 + mov ds:framerate10,700 ;70 frames/sec + ; + mov ax,11h ;640x480/mono + int 10h + call tweak640x400 + mov cx,400 + mov dx,160 + call setrows + ret +init640x400 ENDP + +switch640x400 PROC FAR +swipa2: mov ax,0a000h + mov cs:vram,ax + mov cs:truevram,ax + mov bx,cs:pagep + inc bx + cmp bx,3 + jb sws1 + xor bx,bx +sws1: mov cs:pagep,bx + shl bx,1 + mov dx,3d4h + mov al,33h + mov ah,byte ptr cs:spage[bx] + out dx,ax ;spage + ;set wpage + mov al,byte ptr cs:wpage[bx] + mov ah,al + rol ah,4 + or al,ah + mov dx,3cdh + out dx,al + ;page low offset + mov dx,3d4h + mov ax,000dh + out dx,ax + mov ax,000ch + out dx,ax + ret +switch640x400 ENDP + +clear640x400 PROC FAR + call switch640x400 + call clear64k + call switch640x400 + call clear64k + call switch640x400 + call clear64k + call switch640x400 + call clear64k + ret +clear640x400 ENDP + +;**************************************************************** + +ALIGN 2 +t324v dw 0a5f0h +t324v1 dw 0aaa0h +t324v2 dw 0a140h +t324vout dw 01400h +t324vout1 dw 05f00h +t324vout2 dw 0aa00h + +init320x200 PROC FAR + LOADDS + mov ds:projxmul,256 + mov ds:projymul,213 + mov ds:projxadd,160 + mov ds:projyadd,130 + mov ds:projminz,128 + mov ds:projminzshr,7 + mov ds:wminx,0 + mov ds:wminy,0 + mov ds:wmaxx,319 + mov ds:wmaxy,199 + mov ds:framerate10,700 + ; +; call tweak320x200 + mov cx,200 + mov dx,80 + call setrows + ret +init320x200 ENDP + +init320x240 PROC FAR + LOADDS + mov ds:projxmul,256 + mov ds:projymul,256 + mov ds:projxadd,160 + mov ds:projyadd,120 + mov ds:projminz,128 + mov ds:projminzshr,7 + mov ds:wminx,0 + mov ds:wminy,0 + mov ds:wmaxx,319 + mov ds:wmaxy,239 + mov ds:framerate10,610 ;60 frames/sec + ; + call tweak320x200 + LOADDS + mov si,OFFSET hseq1 + call sethseq ;to 240 mode + mov cx,240 + mov dx,80 + call setrows + ret +init320x240 ENDP + +switch320x240b PROC FAR + LOADDS + mov ax,cs:t324v + mov bx,cs:t324v1 + mov cs:t324v,bx + mov cs:t324v1,ax + mov ds:vram,bx + mov ds:truevram,bx + mov bx,cs:t324vout1 + mov cx,cs:t324vout2 + mov cs:t324vout1,cx + mov cs:t324vout2,bx + mov dx,3d4h + mov al,0ch + mov ah,bh + out dx,ax + ret +switch320x240b ENDP + +switch320x240 PROC FAR +switch320x200: + LOADDS + mov ax,cs:t324v + mov bx,cs:t324v1 + mov cx,cs:t324v2 + mov cs:t324v,bx + mov cs:t324v1,cx + mov cs:t324v2,ax + mov ds:vram,bx + mov ds:truevram,bx + mov ax,cs:t324vout + mov bx,cs:t324vout1 + mov cx,cs:t324vout2 + mov cs:t324vout,bx + mov cs:t324vout1,cx + mov cs:t324vout2,ax + mov dx,3d4h + mov al,0ch + mov ah,bh + out dx,ax + ret +switch320x240 ENDP + +clear64k PROC FAR + cld + mov dx,3c4h + mov ax,0f02h + out dx,ax + mov ax,0a000h + mov es,ax + mov cx,32768 + xor ax,ax + xor di,di + rep stosw + ret +clear64k ENDP + +;**************************************************************** + +init320x350unr PROC FAR + LOADDS + mov ds:projxmul,256 + mov ds:projymul,420 + mov ds:projxadd,180 + mov ds:projyadd,175 + mov ds:projminz,128 + mov ds:projminzshr,7 + mov ds:wminx,0 + mov ds:wminy,32 + mov ds:wmaxx,359 + mov ds:wmaxy,349-32 + mov ds:framerate10,700 ;70 frames/sec + ; + call tweak320x350 + mov cx,350 + mov dx,92 + call setrows + ret +init320x350unr ENDP + +init320x350 PROC FAR + LOADDS + mov ds:projxmul,256 + mov ds:projymul,420 + mov ds:projxadd,180 + mov ds:projyadd,175 + mov ds:projminz,128 + mov ds:projminzshr,7 + mov ds:wminx,0 + mov ds:wminy,0 + mov ds:wmaxx,359 + mov ds:wmaxy,349 + mov ds:framerate10,700 ;70 frames/sec + ; + call tweak360x350 + mov cx,350 + mov dx,92 + call setrows + ret +init320x350 ENDP + +ALIGN 2 +t365v dw 0a000h +t365v1 dw 0a800h +t365vo dw 08000h +t365vo1 dw 00000h + +switch320x350 PROC FAR + LOADDS + mov ax,cs:t365v + xchg ax,cs:t365v1 + mov cs:t365v,ax + mov ds:vram,ax + mov ds:truevram,ax + mov bx,cs:t365vo + xchg bx,cs:t365vo1 + mov cs:t365vo,bx + mov dx,3d4h + mov al,0ch + mov ah,bh + out dx,ax + call waitborder + ret +switch320x350 ENDP + +justret PROC FAR + ret +justret ENDP + +clearpage PROC FAR + push ax + mov dx,3c4h + mov ax,0f02h + out dx,ax + mov es,ds:vram + mov di,ds:wminy + shl di,1 + mov di,ds:rows[di] + mov ax,ds:wminx + mov dx,ds:wmaxx + sub dx,ax + shr ax,2 + add di,ax + add dx,7 + shr dx,4 + mov cx,ds:wmaxy + sub cx,ds:wminy + inc cx + pop ax + push ax + shl eax,16 + pop ax +@@1: push cx + push di + mov cx,dx + rep stosd + pop di + pop cx + add di,ds:rowsadd + loop @@1 + ret +clearpage ENDP + +text__vid ENDS + END + \ No newline at end of file diff --git a/GLENZ/VID.OBJ b/GLENZ/VID.OBJ new file mode 100644 index 0000000..9547a35 Binary files /dev/null and b/GLENZ/VID.OBJ differ diff --git a/GLENZ/VIDINIT.ASM b/GLENZ/VIDINIT.ASM new file mode 100644 index 0000000..b692058 --- /dev/null +++ b/GLENZ/VIDINIT.ASM @@ -0,0 +1,519 @@ +SC_INDEX equ 3c4h ;Sequence Controller Index register +GC_INDEX equ 3ceh ;Graphics Controller Index register +CRTC_INDEX equ 3d4h ;CRT Controller Index register +MEMORY_MODE equ 4 ;Memory Mode register index in SC +UNDERLINE equ 14h ;Underline Location reg index in CRTC +MODE_CONTROL equ 17h ;Mode Control register index in CRTC +GRAPHICS_MODE equ 5 ;Graphics Mode register index in GC +MISCELLANEOUS equ 6 ;Miscellaneous register index in GC + +hseq1 LABEL WORD ;0=start + dw 479 ;display enable end + dw 485 ;start vertical blank + dw 490 ;start vertical retrace + dw 500 ;end vertical retrace + dw 505 ;end vertical blank + dw 510 ;vertical total + dw 480+1 ;200/350/400/480=lines/monitor, +1=double scanning + +hseq2 LABEL WORD ;0=start + dw 349 ;display enable end + dw 354 ;start vertical blank + dw 360+50 ;start vertical retrace + dw 375+100 ;end vertical retrace + dw 395+100 ;end vertical blank + dw 399+100 ;vertical total + +tweak320x200 PROC NEAR +; +; First, go to normal 320x200 256-color mode, which is really a +; 320x400 256-color mode with each line scanned twice. +; + mov ax,0013h ;AH = 0 means mode set, AL = 13h selects + ; 256-color graphics mode + int 10h ;BIOS video interrupt + mov dx,3c8h + mov al,0 + out dx,al + inc dx + mov cx,768 +reclr: out dx,al + loop reclr +; +; Change CPU addressing of video memory to linear (not odd/even, +; chain, or chain 4), to allow us to access all 256K of display +; memory. When this is done, VGA memory will look just like memory +; in modes 10h and 12h, except that each byte of display memory will +; control one 256-color pixel, with 4 adjacent pixels at any given +; address, one pixel per plane. +; + mov dx,SC_INDEX + mov al,MEMORY_MODE + out dx,al + inc dx + in al,dx + and al,not 08h ;turn off chain 4 + or al,04h ;turn off odd/even + out dx,al + mov dx,GC_INDEX + mov al,GRAPHICS_MODE + out dx,al + inc dx + in al,dx + and al,not 10h ;turn off odd/even + out dx,al + dec dx + mov al,MISCELLANEOUS + out dx,al + inc dx + in al,dx + and al,not 02h ;turn off chain + out dx,al + +; +; Tweak the mode to 320x200 256-color mode by scanning each +; line twice. +; + mov dx,CRTC_INDEX + mov al,9 +; out dx,al + inc dx +; in al,dx + and al,not 5fh ;set maximum scan line = 0 + OR AL,1 +; out dx,al + dec dx +; +; Change CRTC scanning from doubleword mode to byte mode, allowing +; the CRTC to scan more than 64K of video data. +; + mov al,UNDERLINE + out dx,al + inc dx + in al,dx + and al,not 40h ;turn off doubleword + out dx,al + dec dx + mov al,MODE_CONTROL + out dx,al + inc dx + in al,dx + or al,40h ;turn on the byte mode bit, so memory is + ; scanned for video data in a purely + ; linear way, just as in modes 10h and 12h + out dx,al + + ret + +; +; First, go to normal 320x200 256-color mode, which is really a +; 320x400 256-color mode with each line scanned twice. +; + mov ax,0013h ;AH = 0 means mode set, AL = 13h selects + ; 256-color graphics mode + int 10h ;BIOS video interrupt +; +; Change CPU addressing of video memory to linear (not odd/even, +; chain, or chain 4), to allow us to access all 256K of display +; memory. When this is done, VGA memory will look just like memory +; in modes 10h and 12h, except that each byte of display memory will +; control one 256-color pixel, with 4 adjacent pixels at any given +; address, one pixel per plane. +; + mov dx,SC_INDEX + mov al,MEMORY_MODE + out dx,al + inc dx + in al,dx + and al,not 08h ;turn off chain 4 + or al,04h ;turn off odd/even + out dx,al + mov dx,GC_INDEX + mov al,GRAPHICS_MODE + out dx,al + inc dx + in al,dx + and al,not 10h ;turn off odd/even + out dx,al + dec dx + mov al,MISCELLANEOUS + out dx,al + inc dx + in al,dx + and al,not 02h ;turn off chain + out dx,al + + mov dx,SC_INDEX + mov ax,00f02h ;CLEAR ALL PLANES + out dx,ax + ;mov ax,cs:vram + ;mov es,ax + ;mov cx,32768 + ;xor ax,ax + ;rep stosw +; +; Tweak the mode to 320x200 256-color mode by scanning each +; line twice. +; + mov dx,CRTC_INDEX + mov al,9 + out dx,al + inc dx + in al,dx + and al,not 5fh ;set maximum scan line = 0 + OR AL,1 + out dx,al + dec dx +; +; Change CRTC scanning from doubleword mode to byte mode, allowing +; the CRTC to scan more than 64K of video data. +; + mov al,UNDERLINE + out dx,al + inc dx + in al,dx + and al,not 40h ;turn off doubleword + out dx,al + dec dx + mov al,MODE_CONTROL + out dx,al + inc dx + in al,dx + or al,40h ;turn on the byte mode bit, so memory is + ; scanned for video data in a purely + ; linear way, just as in modes 10h and 12h + out dx,al + + mov dx,CRTC_INDEX + mov ax,2813h + out dx,ax ;width>=320 + + ret +tweak320x200 ENDP + +sethseq PROC NEAR ;ds:si=hseq + mov bl,1fh ;overflow + mov bh,40h ;maximum scan line + test word ptr ds:[si+12],1 + jz sss9 + or bh,80h +sss9: + mov ax,ds:[si+0] + test ax,256 + jz sss3 + or bl,2 +sss3: test ax,512 + jz sss4 + or bl,64 +sss4: mov ah,al + mov dx,3d4h + mov al,12h + out dx,ax + + mov ax,ds:[si+2] + test ax,256 + jz sss1 + or bl,8 +sss1: test ax,512 + jz sss2 + or bh,32 +sss2: mov ah,al + mov dx,3d4h + mov al,15h + out dx,ax + + mov ax,ds:[si+4] + test ax,256 + jz sss7 + or bl,4 +sss7: test ax,512 + jz sss8 + or bl,128 +sss8: mov ah,al + mov dx,3d4h + mov al,10h + out dx,ax + + mov ax,ds:[si+6] + mov ah,al + and ah,15 + or ah,20h ;disable vertical int + mov dx,3d4h + mov al,11h + out dx,ax + + mov ax,ds:[si+8] + mov ah,al + mov dx,3d4h + mov al,16h + out dx,ax + + mov ax,ds:[si+10] + test ax,256 + jz sss5 + or bl,1 +sss5: test ax,512 + jz sss6 + or bl,32 +sss6: mov ah,al + mov dx,3d4h + mov al,6h + out dx,ax + + mov dx,3d4h + mov al,7h + mov ah,bl + out dx,ax + + mov dx,3d4h + mov al,9h + mov ah,bh + out dx,ax + + mov ax,ds:[si+12] + and ax,not 1 + mov bh,0 + cmp ax,350 + jne sss10 + mov bh,1*64 +sss10: cmp ax,400 + jne sss11 + mov bh,2*64 +sss11: cmp ax,480 + jne sss12 + mov bh,3*64 +sss12: mov dx,3cch + in al,dx + and al,3fh + or al,bh + mov dx,3c2h + out dx,al + ret +sethseq ENDP + +vptbl dw 06a00h ; horz total + dw 05901h ; horz displayed + dw 05a02h ; start horz blanking + dw 08d03h ; end horz blanking + dw 05e04h ; start h sync + dw 08a05h ; end h sync + dw 08b06h ;0d06h ; vertical total + dw 01f07h ;03e07h ; overflow + dw 04009h ; cell height + dw 06810h ; v sync start + dw 02a11h ; v sync end and protect cr0-cr7 + dw 05d12h ; vertical displayed + dw 02e13h ; offset 92 + dw 00014h ; turn off dword mode + dw 05d15h ; v blank start + dw 00016h ; v blank end + dw 0e317h ; turn on byte mode +vpend label word + +mode13x proc + push ds + mov ax,cs + mov ds,ax + + mov ax,13h ; start with standard mode 13h + int 10h ; let the bios set the mode + + mov dx,3c4h ; alter sequencer registers + mov ax,0604h ; disable chain 4 + out dx,ax + + mov ax,0f02h ; set write plane mask to all bit planes + out dx,ax + push di + xor di,di + mov ax,0a000h ; screen starts at segment A000 + mov es,ax + mov cx,21600 ; ((XSIZE*YSIZE)/(4 planes))/(2 bytes per word) + xor ax,ax + cld + rep stosw ; clear the whole of the screen + pop di + + mov ax,0100h ; synchronous reset + out dx,ax ; asserted + mov dx,3c2h ; misc output + mov al,0a7h ; use 28 mHz dot clock ;a7 + out dx,al ; select it + mov dx,3c4h ; sequencer again + mov ax,0300h ; restart sequencer + out dx,ax ; running again + + mov dx,3d4h ; alter crtc registers + + mov al,11h ; cr11 + out dx,al ; current value + inc dx ; point to data + in al,dx ; get cr11 value + and al,7fh ; remove cr0 -> cr7 + out dx,al ; write protect + dec dx ; point to index + cld + mov si,offset vptbl + mov cx,((offset vpend)-(offset vptbl)) shr 1 +outlp: lodsw + out dx,ax + loop outlp + + mov ax,cs + mov ds,ax + mov si,OFFSET hseq2 + call sethseq + +; mov dx,3dah +; in al,dx +; mov dx,3c0h +; mov al,11h+32 +; out dx,al +; mov al,8 +; out dx,al + + pop ds + ret +mode13x endp + +tweak640x400 PROC NEAR +; +; First, go to normal 320x200 256-color mode, which is really a +; 320x400 256-color mode with each line scanned twice. +; + mov ax,002fh + int 10h ;BIOS video interrupt +; +; Change CPU addressing of video memory to linear (not odd/even, +; chain, or chain 4), to allow us to access all 256K of display +; memory. When this is done, VGA memory will look just like memory +; in modes 10h and 12h, except that each byte of display memory will +; control one 256-color pixel, with 4 adjacent pixels at any given +; address, one pixel per plane. +; + mov dx,SC_INDEX + mov al,MEMORY_MODE + out dx,al + inc dx + in al,dx + and al,not 08h ;turn off chain 4 + or al,04h ;turn off odd/even + out dx,al + mov dx,GC_INDEX + mov al,GRAPHICS_MODE + out dx,al + inc dx + in al,dx + and al,not 10h ;turn off odd/even + out dx,al + dec dx + mov al,MISCELLANEOUS + out dx,al + inc dx + in al,dx + and al,not 02h ;turn off chain + out dx,al + ret +; +; Change CRTC scanning from doubleword mode to byte mode, allowing +; the CRTC to scan more than 64K of video data. +; + mov al,UNDERLINE + out dx,al + inc dx + in al,dx + and al,not 40h ;turn off doubleword + out dx,al + dec dx + mov al,MODE_CONTROL + out dx,al + inc dx + in al,dx + or al,40h ;turn on the byte mode bit, so memory is + ; scanned for video data in a purely + ; linear way, just as in modes 10h and 12h + out dx,al + + ret +tweak640x400 ENDP + +hseq3 LABEL WORD ;0=start + dw 349 ;display enable end + dw 355 ;start vertical blank + dw 395 ;start vertical retrace + dw 405 ;end vertical retrace + dw 445 ;end vertical blank + dw 455 ;vertical total + dw 350 ;200/350/400/480=lines/monitor, +1=double scanning + +tweak360x350 proc + push ds + mov ax,cs + mov ds,ax + + mov ax,13h ; start with standard mode 13h + int 10h ; let the bios set the mode + + mov dx,3c4h ; alter sequencer registers + mov ax,0604h ; disable chain 4 + out dx,ax + + mov ax,0f02h ; set write plane mask to all bit planes + out dx,ax + push di + xor di,di + mov ax,0a000h ; screen starts at segment A000 + mov es,ax + mov cx,21600 ; ((XSIZE*YSIZE)/(4 planes))/(2 bytes per word) + xor ax,ax + cld + rep stosw ; clear the whole of the screen + pop di + + mov ax,0100h ; synchronous reset + out dx,ax ; asserted + mov dx,3c2h ; misc output + mov al,0a7h ; use 28 mHz dot clock + out dx,al ; select it + mov dx,3c4h ; sequencer again + mov ax,0300h ; restart sequencer + out dx,ax ; running again + + mov dx,3d4h ; alter crtc registers + + mov al,11h ; cr11 + out dx,al ; current value + inc dx ; point to data + in al,dx ; get cr11 value + and al,7fh ; remove cr0 -> cr7 + out dx,al ; write protect + dec dx ; point to index + cld + mov si,offset vptbl + mov cx,((offset vpend)-(offset vptbl)) shr 1 +outlpn: lodsw + out dx,ax + loop outlpn + + mov ax,cs + mov ds,ax + mov si,OFFSET hseq3 + call sethseq + + pop ds + ret +tweak360x350 endp + +hseq4 LABEL WORD ;0=start + dw 349 ;display enable end + dw 355 ;start vertical blank + dw 395 ;start vertical retrace + dw 405 ;end vertical retrace + dw 450 ;end vertical blank + dw 455 ;vertical total + dw 350 ;200/350/400/480=lines/monitor, +1=double scanning + +tweak320x350 proc + call tweak360x350 + ret +tweak320x350 endp diff --git a/GLENZ/VIDMISC.ASM b/GLENZ/VIDMISC.ASM new file mode 100644 index 0000000..04d8793 --- /dev/null +++ b/GLENZ/VIDMISC.ASM @@ -0,0 +1,56 @@ + +forcesetborder MACRO color + local l1 + push ax + push dx + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,11h+32 + out dx,al + mov al,color + out dx,al + pop dx + pop ax + ENDM + +PUBLIC _setborder +_setborder PROC FAR + CBEG + push cx + mov cx,[bp+6] + forcesetborder cl + pop cx + CEND +_setborder ENDP + +fwaitborder PROC FAR + call waitborder + ret +fwaitborder ENDP + +waitborder PROC NEAR + mov dx,3dah +wbr1: in al,dx + test al,8 + jnz wbr1 +wbr2: in al,dx + test al,8 + jz wbr2 + ret +waitborder ENDP + +clearpal PROC NEAR + cli + call waitborder + mov dx,3c8h + mov al,0 + out dx,al + mov cx,768 + inc dx +clp1: out dx,al + loop clp1 + call waitborder + sti + ret +clearpal ENDP diff --git a/GLENZ/VIDNRM.ASM b/GLENZ/VIDNRM.ASM new file mode 100644 index 0000000..173d365 --- /dev/null +++ b/GLENZ/VIDNRM.ASM @@ -0,0 +1,485 @@ +;256 color normal routines + +;routines ending in "1" are vector drawers: +; DS:SI preserved +; OUT 3C4,02h required +; DS=CS & ES=vram required + +ALIGN 4 +nrpset PROC FAR + ;requires: OUT 3C4,2 + ;DS:SI preserved, CX preserved! + shl bx,1 + mov di,ds:rows[bx] + mov bx,3 + and bx,dx + sar dx,2 + add di,dx + mov al,ds:middledot[bx] + mov dx,3c5h + out dx,al + mov al,ds:color1 + mov es:[di],al + ret +nrpset ENDP + +nrhline PROC FAR + ;requires: OUT 3C4,2 + ;DS:SI must be preserved! + ;(ax,bx)-(dx,bx) + cmp ax,dx + jl nrhi1 + xchg ax,dx +nrhi1: + cmp ax,0 + jnl nrhi2 + cmp dx,0 + jl nrhi0 + xor ax,ax +nrhi2: cmp dx,ds:wmaxx + jng nrhi21 + cmp ax,ds:wmaxx + jg nrhi0 + mov dx,ds:wmaxx + +nrhi21: mov di,ax + sar di,2 + mov cx,dx + sar cx,2 + sub cx,di + shl bx,1 + add di,ds:rows[bx] + + mov bp,3 + and bp,ax + mov bh,ds:leftside[bp] + mov bp,3 + and bp,dx + mov bl,ds:rightside[bp] + mov dx,3c5h + + ;(di..si,bx) + cmp cx,0 + je nrhi30 + ;left side + mov al,bh + out dx,al + mov al,ds:color1 + stosb + dec cx + mov ah,al + ;middle + jcxz nrhi33 + mov al,0fh + out dx,al + mov al,ah + test di,1 + jz nrhi32 + stosb + dec cx +nrhi32: shr cx,1 + rep stosw + adc cx,cx + rep stosb +nrhi33: ;right side + mov al,bl + out dx,al + mov al,ah + mov es:[di],al +nrhi0: ret +nrhi30: ;end and beg in same byte + mov al,bl + and al,bh + out dx,al + mov al,ds:color1 + mov es:[di],al + ret +nrhline ENDP + +;line variables - shared - also in vidtwe.asm +;xdif dw 0 +;ydif dw 0 +;xabs dw 0 +;yabs dw 0 +;xsgn dw 0 +;ysgn dw 0 +;xtmp dw 0 +;ytmp dw 0 +;tmplnx dw 0 +;tmplny dw 0 + +nrpsetc PROC NEAR + ;(dx,bx)=(color), es must be 0a000h + ;uses nothing + push ax + push bx + push cx + push dx + mov ch,al + mov cl,dl + shl bx,1 + mov bx,cs:rows[bx] + sar dx,1 + sar dx,1 + add bx,dx + and cl,3 + mov ax,102h + mov dx,03c4h + shl ah,cl + out dx,ax + mov al,cs:color1 + mov es:[bx],al + pop dx + pop cx + pop bx + pop ax + ret +nrpsetc ENDP + +nrlineto PROC FAR + ;draw line from (cx,ax) to (dx,bx) with color (color) + ;requires ds=cs, es=vram, changes: ax + push cx + push si + push di + push bp + push dx + push bx + + mov ds:tmplnx,cx + mov ds:tmplny,ax + + ;set insider point as begin of line + cmp dx,ds:wmaxx + ja nrlt4 + cmp bx,wmaxy + ja nrlt4 + jmp nrlt5 ;dx,bx is inside, no changes +nrlt4: ;dx,bx outside, swap + xchg bx,ds:tmplny + xchg dx,ds:tmplnx + ;check with new bx,dx + cmp dx,ds:wmaxx + ja nrlt6 + cmp bx,wmaxy + ja nrlt6 + jmp nrlt5 ;dx,bx is inside + +nrlt6: ;both ends outside! Cut 'em here, not ready yet + +nrlt5: mov ds:xtmp,dx + mov ds:ytmp,bx + ;calc differencies xdif,ydif (+-) & abs difs, xabs,yabs (+) + ;and signs xsgn,ysgn (-1/0/1) + xor cx,cx + mov ax,ds:tmplnx + sub ax,dx + mov ds:xdif,ax + or ax,ax + je nrlt1 + inc cx + test ax,32768 + jz nrlt1 + neg ax + dec cx + dec cx +nrlt1: mov ds:xabs,ax + mov ds:xsgn,cx + + xor cx,cx + mov ax,ds:tmplny + sub ax,bx + mov ds:ydif,ax + or ax,ax + je nrlt2 + inc cx + test ax,32768 + jz nrlt2 + neg ax + dec cx + dec cx +nrlt2: mov ds:yabs,ax + mov ds:ysgn,cx + + ;which is bigger? + cmp ax,ds:xabs + ja nrlt3 + + ;xbigger + + ;calc addl/h (si,di) + jne nrlt9 + ;1/1 addition, 45 degree curve + cmp ax,0 + jne nrlt15 + mov dx,cs:tmplnx + mov bx,ds:tmplny + call nrpsetc + jmp nrlt10 +nrlt15: mov di,ds:ysgn + mov si,65535 + jmp nrlt10 +nrlt9: mov dx,ax ;dx=yabs + xor ax,ax + div ds:xabs ;ax=lowadd + mov si,ax + mov di,ds:ysgn + +nrlt10: mov ax,32767 + mov bp,ds:xsgn + mov cx,ds:xabs + inc cx + mov dx,ds:xtmp + mov bx,ds:ytmp +nrlt7: call nrpsetc + add dx,bp ;xsgn + add ax,si ;yaddl + jnc nrlt8 + add bx,di ;ysgn +nrlt8: loop nrlt7 + + jmp nrlt0 + + +nrlt3: ;ybigger + + mov dx,ds:xabs + xor ax,ax + div ds:yabs ;ax=lowadd + mov si,ax + mov di,ds:xsgn + +nrlt12: mov ax,32767 + mov bp,ds:ysgn + mov cx,ds:yabs + inc cx + mov dx,ds:xtmp + mov bx,ds:ytmp +nrlt13: call nrpsetc + add bx,bp ;ysgn + add ax,si ;xaddl + jnc nrlt14 + add dx,di ;xsgn +nrlt14: loop nrlt13 + +nrlt0: pop bx + pop dx + mov ds:tmplnx,dx + mov ds:tmplny,bx + pop bp + pop di + pop si + pop cx + ret +nrlineto ENDP + +nrhlinegroup PROC FAR + ;requires: OUT 3C4,2 + mov dx,3c4h + mov al,2 + out dx,al + + mov bx,gs:[si] + add si,2 + dec bx + push bx + +nrhg92: pop bx + inc bx + push bx + mov ax,gs:[si] + add si,2 + cmp ax,-32767 + jne nrhg91 + pop bx + ret +nrhg91: mov dx,ax + mov ax,gs:[si] + add si,2 + + cmp ax,dx + jl nrhg1 + xchg ax,dx +nrhg1: + cmp ax,ds:wminx + jnl nrhg2 + cmp dx,ds:wminx + jl nrhg92 + mov ax,ds:wminx +nrhg2: cmp dx,ds:wmaxx + jng nrhg21 + cmp ax,ds:wmaxx + jg nrhg92 + mov dx,ds:wmaxx + +nrhg21: mov di,ax + mov cx,dx + sub cx,ax + shl bx,1 + add di,ds:rows[bx] + mov al,cs:color1 + mov ah,al + + cmp cx,8 + jl nrhg22 + + mov dx,ax + shl eax,16 + mov ax,dx + + mov dx,cx + mov cx,4 + sub cx,di + and cx,3 + sub dx,cx + rep stosb + mov cx,dx + shr cx,2 + rep stosd + mov cx,dx + and cx,3 + rep stosb + jmp nrhg92 + +nrhg22: shr cx,1 + rep stosw + adc cx,cx + rep stosb + jmp nrhg92 +nrhlinegroup ENDP + +ALIGN 2 +bpmultable LABEL WORD +dw 0 +cc=1 +REPT 255 +dw (16383)/cc +cc=cc+1 +ENDM + +public _dimtable +_dimtable db 256 dup(1) +ALIGN 2 +tmpax dw 0 + +nrthlinegroup PROC NEAR + ;requires: OUT 3C4,2 + mov dx,3c4h + mov al,2 + out dx,al + + mov bx,gs:[si] + add si,2 + dec bx + jmp tnrg93 +tnrg92: pop bx + add si,8 +tnrg93: inc bx + push bx + mov dx,gs:[si] ;left + cmp dx,-32767 + jne tnrg91 + pop bx + ret +tnrg91: mov ax,gs:[si+2] ;right + + cmp ax,dx + jl tnrg1 + xchg ax,dx + mov cx,gs:[si+4] + xchg cx,gs:[si+6] + mov gs:[si+4],cx +tnrg1: + cmp ax,ds:wminx + jnl tnrg2 + cmp dx,ds:wminx + jl tnrg92 + mov ax,ds:wminx +tnrg2: cmp dx,ds:wmaxx + jng tnrg21 + cmp ax,ds:wmaxx + jg tnrg92 + mov dx,ds:wmaxx + +tnrg21: mov ds:tmpax,ax + mov cx,dx + sub cx,ax + jcxz tnrg92 + shl bx,1 + mov di,ds:rows[bx] + + mov bp,cx ;count + + shl bp,1 + mov bx,word ptr cs:bpmultable[bp] + shr bp,1 + + mov ah,gs:[si+4] ;endx + sub ah,gs:[si+6] ;startx + xor al,al + imul bx + shld dx,ax,2 + ;dx=y, eaxh=x + mov cl,dh + mov ah,dl + xor al,al + rol eax,16 ;xadd + + mov ah,gs:[si+5] ;endy + sub ah,gs:[si+7] ;starty + xor al,al + imul bx + shld dx,ax,2 + mov ch,dh + mov dh,dl ;yadd + xor dl,dl + rol edx,16 + mov dx,cx + cmp dl,80h + adc dh,-1 ;x/yaddhi + + push si + push ds + mov ax,fs + mov ds,ax + + shl bp,4 + mov bx,cs:tmpax + shl bx,4 + add bx,OFFSET bas256 + add bp,bx + mov ax,bx + mov byte ptr cs:[bp],0c3h ;ret + push bp + movzx ebx,word ptr gs:[si+6] ;startxy/zero ylow + xor ecx,ecx ;zero xlow + call ax + pop bx + mov byte ptr cs:[bx],066h ;start of add ecx,eax + + pop ds + pop si + jmp tnrg92 + + ;....Exx..H....L.... + ;ax xadd - tmp + ;bx ylow y x + ;cx xlow - - + ;dx yadd yah xah + ;si - - - + ;di - distbase + ;bp - - - + +ALIGN 16 +bas256: cc=0 + REPT 256 + add ecx,eax ;@0 + mov al,ds:[bx] ;@3 + adc ebx,edx ;@5 + adc bh,0 ;@8 + db 26h,88h,85h ;@B ;mov es:[di+XXX],al + dw cc ;@E ;XXX + cc=cc+1 ;@10 + ENDM + add ecx,eax +nrthlinegroup ENDP diff --git a/GLENZ/VIDPOLY.ASM b/GLENZ/VIDPOLY.ASM new file mode 100644 index 0000000..9e3c219 --- /dev/null +++ b/GLENZ/VIDPOLY.ASM @@ -0,0 +1,1009 @@ +;borders - can be found in asm.asm at the tmp work area (size 8K = 1024 rows) +ALIGN 4 +PUBLIC _polyinfo +_polyinfo LABEL WORD +polysides dw 0 ;polygon sides +polyxy dw 32 dup(0,0) ;x1,y1,x2,y2,... +polyz dd 32 dup(0) ;z1,z2,... +polytxy dw 32 dup(0,0) ;texturexy +POLYZ equ OFFSET polyz-OFFSET polyxy +POLYTXY equ OFFSET polytxy-OFFSET polyxy +;clipped from polyclip +cpolyxy dw 32 dup(0,0) +cpolyxy2 dw 32 dup(0,0) ;tmp storage for polyclip +cpolysides dw 0 + +polygroup PROC FAR ;draw polygon group + ;es:di=pointer to polygon group: + ; word: sides (0=end of list, &256=texture) + ; word: color (|8000=hidden |4000=forceshow) + ; word(s): x,y +@@1: mov cx,es:[di] + add di,2 + or cx,cx + jz @@3 + mov cs:polysides,cx + mov ax,es:[di] + add di,2 + test ah,40h + jnz @@6 + test ah,80h + jnz @@5 +@@6: mov ds:color1,al + mov bx,OFFSET polyxy + sub bx,di + sub bx,4 +@@2: mov eax,es:[di] + add di,4 + mov cs:[di+bx],eax + loop @@2 + push es + push di + call poly + pop di + pop es + jmp @@1 +@@3: ret +@@5: shl cx,2 + add di,cx + jmp @@1 +polygroup ENDP + +polyroutines LABEL WORD + dw OFFSET polyret + dw OFFSET poly1 + dw OFFSET poly2 + dw OFFSET polyf ;poly3 + dw OFFSET polyf ;poly4 ;poly4 + dw OFFSET polyf ;polyn ;poly>4 + +IFDEF 0 +tpolyroutines LABEL WORD + dw OFFSET polyret + dw OFFSET poly1 + dw OFFSET poly2 + dw OFFSET polyft + dw OFFSET polyft + dw OFFSET polyft +ENDIF + +poly PROC NEAR ;**** + mov dx,3c4h + mov al,2 + out dx,al + mov es,ds:vram + mov ax,cs:polysides + mov cs:cpolysides,ax + cmp ax,2 + ja noclip + call clipanypoly ;only lines at the moment, others done by polyrout +noclip: mov si,OFFSET polyroutines +; test cs:groupflags,4 +; jz notext +; mov si,OFFSET tpolyroutines +notext: mov bx,cs:cpolysides + cmp bx,5 + jb ply1 + jmp cs:[si+10] +ply1: shl bx,1 + jmp cs:[si+bx] +polyret: ret +poly ENDP + +;***** POLYGON CLIP + + +clip_x1 dw 0 +clip_y1 dw 0 +clip_x2 dw 0 +clip_y2 dw 0 + +clipanypoly PROC NEAR + ;polysides/polyxy => cpolysides/cpolyxy + mov cx,ds:polysides + cmp cx,2 + jg cap3 + cmp cx,1 + je cap4 + jcxz cap0 + ;line + mov eax,dword ptr ds:polyxy[0] + mov dword ptr ds:clip_x1,eax + mov eax,dword ptr ds:polyxy[4] + mov dword ptr ds:clip_x2,eax +cap2r: call clipliney + cmp ax,0 + jnz cap0 + call cliplinex + cmp ax,0 + jnz cap0 + mov eax,dword ptr ds:clip_x1 + mov dword ptr ds:cpolyxy[0],eax + mov edx,dword ptr ds:clip_x2 + mov dword ptr ds:cpolyxy[4],edx + cmp eax,edx + je cap2 + mov word ptr ds:cpolysides,2 + ret +cap2: mov word ptr ds:cpolysides,1 + ret +cap4: ;dot + mov eax,dword ptr ds:polyxy[0] + cmp ax,cs:wminx + jl cap0 + cmp ax,cs:wmaxx + jg cap0 + ror eax,16 + cmp ax,cs:wminy + jl cap0 + cmp ax,cs:wmaxy + jg cap0 + ror eax,16 + mov dword ptr ds:cpolyxy,eax + mov word ptr cs:cpolysides,1 + ret +cap0: ;all clipped away + mov word ptr ds:cpolysides,0 + ret +cap3: ;polygon, first clip y, then x + mov si,cx + shl si,2 + sub si,4 + mov di,0 + mov eax,dword ptr ds:polyxy[si] + mov dword ptr ds:clip_x1,eax + mov eax,dword ptr ds:polyxy[di] + mov dword ptr ds:clip_x2,eax + call clipliney + ; + mov cx,ds:polysides + xor di,di + xor bx,bx + mov edx,80008000h + jmp cap35 +cap32: push di + push bx + push cx + push edx + mov si,di + sub si,4 + mov eax,dword ptr ds:polyxy[si] + mov dword ptr ds:clip_x1,eax + mov eax,dword ptr ds:polyxy[di] + mov dword ptr ds:clip_x2,eax + call clipliney + pop edx + pop cx + pop bx + pop di +cap35: cmp ax,0 + jnz cap34 + mov eax,dword ptr ds:clip_x1 + cmp eax,edx + je cap33 + mov dword ptr ds:cpolyxy2[bx],eax + mov edx,eax + add bx,4 +cap33: mov eax,dword ptr ds:clip_x2 + cmp eax,edx + je cap34 + mov dword ptr ds:cpolyxy2[bx],eax + mov edx,eax + add bx,4 +cap34: add di,4 + loop cap32 + ; + mov cx,bx + shr cx,2 + cmp dword ptr ds:cpolyxy2[0],edx + jne cap31 + dec cx +cap31: mov ds:cpolysides,cx + + cmp cx,2 + jg cap39 + cmp cx,0 + je cap38 + mov eax,dword ptr ds:cpolyxy2[0] + mov dword ptr ds:clip_x1,eax + mov eax,dword ptr ds:cpolyxy2[4] + mov dword ptr ds:clip_x2,eax + jmp cap2r ;reclip the remaining line +cap38: ret +cap39: + mov si,cx + shl si,2 + sub si,4 + mov di,0 + mov eax,dword ptr ds:cpolyxy2[si] + mov dword ptr ds:clip_x1,eax + mov eax,dword ptr ds:cpolyxy2[di] + mov dword ptr ds:clip_x2,eax + call cliplinex + ; + mov cx,ds:cpolysides + xor di,di + xor bx,bx + mov edx,80008000h + jmp cbp35 +cbp32: push di + push bx + push cx + push edx + mov si,di + sub si,4 + mov eax,dword ptr ds:cpolyxy2[si] + mov dword ptr ds:clip_x1,eax + mov eax,dword ptr ds:cpolyxy2[di] + mov dword ptr ds:clip_x2,eax + call cliplinex + pop edx + pop cx + pop bx + pop di +cbp35: cmp ax,0 + jnz cbp34 + mov eax,dword ptr ds:clip_x1 + cmp eax,edx + je cbp33 + mov dword ptr ds:cpolyxy[bx],eax + mov edx,eax + add bx,4 +cbp33: mov eax,dword ptr ds:clip_x2 + cmp eax,edx + je cbp34 + mov dword ptr ds:cpolyxy[bx],eax + mov edx,eax + add bx,4 +cbp34: add di,4 + loop cbp32 + ; + mov cx,bx + shr cx,2 + cmp dword ptr ds:cpolyxy[0],edx + jne cbp31 + dec cx +cbp31: mov ds:cpolysides,cx + + ret +clipanypoly ENDP + +clipcheck MACRO reg,min,max,flagreg,flagmin,flagmax + local l1,l2 + cmp reg,min + jge l1 + or flagreg,flagmin +l1: cmp reg,max + jle l2 + or flagreg,flagmax +l2: ENDM +clipmacro MACRO v1,v2,w1,w2,wl + local l1,l2 + push bx + mov bx,wl + mov cx,w2 + sub cx,w1 + jcxz l1 + mov bp,bx + sub bp,w1 + mov ax,v2 + sub ax,v1 + imul bp + idiv cx + add ax,v1 + mov v1,ax + mov word ptr w1,bx + jmp l2 +l1: mov ax,v1 + mov word ptr w1,bx +l2: pop bx + ENDM +cliplinex PROC NEAR + ;input line cpolyxy[SI]=>cpolyxy[DI] + xor bx,bx + mov ax,ds:clip_x1 + clipcheck ax,cs:wminx,cs:wmaxx,bl,1,2 + mov ax,ds:clip_x2 + clipcheck ax,cs:wminx,cs:wmaxx,bh,1,2 + mov al,bl + and al,bh + jz clpx1 + ret +clpx1: + test bl,1 + jz clpx13 + clipmacro ds:clip_y1,ds:clip_y2,ds:clip_x1,ds:clip_x2,cs:wminx +clpx13: test bl,2 + jz clpx14 + clipmacro ds:clip_y1,ds:clip_y2,ds:clip_x1,ds:clip_x2,cs:wmaxx +clpx14: + test bh,1 + jz clpx23 + clipmacro ds:clip_y2,ds:clip_y1,ds:clip_x2,ds:clip_x1,cs:wminx +clpx23: test bh,2 + jz clpx24 + clipmacro ds:clip_y2,ds:clip_y1,ds:clip_x2,ds:clip_x1,cs:wmaxx +clpx24: + xor ax,ax + ret +cliplinex ENDP +clipliney PROC NEAR + xor bx,bx + mov ax,ds:clip_y1 + clipcheck ax,cs:wminy,cs:wmaxy,bl,4,8 + mov ax,ds:clip_y2 + clipcheck ax,cs:wminy,cs:wmaxy,bh,4,8 + mov al,bl + and al,bh + jz clpy1 + ret +clpy1: + test bl,4 + jz clpy11 + clipmacro ds:clip_x1,ds:clip_x2,ds:clip_y1,ds:clip_y2,cs:wminy +clpy11: test bl,8 + jz clpy12 + clipmacro ds:clip_x1,ds:clip_x2,ds:clip_y1,ds:clip_y2,cs:wmaxy +clpy12: + test bh,4 + jz clpy21 + clipmacro ds:clip_x2,ds:clip_x1,ds:clip_y2,ds:clip_y1,cs:wminy +clpy21: test bh,8 + jz clpy22 + clipmacro ds:clip_x2,ds:clip_x1,ds:clip_y2,ds:clip_y1,cs:wmaxy +clpy22: + xor ax,ax + ret +clipliney ENDP + +;***** POLYGON DRAW + +poly1 PROC NEAR + mov dx,cs:cpolyxy[0] + mov bx,cs:cpolyxy[2] + call VIDPSET + ret +poly1 ENDP + +poly2 PROC NEAR + mov cx,cs:cpolyxy[0] + mov ax,cs:cpolyxy[2] + mov dx,cs:cpolyxy[4] + mov bx,cs:cpolyxy[6] + call VIDLINE + ret +poly2 ENDP + +;*** POLYF / POLYFT + +ALIGN 4 +feax dd 0 +fedx dd 0 + +fleftaddl dd 0 ;+0 +fleftaddh dw 0 ;+4 +fleftrown dw 0 ;+6 +fleftzb dd 0 ;+8 +fleftze dd 0 ;+12 +flefttx0 dw 0 ;+16 +fleftty0 dw 0 ;+18 +flefttxa dw 0 ;+20 +flefttya dw 0 ;+22 +fleftcnt dw 0 ;+24 +fleftcnta dw 0 ;+26 +fleftd3a dw 0 ;+28 + +frightaddl dd 0 ;+0 +frightaddh dw 0 ;+4 +frightrown dw 0 ;+6 +frightzb dd 0 ;+8 +frightze dd 0 ;+12 +frighttx0 dw 0 ;+16 +frightty0 dw 0 ;+18 +frighttxa dw 0 ;+20 +frighttya dw 0 ;+22 +frightcnt dw 0 ;+24 +frightcnta dw 0 ;+26 +frightd3a dw 0 ;+28 + +finfolen dw 0 +finfo0 dw 0 +finfo1 dw 0 +fwmaxy1 dw 0 + +finfo dw 32 dup(0,0,0,0,0,0,0,0) + ;x,y,zlo,zhi,tx,ty,0,0 + +polyf PROC NEAR ;ONLY CONVEX POLYGONS - FAST? + ;input: polysides/polyxy + ;requirements: + ;es=vram + ;cpolysides>=4 (not checked) + ;color=set + ;**COPY/SEEK UPPERMOST** + LOADGS + mov ax,cs + mov ds,ax + mov cx,ds:polysides + mov ax,cx + shl ax,4 ;*16 + mov ds:finfolen,ax + add ax,OFFSET finfo + mov ds:finfo1,ax + mov ax,gs:wmaxy + inc ax + mov ds:fwmaxy1,ax + mov edx,077770000h + xor bx,bx + mov si,OFFSET polyxy + mov di,OFFSET finfo + mov ds:finfo0,di +pfn1: mov eax,dword ptr ds:[si] + cmp eax,edx + jg pfn2 + mov edx,eax + mov bx,di +pfn2: mov dword ptr ds:[di],eax + add si,4 + add di,16 + loop pfn1 + ;[bx]=uppermost + ;**SETUP REGS** + mov ds:fleftrown,-32767 + mov ds:frightrown,-32767 + mov si,bx + mov di,bx + mov bp,ds:[si+2] + mov bx,OFFSET borders + mov ax,bp + cmp ax,gs:wminy + jge pfn35 + mov ax,gs:wminy +pfn35: mov gs:[bx],ax + add bx,2 + mov cx,16 ;max tmp count to avoid hanging on illegal polygons + ;eax=left + ;bx=pointer to borders[] + ;cx=count + ;edx=right + ;si=left + ;di=right + ;bp=y +pfn63: push cx + push bx + + cmp bp,ds:fleftrown + jl pfn42 + push edx + push di + mov di,si + sub di,16 + cmp di,ds:finfo0 + jae pfn41 + add di,ds:finfolen +pfn41: mov bx,OFFSET fleftaddl + call polyfcalc + add cx,bp + mov ds:fleftrown,cx + movzx eax,word ptr ds:[si+0] + mov ebx,ds:fleftaddl + mov dx,ds:fleftaddh + sar dx,1 + rcr ebx,1 + xor bx,bx + sub eax,ebx + sbb ax,dx + mov si,di + pop di + pop edx +pfn42: + cmp bp,ds:frightrown + jl pfn52 + push eax + push si + mov si,di + add di,16 + cmp di,ds:finfo1 + jb pfn51 + sub di,ds:finfolen +pfn51: mov bx,OFFSET frightaddl + call polyfcalc + add cx,bp + mov ds:frightrown,cx + movzx edx,word ptr ds:[si+0] + mov ebx,ds:frightaddl + mov ax,ds:frightaddh + sar ax,1 + rcr ebx,1 + xor bx,bx + sub edx,ebx + sbb dx,ax + pop si + pop eax + +pfn52: mov bx,ds:fleftrown + mov cx,ds:frightrown + cmp cx,bx + jl pfn61 + mov cx,bx +pfn61: sub cx,bp + pop bx + cmp cx,0 + jg pfn71 +pfn6: pop cx + cmp bp,ds:fwmaxy1 + jg pfn64 + cmp si,di + je pfn64 + dec cx + jz pfn64 + jmp pfn63 +pfn64: mov word ptr gs:[bx],-32767 + mov si,OFFSET borders + LOADDS +; call newgroup + call VIDHGROUP + ret +pfn65: ;above screen + ;entering screen, cut. + add bp,cx + push bp + push cx + cmp bp,gs:wminy + jl pfn66 + sub bp,cx + mov cx,gs:wminy + sub cx,bp +pfn66: ; + movsx ecx,cx + ror eax,16 + mov ds:feax,eax + ror edx,16 + mov ds:fedx,edx + ; + mov ax,ds:fleftaddh + shl eax,16 + mov ax,word ptr ds:fleftaddl[2] + imul ecx + add ds:feax,eax + ; + mov ax,ds:frightaddh + shl eax,16 + mov ax,word ptr ds:frightaddl[2] + imul ecx + add ds:fedx,eax + ; + mov eax,ds:feax + ror eax,16 + mov edx,ds:fedx + ror edx,16 + mov bp,cx + pop cx + sub cx,bp + pop bp + cmp cx,0 + jne pfn6b + jmp pfn6 +pfn6b: mov bp,gs:wminy +pfn71: ;process segment + cmp bp,gs:wminy + jl pfn65 ;above screen still + add bp,cx + ;clip max to maxy + cmp bp,ds:fwmaxy1 + jle pfn72 + sub bp,cx + mov cx,ds:fwmaxy1 + sub cx,bp + mov bp,ds:fwmaxy1 +pfn72: cmp cx,0 + jle pfn6 + push si + push di + push bp + ror ebx,16 + neg cx + mov bx,cx + ror ebx,16 + mov esi,ds:fleftaddl + mov edi,ds:frightaddl + mov bp,ds:fleftaddh + mov cx,ds:frightaddh +pfn7: add eax,esi + adc ax,bp + add edx,edi + adc dx,cx + mov gs:[bx],ax + mov gs:[bx+2],dx + add ebx,10004h + jnc pfn7 + pop bp + pop di + pop si + jmp pfn6 +polyfcalc: ;**** subroutine **** + ;calc slope for line [SI]->[DI] to [BX], returns CX=len + mov cx,ds:[di+2] + sub cx,bp ;ds:[si+2] + jle pfc1 + mov ax,ds:[di+0] + sub ax,ds:[si+0] + jl pfc2 + xor dx,dx + div cx + mov ds:[bx+4],ax + xor ax,ax + div cx + mov ds:[bx+2],ax + ;dec cx + ret +pfc1: xor cx,cx + ret +pfc2: neg ax + xor dx,dx + div cx + push ax + xor ax,ax + div cx + pop dx + neg ax + adc dx,0 + neg dx + mov ds:[bx+4],dx + mov ds:[bx+2],ax + ;dec cx + ret +polyf ENDP + +IFDEF 0 +;fleftaddl dd 0 ;+0 +;fleftaddh dw 0 ;+4 +;fleftrown dw 0 ;+6 +;fleftzb dd 0 ;+8 +;fleftze dd 0 ;+12 +;flefttx0 dw 0 ;+16 +;fleftty0 dw 0 ;+18 +;flefttxa dw 0 ;+20 +;flefttya dw 0 ;+22 +;fleftcnt dw 0 ;+24 +;fleftcnta dw 0 ;+26 + +polyft PROC NEAR ;ONLY CONVEX POLYGONS - FAST? + ;input: polysides/polyxy + ;requirements: + ;es=vram + ;ds=cs + ;cpolysides>=4 (not checked) + ;color=set + ;**COPY/SEEK UPPERMOST** + LOADGS ;GS points to data seg! + mov ax,cs + mov ds,ax + mov fs,cs:depthseg + mov cx,cs:polysides + mov ax,cx + shl ax,4 ;*16 + mov ds:finfolen,ax + add ax,OFFSET finfo + mov ds:finfo1,ax + mov ax,gs:wmaxy + inc ax + mov ds:fwmaxy1,ax + mov edx,077770000h + xor bx,bx + mov si,OFFSET polyxy + mov di,OFFSET finfo + mov ds:finfo0,di +pftn1: mov eax,dword ptr ds:[si] + cmp eax,edx + jg pftn2 + mov edx,eax + mov bx,di +pftn2: mov dword ptr ds:[di],eax + mov eax,ds:[si+POLYZ] + mov ds:[di+4],eax + mov eax,ds:[si+POLYTXY] + mov ds:[di+8],eax + add si,4 + add di,16 + loop pftn1 + ;[bx]=uppermost + ;**SETUP REGS** + mov ds:fleftrown,-32767 + mov ds:frightrown,-32767 + mov si,bx + mov di,bx + mov bp,ds:[si+2] + mov bx,OFFSET borders + mov ax,bp + cmp ax,gs:wminy + jge pftn35 + mov ax,gs:wminy +pftn35: mov gs:[bx],ax + add bx,2 + mov cx,16 ;max tmp count to avoid hanging on illegal polygons + ;eax=left + ;bx=pointer to borders[] + ;cx=count + ;edx=right + ;si=left + ;di=right + ;bp=y +pftn63: push cx + push bx + + cmp bp,ds:fleftrown + jl pftn42 + push edx + push di + mov di,si + sub di,16 + cmp di,ds:finfo0 + jae pftn41 + add di,ds:finfolen +pftn41: mov bx,OFFSET fleftaddl + call polyftcalc + add cx,bp + mov ds:fleftrown,cx + movzx eax,word ptr ds:[si+0] + mov ebx,ds:fleftaddl + mov dx,ds:fleftaddh + sar dx,1 + rcr ebx,1 + xor bx,bx + sub eax,ebx + sbb ax,dx + mov si,di + pop di + pop edx +pftn42: + cmp bp,ds:frightrown + jl pftn52 + push eax + push si + mov si,di + add di,16 + cmp di,ds:finfo1 + jb pftn51 + sub di,ds:finfolen +pftn51: mov bx,OFFSET frightaddl + call polyftcalc + add cx,bp + mov ds:frightrown,cx + movzx edx,word ptr ds:[si+0] + mov ebx,ds:frightaddl + mov ax,ds:frightaddh + sar ax,1 + rcr ebx,1 + xor bx,bx + sub edx,ebx + sbb dx,ax + pop si + pop eax + +pftn52: mov bx,ds:fleftrown + mov cx,ds:frightrown + cmp cx,bx + jl pftn61 + mov cx,bx +pftn61: sub cx,bp + pop bx + cmp cx,0 + jg pftn71 +pftn6: pop cx + cmp bp,ds:fwmaxy1 + jg pftn64 + cmp si,di + je pftn64 + dec cx + jz pftn64 + jmp pftn63 +pftn64: mov word ptr gs:[bx],-32767 + mov si,OFFSET borders ;gs:si + mov fs,cs:_texture[2] + LOADDS +; call newgroup + call VIDHGROUP + ret +pftn65: ;above screen + ;entering screen, cut. + add bp,cx + push bp + push cx + cmp bp,gs:wminy + jl pftn66 + sub bp,cx + mov cx,gs:wminy + sub cx,bp +pftn66: ; + movsx ecx,cx + ror eax,16 + mov ds:feax,eax + ror edx,16 + mov ds:fedx,edx + ; + mov ax,ds:fleftaddh + shl eax,16 + mov ax,word ptr ds:fleftaddl[2] + imul ecx + add ds:feax,eax + mov ax,word ptr ds:fleftcnta + imul cx + add ds:fleftcnt,ax + ; + mov ax,ds:frightaddh + shl eax,16 + mov ax,word ptr ds:frightaddl[2] + imul ecx + add ds:fedx,eax + mov ax,word ptr ds:frightcnta + imul cx + add ds:frightcnt,ax + ; + mov eax,ds:feax + ror eax,16 + mov edx,ds:fedx + ror edx,16 + mov bp,cx + pop cx + sub cx,bp + pop bp + cmp cx,0 + jne pftn6b + jmp pftn6 +pftn6b: mov bp,gs:wminy +pftn71: ;process segment + cmp bp,gs:wminy + jl pftn65 ;above screen still + add bp,cx + ;clip max to maxy + cmp bp,ds:fwmaxy1 + jle pftn72 + sub bp,cx + mov cx,ds:fwmaxy1 + sub cx,bp + mov bp,ds:fwmaxy1 +pftn72: cmp cx,0 + jle pftn6 + push si + push di + push bp + ror ebx,16 + neg cx + mov bx,cx + ror ebx,16 + mov esi,ds:fleftaddl + mov edi,ds:frightaddl + ;eax/edx=x position + ;esi/edi=x adder high + ;bp/cx=xadder low + ;ebx=borders pointer / end counter + ;mov cx,gs + +calccx MACRO bb ;bp=>cx + ;linear + mov bp,word ptr ds:bb[24] + shr bp,5 + shl bp,1 + add bp,word ptr ds:bb[28] + mov bp,fs:[bp] + mov eax,dword ptr ds:bb[20] + imul bp + shld dx,ax,7 + add dx,word ptr ds:bb[16] + mov cl,dl + shr eax,16 + imul bp + shld dx,ax,7 + add dx,word ptr ds:bb[18] + mov ch,dl + mov bp,word ptr ds:bb[26] + add word ptr ds:bb[24],bp + ENDM + +pftn7: add eax,esi + adc ax,ds:fleftaddh + add edx,edi + adc dx,ds:frightaddh + mov gs:[bx],ax + mov gs:[bx+2],dx + push dx + push eax + calccx frightaddl + shl ecx,16 + calccx fleftaddl + mov gs:[bx+4],ecx + pop eax + pop dx + add ebx,10008h + jnc pftn7 + pop bp + pop di + pop si + jmp pftn6 +ALIGN 4 +zzzcxa dw 0 + +;fleftaddl dd 0 ;+0 +;fleftaddh dw 0 ;+4 +;fleftrown dw 0 ;+6 +;fleftzb dd 0 ;+8 +;fleftze dd 0 ;+12 +;flefttx0 dw 0 ;+16 +;fleftty0 dw 0 ;+18 +;flefttxa dw 0 ;+20 +;flefttya dw 0 ;+22 +;fleftcnt dw 0 ;+24 +;fleftcnta dw 0 ;+26 + +polyftcalc: ;**** subroutine **** + ;calc slope for line [SI]->[DI] to [BX], returns CX=len + ;calc texture + mov eax,ds:[si+4] + mov ds:[bx+8],eax + mov eax,ds:[di+4] + mov ds:[bx+12],eax + mov eax,ds:[si+8] + mov ds:[bx+16],eax + neg ax + add ax,ds:[di+8] + mov ds:[bx+20],ax + shr eax,16 + neg ax + add ax,ds:[di+10] + mov ds:[bx+22],ax + ;calc slope + ;bx+2=addl + ;bx+4=addh + mov cx,ds:[di+2] + sub cx,bp ;ds:[si+2] + jle pftc1 + ;calc texture len + mov ax,16384 + xor dx,dx + mov ds:[bx+24],dx + div cx + mov ds:[bx+26],ax + ;find suitable texture function + push bp + mov eax,256 + imul dword ptr ds:[si+4] + idiv dword ptr ds:[di+4] + mov bp,-4 +pftc3: add bp,4 + cmp fs:[bp],ax + ja pftc3 + mov ax,fs:[bp+2] + mov ds:[bx+28],ax + pop bp + ; + mov ax,ds:[di+0] + sub ax,ds:[si+0] + jl pftc2 + xor dx,dx + div cx + mov ds:[bx+4],ax + xor ax,ax + div cx + mov ds:[bx+2],ax + ;dec cx + ret +pftc1: xor cx,cx + ret +pftc2: neg ax + xor dx,dx + div cx + push ax + xor ax,ax + div cx + pop dx + neg ax + adc dx,0 + neg dx + mov ds:[bx+4],dx + mov ds:[bx+2],ax + ret +polyft ENDP +ENDIF + +include new.asm diff --git a/GLENZ/VIDTWE.ASM b/GLENZ/VIDTWE.ASM new file mode 100644 index 0000000..78ab89a --- /dev/null +++ b/GLENZ/VIDTWE.ASM @@ -0,0 +1,493 @@ +;256 color tweaked routines + +;routines ending in "1" are vector drawers: +; DS:SI preserved +; OUT 3C4,02h required +; DS=CS & ES=vram required + +ALIGN 4 +leftside db 1111b,1110b,1100b,1000b +rightside db 0001b,0011b,0111b,1111b +middledot db 0001b,0010b,0100b,1000b + +ALIGN 4 +twpset PROC FAR + ;requires: OUT 3C4,2 + ;DS:SI preserved, CX preserved! + shl bx,1 + mov di,ds:rows[bx] + mov bx,3 + and bx,dx + sar dx,2 + add di,dx + mov al,cs:middledot[bx] + mov dx,3c5h + out dx,al + mov al,ds:color1 + mov es:[di],al + ret +twpset ENDP + +twhline PROC FAR + ;requires: OUT 3C4,2 + ;DS:SI must be preserved! + ;(ax,bx)-(dx,bx) + cmp ax,dx + jl hli1 + xchg ax,dx +hli1: + cmp ax,0 + jnl hli2 + cmp dx,0 + jl hli0 + xor ax,ax +hli2: cmp dx,ds:wmaxx + jng hli21 + cmp ax,ds:wmaxx + jg hli0 + mov dx,ds:wmaxx + +hli21: mov di,ax + sar di,2 + mov cx,dx + sar cx,2 + sub cx,di + shl bx,1 + add di,ds:rows[bx] + + mov bp,3 + and bp,ax + mov bh,cs:leftside[bp] + mov bp,3 + and bp,dx + mov bl,cs:rightside[bp] + mov dx,3c5h + + ;(di..si,bx) + cmp cx,0 + je hli30 + ;left side + mov al,bh + out dx,al + mov al,ds:color1 + stosb + dec cx + mov ah,al + ;middle + jcxz hli33 + mov al,0fh + out dx,al + mov al,ah + test di,1 + jz hli32 + stosb + dec cx +hli32: shr cx,1 + rep stosw + adc cx,cx + rep stosb +hli33: ;right side + mov al,bl + out dx,al + mov al,ah + mov es:[di],al +hli0: ret +hli30: ;end and beg in same byte + mov al,bl + and al,bh + out dx,al + mov al,ds:color1 + mov es:[di],al + ret +twhline ENDP + +ALIGN 2 +;line variables +xdif dw 0 +ydif dw 0 +xabs dw 0 +yabs dw 0 +xsgn dw 0 +ysgn dw 0 +xtmp dw 0 +ytmp dw 0 + +tmplnx dw 0 +tmplny dw 0 + +twpsetc PROC NEAR + ;(dx,bx)=(color), es must be 0a000h + ;uses nothing + push ax + push bx + push cx + push dx + mov ch,al + mov cl,dl + shl bx,1 + mov bx,ds:rows[bx] + sar dx,1 + sar dx,1 + add bx,dx + and cl,3 + mov ax,102h + mov dx,03c4h + shl ah,cl + out dx,ax + mov al,ds:color1 + mov es:[bx],al +psc0: pop dx + pop cx + pop bx + pop ax + ret +twpsetc ENDP + +twlineto PROC FAR + ;draw line from (cx,ax) to (dx,bx) with color (color) + ;requires es=vram, changes: ax + push cx + push si + push di + push bp + push dx + push bx + + mov cs:tmplnx,cx + mov cs:tmplny,ax + + ;set insider point as begin of line + cmp dx,cs:wmaxx + ja lt4 + cmp bx,cs:wmaxy + ja lt4 + jmp lt5 ;dx,bx is inside, no changes +lt4: ;dx,bx outside, swap + xchg bx,cs:tmplny + xchg dx,cs:tmplnx + ;check with new bx,dx + cmp dx,wmaxx + ja lt6 + cmp bx,wmaxy + ja lt6 + jmp lt5 ;dx,bx is inside + +lt6: ;both ends outside! Cut 'em here, not ready yet + +lt5: mov cs:xtmp,dx + mov cs:ytmp,bx + ;calc differencies xdif,ydif (+-) & abs difs, xabs,yabs (+) + ;and signs xsgn,ysgn (-1/0/1) + xor cx,cx + mov ax,cs:tmplnx + sub ax,dx + mov cs:xdif,ax + or ax,ax + je lt1 + inc cx + test ax,32768 + jz lt1 + neg ax + dec cx + dec cx +lt1: mov cs:xabs,ax + mov cs:xsgn,cx + + xor cx,cx + mov ax,cs:tmplny + sub ax,bx + mov cs:ydif,ax + or ax,ax + je lt2 + inc cx + test ax,32768 + jz lt2 + neg ax + dec cx + dec cx +lt2: mov cs:yabs,ax + mov cs:ysgn,cx + + ;which is bigger? + cmp ax,cs:xabs + ja lt3 + + ;xbigger + + ;calc addl/h (si,di) + jne lt9 + ;1/1 addition, 45 degree curve + cmp ax,0 + jne lt15 + mov dx,cs:tmplnx + mov bx,cs:tmplny + call twpsetc + jmp lt10 +lt15: mov di,cs:ysgn + mov si,65535 + jmp lt10 +lt9: mov dx,ax ;dx=yabs + xor ax,ax + div cs:xabs ;ax=lowadd + mov si,ax + mov di,cs:ysgn + +lt10: mov ax,32767 + mov bp,cs:xsgn + mov cx,cs:xabs + inc cx + mov dx,cs:xtmp + mov bx,cs:ytmp +lt7: call twpsetc + add dx,bp ;xsgn + add ax,si ;yaddl + jnc lt8 + add bx,di ;ysgn +lt8: loop lt7 + + jmp lt0 + + +lt3: ;ybigger + + mov dx,cs:xabs + xor ax,ax + div cs:yabs ;ax=lowadd + mov si,ax + mov di,cs:xsgn + +lt12: mov ax,32767 + mov bp,cs:ysgn + mov cx,cs:yabs + inc cx + mov dx,cs:xtmp + mov bx,cs:ytmp +lt13: call twpsetc + add bx,bp ;ysgn + add ax,si ;xaddl + jnc lt14 + add dx,di ;xsgn +lt14: loop lt13 + +lt0: pop bx + pop dx + mov cs:tmplnx,dx + mov cs:tmplny,bx + pop bp + pop di + pop si + pop cx + ret +twlineto ENDP + +twhlinegroup PROC FAR + ;requires: OUT 3C4,2 + mov dx,3c4h + mov al,2 + out dx,al + + mov bx,gs:[si] + add si,2 + dec bx + push bx + +hlg92: pop bx + inc bx + push bx + mov ax,gs:[si] + add si,2 + cmp ax,-32767 + jne hlg91 + pop bx + ret +hlg91: mov dx,ax + mov ax,gs:[si] + add si,2 + + cmp ax,dx + jl hlg1 + xchg ax,dx +hlg1: + cmp ax,ds:wminx + jnl hlg2 + cmp dx,ds:wminx + jl hlg0 + mov ax,ds:wminx +hlg2: cmp dx,ds:wmaxx + jng hlg21 + cmp ax,ds:wmaxx + jg hlg0 + mov dx,ds:wmaxx + +hlg21: mov di,ax + sar di,2 + mov cx,dx + sar cx,2 + sub cx,di + shl bx,1 + add di,ds:rows[bx] + + mov bp,3 + and bp,ax + mov bh,cs:leftside[bp] + mov bp,3 + and bp,dx + mov bl,cs:rightside[bp] + mov dx,3c5h + + ;(di..si,bx) + cmp cx,0 + je hlg30 + ;left side + mov al,bh + out dx,al + mov al,ds:color1 + stosb + dec cx + mov ah,al + ;middle + jcxz hlg33 + mov al,0fh + out dx,al + mov al,ah + test di,1 + jz hlg32 + stosb + dec cx +hlg32: shr cx,1 + rep stosw + adc cx,cx + rep stosb +hlg33: ;right side + mov al,bl + out dx,al + mov al,ah + mov es:[di],al +hlg0: jmp hlg92 +hlg30: ;end and beg in same byte + mov al,bl + and al,bh + out dx,al + mov al,ds:color1 + mov es:[di],al + jmp hlg92 +twhlinegroup ENDP + +ALIGN 4 +tmiddle LABEL BYTE + db 00010001b + db 00100010b + db 01000100b + db 10001000b +tmpttt db 0 +twthlinegroup PROC NEAR + ;requires: OUT 3C4,2 + mov dx,3c4h + mov al,2 + out dx,al + + mov bx,gs:[si] + add si,2 + dec bx + jmp thlg93 +thlg92: pop bx + add si,8 +thlg93: inc bx + push bx + mov dx,gs:[si] ;left + cmp dx,-32767 + jne thlg91 + pop bx + ret +thlg91: mov ax,gs:[si+2] ;right + + cmp ax,dx + jl thlg1 + xchg ax,dx + mov cx,gs:[si+4] + xchg cx,gs:[si+6] + mov gs:[si+4],cx +thlg1: + cmp ax,ds:wminx + jnl thlg2 + cmp dx,ds:wminx + jl thlg92 + mov ax,ds:wminx +thlg2: cmp dx,ds:wmaxx + jng thlg21 + cmp ax,ds:wmaxx + jg thlg92 + mov dx,ds:wmaxx + +thlg21: mov cx,dx + sub cx,ax + jcxz thlg92 + mov di,ax + shr di,2 + shl bx,1 + add di,ds:rows[bx] + + mov bx,ax + and bx,3 + mov bp,cx ;count + mov al,ds:tmiddle[bx] + mov cs:tmpttt,al + + mov ah,gs:[si+4] ;endx + xor al,al + sub ah,gs:[si+6] ;startx + cwd + idiv bp + rol edi,16 + mov cl,ah + mov ah,al + xor al,al + mov di,ax ;xadd + rol edi,16 + + mov ah,gs:[si+5] ;endy + xor al,al + sub ah,gs:[si+7] ;starty + cwd + idiv bp + + mov dh,al ;yadd + xor dl,dl + shl edx,16 + mov dh,ah + mov dl,cl + cmp dl,0 + jge thlg31 + dec dh +thlg31: + + movzx ebx,word ptr gs:[si+6] ;startxy/zero ylow + xor ecx,ecx ;zero xlow + + ;....Exx..H....L.... + ;ax - - + ;bx ylow y x + ;cx xlow - tmp + ;dx yadd yah xah + ;si - - - + ;di xadd distbase + ;bp - - - <=tmp reserved for count + mov al,cs:tmpttt +thlg82: ; + add ecx,edi + mov cl,fs:[bx] + adc ebx,edx + adc bh,0 + ; + push dx + mov dx,3c5h + out dx,al + mov es:[di],cl + rol al,1 + adc di,0 + pop dx + ; + dec bp + jnz thlg82 +thlg0: jmp thlg92 +twthlinegroup ENDP diff --git a/GLENZ/ZOOM.ASM b/GLENZ/ZOOM.ASM new file mode 100644 index 0000000..cb16b59 --- /dev/null +++ b/GLENZ/ZOOM.ASM @@ -0,0 +1,33 @@ +text__zoom SEGMENT para public 'CODE2' + ASSUME cs:text__zoom +LOCALS +.386 + +PUBLIC _zoom +_zoom PROC FAR + push bp + mov bp,sp + push si + push di + push ds + + les di,[bp+6] + lds si,[bp+10] + mov ax,[bp+14] + call zoom + + pop ds + pop di + pop si + pop bp + ret +_zoom ENDP + +include zoomloop.inc + +PUBLIC _sin1024 +include sin1024.inc + +text__zoom ENDS +END + diff --git a/GLENZ/ZOOM.OBJ b/GLENZ/ZOOM.OBJ new file mode 100644 index 0000000..e1619d4 Binary files /dev/null and b/GLENZ/ZOOM.OBJ differ diff --git a/GLENZ/ZOOMER.C b/GLENZ/ZOOMER.C new file mode 100644 index 0000000..3c50db2 --- /dev/null +++ b/GLENZ/ZOOMER.C @@ -0,0 +1,141 @@ +#include +#include +#include +#include +#include "..\dis\dis.h" + +static char *vram=(char *)0xa0000000L; + +static char *bg; + +extern void zoom(char *to,char *from,int factor); + +extern int sin1024[]; + +static char pal1[768]; +static char pal2[768]; + +void zoomer2(char *pic) +{ + int a,b,c,y; + char *v; + int frame=0; + int zly,zy,zya; + int zly2,zy2; + + _asm + { + mov dx,3c4h + mov ax,0f02h + out dx,ax + } + outp(0x3c7,0); + for(a=0;a<768;a++) pal1[a]=inp(0x3c9); + + zy=0; zya=0; zly=0; + zy2=0; zly2=0; + frame=0; + while(!kbhit()) + { + if(zy==260) break; + zly=zy; + zya++; + zy+=zya/4; + if(zy>260) zy=260; + v=vram+zly*80; + for(y=zly;y<=zy;y++) + { + memset(v,255,80); + v+=80; + } + zly2=zy2; + zy2=125*zy/260; + v=vram+(399-zy2)*80; + for(y=zly2;y<=zy2;y++) + { + memset(v,255,80); + v+=80; + } + c=frame; + if(c>32) c=32; + b=32-c; + for(a=0;a<128*3;a++) + { + pal2[a]=(pal1[a]*b+30*c)>>5; + } + frame++; + dis_waitb(); + setpalarea(pal2,0,128); + } + v=vram+(194)*80; + outp(0x3c8,0); + outp(0x3c9,0); + outp(0x3c9,0); + outp(0x3c9,0); + v=vram+(0)*80; + for(y=0;y<=399;y++) + { + if(y<=274 || y>=260) memset(v,0,80); + v+=80; + } +} + +void zoomer1(char *pic) +{ + int dist=320,q; + int y1,y2,z1,z2,yd; + int y,z,f=0,frame=0; + int rot; + bg=pic; + for(y=199;y>=0;y--) + { + memmove(bg+326*y,bg+320*y,320); + memset(bg+326*y+320,0,4); + } + for(q=0;q<70;q++) dis_waitb(); + for(q=0;q<320;q++) + { + bg[200*326+q]=7; + } + while(!kbhit() && frame<=128) + { + q=(int)((long)frame*(long)frame/128L)*2; + dist=320-(320-245)*frame/128; + rot=768-q; + y1=102+sin1024[rot&1023]*25/64; + z1=400+sin1024[(rot+256)&1023]*25/64; + y2=102+sin1024[(rot+512)&1023]*25/64; + z2=400+sin1024[(rot+768)&1023]*25/64; + // convert z to scale + z1=(int)((long)dist*400L/(long)z1); + z2=(int)((long)dist*400L/(long)z2); + if(y1=0 && y<=199) + { + memset(vram+y*320,0,320); + } + for(y=0;y=0) zoom(vram+(y1)*320,bg+200*326,z1); + y1++; + } + for(y=0;y=0 && y<=199) memset(vram+y*320,0,320); + } + } + if(f<35) f++; + frame+=dis_waitb(); + } +} + diff --git a/GLENZ/ZOOMER.EXE b/GLENZ/ZOOMER.EXE new file mode 100644 index 0000000..58019ea Binary files /dev/null and b/GLENZ/ZOOMER.EXE differ diff --git a/GLENZ/ZOOMER.OBJ b/GLENZ/ZOOMER.OBJ new file mode 100644 index 0000000..2eea872 Binary files /dev/null and b/GLENZ/ZOOMER.OBJ differ diff --git a/GLENZ/ZOOMLOOP.INC b/GLENZ/ZOOMLOOP.INC new file mode 100644 index 0000000..f606f32 --- /dev/null +++ b/GLENZ/ZOOMLOOP.INC @@ -0,0 +1,14455 @@ +zoom PROC FAR +;ds:si=source bitmap row start +;es:di=destination pointer +;ax=zoom factor (desired screen width) +cmp ax,340 +jae zoom_ret +xor cx,cx +test ax,4 +jnz @@1 +add di,2 +mov cx,1 +@@1: +mov bx,ax +and bx,not 1 +xor edx,edx +jmp cs:zoomloopt[bx] +zoom_ret: +ret +ALIGN 16 ;following should stay in cache +zoomloopt LABEL WORD +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_160 +dw OFFSET zoom_162 +dw OFFSET zoom_160 +dw OFFSET zoom_162 +dw OFFSET zoom_168 +dw OFFSET zoom_170 +dw OFFSET zoom_168 +dw OFFSET zoom_170 +dw OFFSET zoom_176 +dw OFFSET zoom_178 +dw OFFSET zoom_176 +dw OFFSET zoom_178 +dw OFFSET zoom_184 +dw OFFSET zoom_186 +dw OFFSET zoom_184 +dw OFFSET zoom_186 +dw OFFSET zoom_192 +dw OFFSET zoom_194 +dw OFFSET zoom_192 +dw OFFSET zoom_194 +dw OFFSET zoom_200 +dw OFFSET zoom_202 +dw OFFSET zoom_200 +dw OFFSET zoom_202 +dw OFFSET zoom_208 +dw OFFSET zoom_210 +dw OFFSET zoom_208 +dw OFFSET zoom_210 +dw OFFSET zoom_216 +dw OFFSET zoom_218 +dw OFFSET zoom_216 +dw OFFSET zoom_218 +dw OFFSET zoom_224 +dw OFFSET zoom_226 +dw OFFSET zoom_224 +dw OFFSET zoom_226 +dw OFFSET zoom_232 +dw OFFSET zoom_234 +dw OFFSET zoom_232 +dw OFFSET zoom_234 +dw OFFSET zoom_240 +dw OFFSET zoom_242 +dw OFFSET zoom_240 +dw OFFSET zoom_242 +dw OFFSET zoom_248 +dw OFFSET zoom_250 +dw OFFSET zoom_248 +dw OFFSET zoom_250 +dw OFFSET zoom_256 +dw OFFSET zoom_258 +dw OFFSET zoom_256 +dw OFFSET zoom_258 +dw OFFSET zoom_264 +dw OFFSET zoom_266 +dw OFFSET zoom_264 +dw OFFSET zoom_266 +dw OFFSET zoom_272 +dw OFFSET zoom_274 +dw OFFSET zoom_272 +dw OFFSET zoom_274 +dw OFFSET zoom_280 +dw OFFSET zoom_282 +dw OFFSET zoom_280 +dw OFFSET zoom_282 +dw OFFSET zoom_288 +dw OFFSET zoom_290 +dw OFFSET zoom_288 +dw OFFSET zoom_290 +dw OFFSET zoom_296 +dw OFFSET zoom_298 +dw OFFSET zoom_296 +dw OFFSET zoom_298 +dw OFFSET zoom_304 +dw OFFSET zoom_306 +dw OFFSET zoom_304 +dw OFFSET zoom_306 +dw OFFSET zoom_312 +dw OFFSET zoom_314 +dw OFFSET zoom_312 +dw OFFSET zoom_314 +dw OFFSET zoom_320 +dw OFFSET zoom_322 +dw OFFSET zoom_320 +dw OFFSET zoom_322 +dw OFFSET zoom_328 +dw OFFSET zoom_330 +dw OFFSET zoom_328 +dw OFFSET zoom_330 +dw OFFSET zoom_336 +dw OFFSET zoom_338 +dw OFFSET zoom_336 +zoom_160: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],edx +mov es:[di+40],edx +mov es:[di+44],edx +mov es:[di+48],edx +mov es:[di+52],edx +mov es:[di+56],edx +mov es:[di+60],edx +mov es:[di+64],edx +mov es:[di+68],edx +mov es:[di+72],edx +mov es:[di+76],edx +mov al,ds:[si+0] +mov ah,ds:[si+2] +mov es:[di+80],ax +mov al,ds:[si+4] +mov ah,ds:[si+6] +mov es:[di+82],ax +mov al,ds:[si+8] +mov ah,ds:[si+10] +mov es:[di+84],ax +mov al,ds:[si+12] +mov ah,ds:[si+14] +mov es:[di+86],ax +mov al,ds:[si+16] +mov ah,ds:[si+18] +mov es:[di+88],ax +mov al,ds:[si+20] +mov ah,ds:[si+22] +mov es:[di+90],ax +mov al,ds:[si+24] +mov ah,ds:[si+26] +mov es:[di+92],ax +mov al,ds:[si+28] +mov ah,ds:[si+30] +mov es:[di+94],ax +mov al,ds:[si+32] +mov ah,ds:[si+34] +mov es:[di+96],ax +mov al,ds:[si+36] +mov ah,ds:[si+38] +mov es:[di+98],ax +mov al,ds:[si+40] +mov ah,ds:[si+42] +mov es:[di+100],ax +mov al,ds:[si+44] +mov ah,ds:[si+46] +mov es:[di+102],ax +mov al,ds:[si+48] +mov ah,ds:[si+50] +mov es:[di+104],ax +mov al,ds:[si+52] +mov ah,ds:[si+54] +mov es:[di+106],ax +mov al,ds:[si+56] +mov ah,ds:[si+58] +mov es:[di+108],ax +mov al,ds:[si+60] +mov ah,ds:[si+62] +mov es:[di+110],ax +mov al,ds:[si+64] +mov ah,ds:[si+66] +mov es:[di+112],ax +mov al,ds:[si+68] +mov ah,ds:[si+70] +mov es:[di+114],ax +mov al,ds:[si+72] +mov ah,ds:[si+74] +mov es:[di+116],ax +mov al,ds:[si+76] +mov ah,ds:[si+78] +mov es:[di+118],ax +add si,cx +mov al,ds:[si+80] +mov ah,ds:[si+82] +mov es:[di+120],ax +mov al,ds:[si+84] +mov ah,ds:[si+86] +mov es:[di+122],ax +mov al,ds:[si+88] +mov ah,ds:[si+90] +mov es:[di+124],ax +mov al,ds:[si+92] +mov ah,ds:[si+94] +mov es:[di+126],ax +mov al,ds:[si+96] +mov ah,ds:[si+98] +mov es:[di+128],ax +mov al,ds:[si+100] +mov ah,ds:[si+102] +mov es:[di+130],ax +mov al,ds:[si+104] +mov ah,ds:[si+106] +mov es:[di+132],ax +mov al,ds:[si+108] +mov ah,ds:[si+110] +mov es:[di+134],ax +mov al,ds:[si+112] +mov ah,ds:[si+114] +mov es:[di+136],ax +mov al,ds:[si+116] +mov ah,ds:[si+118] +mov es:[di+138],ax +add si,cx +mov al,ds:[si+120] +mov ah,ds:[si+122] +mov es:[di+140],ax +mov al,ds:[si+124] +mov ah,ds:[si+126] +mov es:[di+142],ax +mov al,ds:[si+128] +mov ah,ds:[si+130] +mov es:[di+144],ax +mov al,ds:[si+132] +mov ah,ds:[si+134] +mov es:[di+146],ax +mov al,ds:[si+136] +mov ah,ds:[si+138] +mov es:[di+148],ax +mov al,ds:[si+140] +mov ah,ds:[si+142] +mov es:[di+150],ax +mov al,ds:[si+144] +mov ah,ds:[si+146] +mov es:[di+152],ax +mov al,ds:[si+148] +mov ah,ds:[si+150] +mov es:[di+154],ax +mov al,ds:[si+152] +mov ah,ds:[si+154] +mov es:[di+156],ax +mov al,ds:[si+156] +mov ah,ds:[si+158] +mov es:[di+158],ax +mov al,ds:[si+160] +mov ah,ds:[si+162] +mov es:[di+160],ax +mov al,ds:[si+164] +mov ah,ds:[si+166] +mov es:[di+162],ax +mov al,ds:[si+168] +mov ah,ds:[si+170] +mov es:[di+164],ax +mov al,ds:[si+172] +mov ah,ds:[si+174] +mov es:[di+166],ax +mov al,ds:[si+176] +mov ah,ds:[si+178] +mov es:[di+168],ax +mov al,ds:[si+180] +mov ah,ds:[si+182] +mov es:[di+170],ax +mov al,ds:[si+184] +mov ah,ds:[si+186] +mov es:[di+172],ax +mov al,ds:[si+188] +mov ah,ds:[si+190] +mov es:[di+174],ax +mov al,ds:[si+192] +mov ah,ds:[si+194] +mov es:[di+176],ax +mov al,ds:[si+196] +mov ah,ds:[si+198] +mov es:[di+178],ax +add si,cx +mov al,ds:[si+200] +mov ah,ds:[si+202] +mov es:[di+180],ax +mov al,ds:[si+204] +mov ah,ds:[si+206] +mov es:[di+182],ax +mov al,ds:[si+208] +mov ah,ds:[si+210] +mov es:[di+184],ax +mov al,ds:[si+212] +mov ah,ds:[si+214] +mov es:[di+186],ax +mov al,ds:[si+216] +mov ah,ds:[si+218] +mov es:[di+188],ax +mov al,ds:[si+220] +mov ah,ds:[si+222] +mov es:[di+190],ax +mov al,ds:[si+224] +mov ah,ds:[si+226] +mov es:[di+192],ax +mov al,ds:[si+228] +mov ah,ds:[si+230] +mov es:[di+194],ax +mov al,ds:[si+232] +mov ah,ds:[si+234] +mov es:[di+196],ax +mov al,ds:[si+236] +mov ah,ds:[si+238] +mov es:[di+198],ax +add si,cx +mov al,ds:[si+240] +mov ah,ds:[si+242] +mov es:[di+200],ax +mov al,ds:[si+244] +mov ah,ds:[si+246] +mov es:[di+202],ax +mov al,ds:[si+248] +mov ah,ds:[si+250] +mov es:[di+204],ax +mov al,ds:[si+252] +mov ah,ds:[si+254] +mov es:[di+206],ax +mov al,ds:[si+256] +mov ah,ds:[si+258] +mov es:[di+208],ax +mov al,ds:[si+260] +mov ah,ds:[si+262] +mov es:[di+210],ax +mov al,ds:[si+264] +mov ah,ds:[si+266] +mov es:[di+212],ax +mov al,ds:[si+268] +mov ah,ds:[si+270] +mov es:[di+214],ax +mov al,ds:[si+272] +mov ah,ds:[si+274] +mov es:[di+216],ax +mov al,ds:[si+276] +mov ah,ds:[si+278] +mov es:[di+218],ax +mov al,ds:[si+280] +mov ah,ds:[si+282] +mov es:[di+220],ax +mov al,ds:[si+284] +mov ah,ds:[si+286] +mov es:[di+222],ax +mov al,ds:[si+288] +mov ah,ds:[si+290] +mov es:[di+224],ax +mov al,ds:[si+292] +mov ah,ds:[si+294] +mov es:[di+226],ax +mov al,ds:[si+296] +mov ah,ds:[si+298] +mov es:[di+228],ax +mov al,ds:[si+300] +mov ah,ds:[si+302] +mov es:[di+230],ax +mov al,ds:[si+304] +mov ah,ds:[si+306] +mov es:[di+232],ax +mov al,ds:[si+308] +mov ah,ds:[si+310] +mov es:[di+234],ax +mov al,ds:[si+312] +mov ah,ds:[si+314] +mov es:[di+236],ax +mov al,ds:[si+316] +mov ah,ds:[si+318] +mov es:[di+238],ax +mov es:[di+240],edx +mov es:[di+244],edx +mov es:[di+248],edx +mov es:[di+252],edx +mov es:[di+256],edx +mov es:[di+260],edx +mov es:[di+264],edx +mov es:[di+268],edx +mov es:[di+272],edx +mov es:[di+276],edx +mov es:[di+280],edx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_162: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],edx +mov es:[di+40],edx +mov es:[di+44],edx +mov es:[di+48],edx +mov es:[di+52],edx +mov es:[di+56],edx +mov es:[di+60],edx +mov es:[di+64],edx +mov es:[di+68],edx +mov es:[di+72],edx +mov es:[di+76],dx +mov al,dl +mov ah,ds:[si+0] +mov es:[di+78],ax +mov al,ds:[si+2] +mov ah,ds:[si+4] +mov es:[di+80],ax +mov al,ds:[si+6] +mov ah,ds:[si+8] +mov es:[di+82],ax +mov al,ds:[si+10] +mov ah,ds:[si+12] +mov es:[di+84],ax +mov al,ds:[si+14] +mov ah,ds:[si+16] +mov es:[di+86],ax +mov al,ds:[si+18] +mov ah,ds:[si+20] +mov es:[di+88],ax +mov al,ds:[si+22] +mov ah,ds:[si+24] +mov es:[di+90],ax +mov al,ds:[si+26] +mov ah,ds:[si+28] +mov es:[di+92],ax +mov al,ds:[si+30] +mov ah,ds:[si+32] +mov es:[di+94],ax +mov al,ds:[si+34] +mov ah,ds:[si+36] +mov es:[di+96],ax +mov al,ds:[si+38] +mov ah,ds:[si+40] +mov es:[di+98],ax +mov al,ds:[si+42] +mov ah,ds:[si+44] +mov es:[di+100],ax +mov al,ds:[si+46] +mov ah,ds:[si+48] +mov es:[di+102],ax +mov al,ds:[si+50] +mov ah,ds:[si+52] +mov es:[di+104],ax +mov al,ds:[si+54] +mov ah,ds:[si+56] +mov es:[di+106],ax +mov al,ds:[si+58] +mov ah,ds:[si+60] +mov es:[di+108],ax +mov al,ds:[si+62] +mov ah,ds:[si+64] +mov es:[di+110],ax +mov al,ds:[si+66] +mov ah,ds:[si+68] +mov es:[di+112],ax +mov al,ds:[si+70] +mov ah,ds:[si+72] +mov es:[di+114],ax +mov al,ds:[si+74] +mov ah,ds:[si+76] +mov es:[di+116],ax +mov al,ds:[si+78] +mov ah,ds:[si+80] +mov es:[di+118],ax +add si,cx +mov al,ds:[si+81] +mov ah,ds:[si+83] +mov es:[di+120],ax +mov al,ds:[si+85] +mov ah,ds:[si+87] +mov es:[di+122],ax +mov al,ds:[si+89] +mov ah,ds:[si+91] +mov es:[di+124],ax +mov al,ds:[si+93] +mov ah,ds:[si+95] +mov es:[di+126],ax +mov al,ds:[si+97] +mov ah,ds:[si+99] +mov es:[di+128],ax +mov al,ds:[si+101] +mov ah,ds:[si+103] +mov es:[di+130],ax +mov al,ds:[si+105] +mov ah,ds:[si+107] +mov es:[di+132],ax +mov al,ds:[si+109] +mov ah,ds:[si+111] +mov es:[di+134],ax +mov al,ds:[si+113] +mov ah,ds:[si+115] +mov es:[di+136],ax +mov al,ds:[si+117] +mov ah,ds:[si+119] +mov es:[di+138],ax +add si,cx +mov al,ds:[si+121] +mov ah,ds:[si+123] +mov es:[di+140],ax +mov al,ds:[si+125] +mov ah,ds:[si+127] +mov es:[di+142],ax +mov al,ds:[si+129] +mov ah,ds:[si+131] +mov es:[di+144],ax +mov al,ds:[si+133] +mov ah,ds:[si+135] +mov es:[di+146],ax +mov al,ds:[si+137] +mov ah,ds:[si+139] +mov es:[di+148],ax +mov al,ds:[si+141] +mov ah,ds:[si+143] +mov es:[di+150],ax +mov al,ds:[si+145] +mov ah,ds:[si+147] +mov es:[di+152],ax +mov al,ds:[si+149] +mov ah,ds:[si+151] +mov es:[di+154],ax +mov al,ds:[si+153] +mov ah,ds:[si+155] +mov es:[di+156],ax +mov al,ds:[si+157] +mov ah,ds:[si+159] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov al,ds:[si+163] +mov ah,ds:[si+165] +mov es:[di+162],ax +mov al,ds:[si+167] +mov ah,ds:[si+169] +mov es:[di+164],ax +mov al,ds:[si+171] +mov ah,ds:[si+173] +mov es:[di+166],ax +mov al,ds:[si+175] +mov ah,ds:[si+177] +mov es:[di+168],ax +mov al,ds:[si+179] +mov ah,ds:[si+181] +mov es:[di+170],ax +mov al,ds:[si+183] +mov ah,ds:[si+185] +mov es:[di+172],ax +mov al,ds:[si+187] +mov ah,ds:[si+189] +mov es:[di+174],ax +mov al,ds:[si+191] +mov ah,ds:[si+193] +mov es:[di+176],ax +mov al,ds:[si+195] +mov ah,ds:[si+197] +mov es:[di+178],ax +add si,cx +mov al,ds:[si+199] +mov ah,ds:[si+201] +mov es:[di+180],ax +mov al,ds:[si+203] +mov ah,ds:[si+205] +mov es:[di+182],ax +mov al,ds:[si+207] +mov ah,ds:[si+209] +mov es:[di+184],ax +mov al,ds:[si+211] +mov ah,ds:[si+213] +mov es:[di+186],ax +mov al,ds:[si+215] +mov ah,ds:[si+217] +mov es:[di+188],ax +mov al,ds:[si+219] +mov ah,ds:[si+221] +mov es:[di+190],ax +mov al,ds:[si+223] +mov ah,ds:[si+225] +mov es:[di+192],ax +mov al,ds:[si+227] +mov ah,ds:[si+229] +mov es:[di+194],ax +mov al,ds:[si+231] +mov ah,ds:[si+233] +mov es:[di+196],ax +mov al,ds:[si+235] +mov ah,ds:[si+237] +mov es:[di+198],ax +add si,cx +mov ax,ds:[si+239] +mov es:[di+200],ax +mov al,ds:[si+242] +mov ah,ds:[si+244] +mov es:[di+202],ax +mov al,ds:[si+246] +mov ah,ds:[si+248] +mov es:[di+204],ax +mov al,ds:[si+250] +mov ah,ds:[si+252] +mov es:[di+206],ax +mov al,ds:[si+254] +mov ah,ds:[si+256] +mov es:[di+208],ax +mov al,ds:[si+258] +mov ah,ds:[si+260] +mov es:[di+210],ax +mov al,ds:[si+262] +mov ah,ds:[si+264] +mov es:[di+212],ax +mov al,ds:[si+266] +mov ah,ds:[si+268] +mov es:[di+214],ax +mov al,ds:[si+270] +mov ah,ds:[si+272] +mov es:[di+216],ax +mov al,ds:[si+274] +mov ah,ds:[si+276] +mov es:[di+218],ax +mov al,ds:[si+278] +mov ah,ds:[si+280] +mov es:[di+220],ax +mov al,ds:[si+282] +mov ah,ds:[si+284] +mov es:[di+222],ax +mov al,ds:[si+286] +mov ah,ds:[si+288] +mov es:[di+224],ax +mov al,ds:[si+290] +mov ah,ds:[si+292] +mov es:[di+226],ax +mov al,ds:[si+294] +mov ah,ds:[si+296] +mov es:[di+228],ax +mov al,ds:[si+298] +mov ah,ds:[si+300] +mov es:[di+230],ax +mov al,ds:[si+302] +mov ah,ds:[si+304] +mov es:[di+232],ax +mov al,ds:[si+306] +mov ah,ds:[si+308] +mov es:[di+234],ax +mov al,ds:[si+310] +mov ah,ds:[si+312] +mov es:[di+236],ax +mov al,ds:[si+314] +mov ah,ds:[si+316] +mov es:[di+238],ax +mov al,ds:[si+318] +mov ah,dl +mov es:[di+240],ax +mov es:[di+242],dx +mov es:[di+244],edx +mov es:[di+248],edx +mov es:[di+252],edx +mov es:[di+256],edx +mov es:[di+260],edx +mov es:[di+264],edx +mov es:[di+268],edx +mov es:[di+272],edx +mov es:[di+276],edx +mov es:[di+280],edx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_168: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],edx +mov es:[di+40],edx +mov es:[di+44],edx +mov es:[di+48],edx +mov es:[di+52],edx +mov es:[di+56],edx +mov es:[di+60],edx +mov es:[di+64],edx +mov es:[di+68],edx +mov es:[di+72],edx +mov al,ds:[si+0] +mov ah,ds:[si+2] +mov es:[di+76],ax +mov al,ds:[si+4] +mov ah,ds:[si+6] +mov es:[di+78],ax +mov al,ds:[si+8] +mov ah,ds:[si+10] +mov es:[di+80],ax +mov al,ds:[si+12] +mov ah,ds:[si+14] +mov es:[di+82],ax +mov al,ds:[si+16] +mov ah,ds:[si+18] +mov es:[di+84],ax +mov ax,ds:[si+20] +mov es:[di+86],ax +mov al,ds:[si+23] +mov ah,ds:[si+25] +mov es:[di+88],ax +mov al,ds:[si+27] +mov ah,ds:[si+29] +mov es:[di+90],ax +mov al,ds:[si+31] +mov ah,ds:[si+33] +mov es:[di+92],ax +mov al,ds:[si+35] +mov ah,ds:[si+37] +mov es:[di+94],ax +mov ax,ds:[si+39] +mov es:[di+96],ax +mov al,ds:[si+42] +mov ah,ds:[si+44] +mov es:[di+98],ax +mov al,ds:[si+46] +mov ah,ds:[si+48] +mov es:[di+100],ax +mov al,ds:[si+50] +mov ah,ds:[si+52] +mov es:[di+102],ax +mov al,ds:[si+54] +mov ah,ds:[si+56] +mov es:[di+104],ax +mov al,ds:[si+58] +mov ah,ds:[si+60] +mov es:[di+106],ax +mov al,ds:[si+61] +mov ah,ds:[si+63] +mov es:[di+108],ax +mov al,ds:[si+65] +mov ah,ds:[si+67] +mov es:[di+110],ax +mov al,ds:[si+69] +mov ah,ds:[si+71] +mov es:[di+112],ax +mov al,ds:[si+73] +mov ah,ds:[si+75] +mov es:[di+114],ax +add si,cx +mov al,ds:[si+77] +mov ah,ds:[si+79] +mov es:[di+116],ax +mov al,ds:[si+80] +mov ah,ds:[si+82] +mov es:[di+118],ax +mov al,ds:[si+84] +mov ah,ds:[si+86] +mov es:[di+120],ax +mov al,ds:[si+88] +mov ah,ds:[si+90] +mov es:[di+122],ax +mov al,ds:[si+92] +mov ah,ds:[si+94] +mov es:[di+124],ax +mov al,ds:[si+96] +mov ah,ds:[si+98] +mov es:[di+126],ax +mov ax,ds:[si+100] +mov es:[di+128],ax +mov al,ds:[si+103] +mov ah,ds:[si+105] +mov es:[di+130],ax +mov al,ds:[si+107] +mov ah,ds:[si+109] +mov es:[di+132],ax +mov al,ds:[si+111] +mov ah,ds:[si+113] +mov es:[di+134],ax +add si,cx +mov al,ds:[si+115] +mov ah,ds:[si+117] +mov es:[di+136],ax +mov ax,ds:[si+119] +mov es:[di+138],ax +mov al,ds:[si+122] +mov ah,ds:[si+124] +mov es:[di+140],ax +mov al,ds:[si+126] +mov ah,ds:[si+128] +mov es:[di+142],ax +mov al,ds:[si+130] +mov ah,ds:[si+132] +mov es:[di+144],ax +mov al,ds:[si+134] +mov ah,ds:[si+136] +mov es:[di+146],ax +mov al,ds:[si+138] +mov ah,ds:[si+140] +mov es:[di+148],ax +mov al,ds:[si+141] +mov ah,ds:[si+143] +mov es:[di+150],ax +mov al,ds:[si+145] +mov ah,ds:[si+147] +mov es:[di+152],ax +mov al,ds:[si+149] +mov ah,ds:[si+151] +mov es:[di+154],ax +mov al,ds:[si+153] +mov ah,ds:[si+155] +mov es:[di+156],ax +mov al,ds:[si+157] +mov ah,ds:[si+159] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov al,ds:[si+163] +mov ah,ds:[si+165] +mov es:[di+162],ax +mov al,ds:[si+167] +mov ah,ds:[si+169] +mov es:[di+164],ax +mov al,ds:[si+171] +mov ah,ds:[si+173] +mov es:[di+166],ax +mov al,ds:[si+175] +mov ah,ds:[si+177] +mov es:[di+168],ax +mov ax,ds:[si+179] +mov es:[di+170],ax +mov al,ds:[si+182] +mov ah,ds:[si+184] +mov es:[di+172],ax +mov al,ds:[si+186] +mov ah,ds:[si+188] +mov es:[di+174],ax +mov al,ds:[si+190] +mov ah,ds:[si+192] +mov es:[di+176],ax +mov al,ds:[si+194] +mov ah,ds:[si+196] +mov es:[di+178],ax +add si,cx +mov al,ds:[si+198] +mov ah,ds:[si+200] +mov es:[di+180],ax +mov al,ds:[si+201] +mov ah,ds:[si+203] +mov es:[di+182],ax +mov al,ds:[si+205] +mov ah,ds:[si+207] +mov es:[di+184],ax +mov al,ds:[si+209] +mov ah,ds:[si+211] +mov es:[di+186],ax +mov al,ds:[si+213] +mov ah,ds:[si+215] +mov es:[di+188],ax +mov al,ds:[si+217] +mov ah,ds:[si+219] +mov es:[di+190],ax +mov al,ds:[si+220] +mov ah,ds:[si+222] +mov es:[di+192],ax +mov al,ds:[si+224] +mov ah,ds:[si+226] +mov es:[di+194],ax +mov al,ds:[si+228] +mov ah,ds:[si+230] +mov es:[di+196],ax +mov al,ds:[si+232] +mov ah,ds:[si+234] +mov es:[di+198],ax +add si,cx +mov al,ds:[si+236] +mov ah,ds:[si+238] +mov es:[di+200],ax +mov ax,ds:[si+240] +mov es:[di+202],ax +mov al,ds:[si+243] +mov ah,ds:[si+245] +mov es:[di+204],ax +mov al,ds:[si+247] +mov ah,ds:[si+249] +mov es:[di+206],ax +mov al,ds:[si+251] +mov ah,ds:[si+253] +mov es:[di+208],ax +mov al,ds:[si+255] +mov ah,ds:[si+257] +mov es:[di+210],ax +mov ax,ds:[si+259] +mov es:[di+212],ax +mov al,ds:[si+262] +mov ah,ds:[si+264] +mov es:[di+214],ax +mov al,ds:[si+266] +mov ah,ds:[si+268] +mov es:[di+216],ax +mov al,ds:[si+270] +mov ah,ds:[si+272] +mov es:[di+218],ax +mov al,ds:[si+274] +mov ah,ds:[si+276] +mov es:[di+220],ax +mov al,ds:[si+278] +mov ah,ds:[si+280] +mov es:[di+222],ax +mov al,ds:[si+281] +mov ah,ds:[si+283] +mov es:[di+224],ax +mov al,ds:[si+285] +mov ah,ds:[si+287] +mov es:[di+226],ax +mov al,ds:[si+289] +mov ah,ds:[si+291] +mov es:[di+228],ax +mov al,ds:[si+293] +mov ah,ds:[si+295] +mov es:[di+230],ax +mov al,ds:[si+297] +mov ah,ds:[si+299] +mov es:[di+232],ax +mov al,ds:[si+300] +mov ah,ds:[si+302] +mov es:[di+234],ax +mov al,ds:[si+304] +mov ah,ds:[si+306] +mov es:[di+236],ax +mov al,ds:[si+308] +mov ah,ds:[si+310] +mov es:[di+238],ax +mov al,ds:[si+312] +mov ah,ds:[si+314] +mov es:[di+240],ax +mov al,ds:[si+316] +mov ah,ds:[si+318] +mov es:[di+242],ax +mov es:[di+244],edx +mov es:[di+248],edx +mov es:[di+252],edx +mov es:[di+256],edx +mov es:[di+260],edx +mov es:[di+264],edx +mov es:[di+268],edx +mov es:[di+272],edx +mov es:[di+276],edx +mov es:[di+280],edx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_170: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],edx +mov es:[di+40],edx +mov es:[di+44],edx +mov es:[di+48],edx +mov es:[di+52],edx +mov es:[di+56],edx +mov es:[di+60],edx +mov es:[di+64],edx +mov es:[di+68],edx +mov es:[di+72],dx +mov al,dl +mov ah,ds:[si+0] +mov es:[di+74],ax +mov al,ds:[si+2] +mov ah,ds:[si+4] +mov es:[di+76],ax +mov al,ds:[si+6] +mov ah,ds:[si+8] +mov es:[di+78],ax +mov al,ds:[si+10] +mov ah,ds:[si+12] +mov es:[di+80],ax +mov al,ds:[si+14] +mov ah,ds:[si+16] +mov es:[di+82],ax +mov al,ds:[si+17] +mov ah,ds:[si+19] +mov es:[di+84],ax +mov al,ds:[si+21] +mov ah,ds:[si+23] +mov es:[di+86],ax +mov al,ds:[si+25] +mov ah,ds:[si+27] +mov es:[di+88],ax +mov al,ds:[si+29] +mov ah,ds:[si+31] +mov es:[di+90],ax +mov al,ds:[si+32] +mov ah,ds:[si+34] +mov es:[di+92],ax +mov al,ds:[si+36] +mov ah,ds:[si+38] +mov es:[di+94],ax +mov al,ds:[si+40] +mov ah,ds:[si+42] +mov es:[di+96],ax +mov al,ds:[si+44] +mov ah,ds:[si+46] +mov es:[di+98],ax +mov ax,ds:[si+48] +mov es:[di+100],ax +mov al,ds:[si+51] +mov ah,ds:[si+53] +mov es:[di+102],ax +mov al,ds:[si+55] +mov ah,ds:[si+57] +mov es:[di+104],ax +mov al,ds:[si+59] +mov ah,ds:[si+61] +mov es:[di+106],ax +mov ax,ds:[si+63] +mov es:[di+108],ax +mov al,ds:[si+66] +mov ah,ds:[si+68] +mov es:[di+110],ax +mov al,ds:[si+70] +mov ah,ds:[si+72] +mov es:[di+112],ax +mov al,ds:[si+74] +mov ah,ds:[si+76] +mov es:[di+114],ax +add si,cx +mov al,ds:[si+78] +mov ah,ds:[si+80] +mov es:[di+116],ax +mov al,ds:[si+81] +mov ah,ds:[si+83] +mov es:[di+118],ax +mov al,ds:[si+85] +mov ah,ds:[si+87] +mov es:[di+120],ax +mov al,ds:[si+89] +mov ah,ds:[si+91] +mov es:[di+122],ax +mov al,ds:[si+93] +mov ah,ds:[si+95] +mov es:[di+124],ax +mov al,ds:[si+96] +mov ah,ds:[si+98] +mov es:[di+126],ax +mov al,ds:[si+100] +mov ah,ds:[si+102] +mov es:[di+128],ax +mov al,ds:[si+104] +mov ah,ds:[si+106] +mov es:[di+130],ax +mov al,ds:[si+108] +mov ah,ds:[si+110] +mov es:[di+132],ax +mov ax,ds:[si+112] +mov es:[di+134],ax +add si,cx +mov al,ds:[si+115] +mov ah,ds:[si+117] +mov es:[di+136],ax +mov al,ds:[si+119] +mov ah,ds:[si+121] +mov es:[di+138],ax +mov al,ds:[si+123] +mov ah,ds:[si+125] +mov es:[di+140],ax +mov ax,ds:[si+127] +mov es:[di+142],ax +mov al,ds:[si+130] +mov ah,ds:[si+132] +mov es:[di+144],ax +mov al,ds:[si+134] +mov ah,ds:[si+136] +mov es:[di+146],ax +mov al,ds:[si+138] +mov ah,ds:[si+140] +mov es:[di+148],ax +mov al,ds:[si+142] +mov ah,ds:[si+144] +mov es:[di+150],ax +mov al,ds:[si+145] +mov ah,ds:[si+147] +mov es:[di+152],ax +mov al,ds:[si+149] +mov ah,ds:[si+151] +mov es:[di+154],ax +mov al,ds:[si+153] +mov ah,ds:[si+155] +mov es:[di+156],ax +mov al,ds:[si+157] +mov ah,ds:[si+159] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov al,ds:[si+163] +mov ah,ds:[si+165] +mov es:[di+162],ax +mov al,ds:[si+167] +mov ah,ds:[si+169] +mov es:[di+164],ax +mov al,ds:[si+171] +mov ah,ds:[si+173] +mov es:[di+166],ax +mov ax,ds:[si+175] +mov es:[di+168],ax +mov al,ds:[si+178] +mov ah,ds:[si+180] +mov es:[di+170],ax +mov al,ds:[si+182] +mov ah,ds:[si+184] +mov es:[di+172],ax +mov al,ds:[si+186] +mov ah,ds:[si+188] +mov es:[di+174],ax +mov al,ds:[si+190] +mov ah,ds:[si+192] +mov es:[di+176],ax +mov al,ds:[si+193] +mov ah,ds:[si+195] +mov es:[di+178],ax +add si,cx +mov al,ds:[si+197] +mov ah,ds:[si+199] +mov es:[di+180],ax +mov al,ds:[si+201] +mov ah,ds:[si+203] +mov es:[di+182],ax +mov al,ds:[si+205] +mov ah,ds:[si+207] +mov es:[di+184],ax +mov al,ds:[si+208] +mov ah,ds:[si+210] +mov es:[di+186],ax +mov al,ds:[si+212] +mov ah,ds:[si+214] +mov es:[di+188],ax +mov al,ds:[si+216] +mov ah,ds:[si+218] +mov es:[di+190],ax +mov al,ds:[si+220] +mov ah,ds:[si+222] +mov es:[di+192],ax +mov ax,ds:[si+224] +mov es:[di+194],ax +mov al,ds:[si+227] +mov ah,ds:[si+229] +mov es:[di+196],ax +mov al,ds:[si+231] +mov ah,ds:[si+233] +mov es:[di+198],ax +add si,cx +mov al,ds:[si+235] +mov ah,ds:[si+237] +mov es:[di+200],ax +mov ax,ds:[si+239] +mov es:[di+202],ax +mov al,ds:[si+242] +mov ah,ds:[si+244] +mov es:[di+204],ax +mov al,ds:[si+246] +mov ah,ds:[si+248] +mov es:[di+206],ax +mov al,ds:[si+250] +mov ah,ds:[si+252] +mov es:[di+208],ax +mov al,ds:[si+254] +mov ah,ds:[si+256] +mov es:[di+210],ax +mov al,ds:[si+257] +mov ah,ds:[si+259] +mov es:[di+212],ax +mov al,ds:[si+261] +mov ah,ds:[si+263] +mov es:[di+214],ax +mov al,ds:[si+265] +mov ah,ds:[si+267] +mov es:[di+216],ax +mov al,ds:[si+269] +mov ah,ds:[si+271] +mov es:[di+218],ax +mov al,ds:[si+272] +mov ah,ds:[si+274] +mov es:[di+220],ax +mov al,ds:[si+276] +mov ah,ds:[si+278] +mov es:[di+222],ax +mov al,ds:[si+280] +mov ah,ds:[si+282] +mov es:[di+224],ax +mov al,ds:[si+284] +mov ah,ds:[si+286] +mov es:[di+226],ax +mov ax,ds:[si+288] +mov es:[di+228],ax +mov al,ds:[si+291] +mov ah,ds:[si+293] +mov es:[di+230],ax +mov al,ds:[si+295] +mov ah,ds:[si+297] +mov es:[di+232],ax +mov al,ds:[si+299] +mov ah,ds:[si+301] +mov es:[di+234],ax +mov ax,ds:[si+303] +mov es:[di+236],ax +mov al,ds:[si+306] +mov ah,ds:[si+308] +mov es:[di+238],ax +mov al,ds:[si+310] +mov ah,ds:[si+312] +mov es:[di+240],ax +mov al,ds:[si+314] +mov ah,ds:[si+316] +mov es:[di+242],ax +mov al,ds:[si+318] +mov ah,dl +mov es:[di+244],ax +mov es:[di+246],dx +mov es:[di+248],edx +mov es:[di+252],edx +mov es:[di+256],edx +mov es:[di+260],edx +mov es:[di+264],edx +mov es:[di+268],edx +mov es:[di+272],edx +mov es:[di+276],edx +mov es:[di+280],edx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_176: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],edx +mov es:[di+40],edx +mov es:[di+44],edx +mov es:[di+48],edx +mov es:[di+52],edx +mov es:[di+56],edx +mov es:[di+60],edx +mov es:[di+64],edx +mov es:[di+68],edx +mov al,ds:[si+0] +mov ah,ds:[si+2] +mov es:[di+72],ax +mov al,ds:[si+4] +mov ah,ds:[si+6] +mov es:[di+74],ax +mov al,ds:[si+8] +mov ah,ds:[si+10] +mov es:[di+76],ax +mov al,ds:[si+11] +mov ah,ds:[si+13] +mov es:[di+78],ax +mov al,ds:[si+15] +mov ah,ds:[si+17] +mov es:[di+80],ax +mov ax,ds:[si+19] +mov es:[di+82],ax +mov al,ds:[si+22] +mov ah,ds:[si+24] +mov es:[di+84],ax +mov al,ds:[si+26] +mov ah,ds:[si+28] +mov es:[di+86],ax +mov ax,ds:[si+30] +mov es:[di+88],ax +mov al,ds:[si+33] +mov ah,ds:[si+35] +mov es:[di+90],ax +mov al,ds:[si+37] +mov ah,ds:[si+39] +mov es:[di+92],ax +mov al,ds:[si+40] +mov ah,ds:[si+42] +mov es:[di+94],ax +mov al,ds:[si+44] +mov ah,ds:[si+46] +mov es:[di+96],ax +mov al,ds:[si+48] +mov ah,ds:[si+50] +mov es:[di+98],ax +mov al,ds:[si+51] +mov ah,ds:[si+53] +mov es:[di+100],ax +mov al,ds:[si+55] +mov ah,ds:[si+57] +mov es:[di+102],ax +mov ax,ds:[si+59] +mov es:[di+104],ax +mov al,ds:[si+62] +mov ah,ds:[si+64] +mov es:[di+106],ax +mov al,ds:[si+66] +mov ah,ds:[si+68] +mov es:[di+108],ax +mov ax,ds:[si+70] +mov es:[di+110],ax +mov al,ds:[si+73] +mov ah,ds:[si+75] +mov es:[di+112],ax +mov al,ds:[si+77] +mov ah,ds:[si+79] +mov es:[di+114],ax +add si,cx +mov al,ds:[si+80] +mov ah,ds:[si+82] +mov es:[di+116],ax +mov al,ds:[si+84] +mov ah,ds:[si+86] +mov es:[di+118],ax +mov al,ds:[si+88] +mov ah,ds:[si+90] +mov es:[di+120],ax +mov al,ds:[si+91] +mov ah,ds:[si+93] +mov es:[di+122],ax +mov al,ds:[si+95] +mov ah,ds:[si+97] +mov es:[di+124],ax +mov ax,ds:[si+99] +mov es:[di+126],ax +mov al,ds:[si+102] +mov ah,ds:[si+104] +mov es:[di+128],ax +mov al,ds:[si+106] +mov ah,ds:[si+108] +mov es:[di+130],ax +mov ax,ds:[si+110] +mov es:[di+132],ax +mov al,ds:[si+113] +mov ah,ds:[si+115] +mov es:[di+134],ax +add si,cx +mov al,ds:[si+117] +mov ah,ds:[si+119] +mov es:[di+136],ax +mov al,ds:[si+120] +mov ah,ds:[si+122] +mov es:[di+138],ax +mov al,ds:[si+124] +mov ah,ds:[si+126] +mov es:[di+140],ax +mov al,ds:[si+128] +mov ah,ds:[si+130] +mov es:[di+142],ax +mov al,ds:[si+131] +mov ah,ds:[si+133] +mov es:[di+144],ax +mov al,ds:[si+135] +mov ah,ds:[si+137] +mov es:[di+146],ax +mov ax,ds:[si+139] +mov es:[di+148],ax +mov al,ds:[si+142] +mov ah,ds:[si+144] +mov es:[di+150],ax +mov al,ds:[si+146] +mov ah,ds:[si+148] +mov es:[di+152],ax +mov ax,ds:[si+150] +mov es:[di+154],ax +mov al,ds:[si+153] +mov ah,ds:[si+155] +mov es:[di+156],ax +mov al,ds:[si+157] +mov ah,ds:[si+159] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov al,ds:[si+163] +mov ah,ds:[si+165] +mov es:[di+162],ax +mov al,ds:[si+167] +mov ah,ds:[si+169] +mov es:[di+164],ax +mov al,ds:[si+170] +mov ah,ds:[si+172] +mov es:[di+166],ax +mov al,ds:[si+174] +mov ah,ds:[si+176] +mov es:[di+168],ax +mov al,ds:[si+178] +mov ah,ds:[si+180] +mov es:[di+170],ax +mov al,ds:[si+181] +mov ah,ds:[si+183] +mov es:[di+172],ax +mov al,ds:[si+185] +mov ah,ds:[si+187] +mov es:[di+174],ax +mov ax,ds:[si+189] +mov es:[di+176],ax +mov al,ds:[si+192] +mov ah,ds:[si+194] +mov es:[di+178],ax +add si,cx +mov al,ds:[si+196] +mov ah,ds:[si+198] +mov es:[di+180],ax +mov ax,ds:[si+200] +mov es:[di+182],ax +mov al,ds:[si+203] +mov ah,ds:[si+205] +mov es:[di+184],ax +mov al,ds:[si+207] +mov ah,ds:[si+209] +mov es:[di+186],ax +mov al,ds:[si+210] +mov ah,ds:[si+212] +mov es:[di+188],ax +mov al,ds:[si+214] +mov ah,ds:[si+216] +mov es:[di+190],ax +mov al,ds:[si+218] +mov ah,ds:[si+220] +mov es:[di+192],ax +mov al,ds:[si+221] +mov ah,ds:[si+223] +mov es:[di+194],ax +mov al,ds:[si+225] +mov ah,ds:[si+227] +mov es:[di+196],ax +mov ax,ds:[si+229] +mov es:[di+198],ax +mov al,ds:[si+232] +mov ah,ds:[si+234] +mov es:[di+200],ax +mov al,ds:[si+236] +mov ah,ds:[si+238] +mov es:[di+202],ax +add si,cx +mov ax,ds:[si+240] +mov es:[di+204],ax +mov al,ds:[si+243] +mov ah,ds:[si+245] +mov es:[di+206],ax +mov al,ds:[si+247] +mov ah,ds:[si+249] +mov es:[di+208],ax +mov al,ds:[si+250] +mov ah,ds:[si+252] +mov es:[di+210],ax +mov al,ds:[si+254] +mov ah,ds:[si+256] +mov es:[di+212],ax +mov al,ds:[si+258] +mov ah,ds:[si+260] +mov es:[di+214],ax +mov al,ds:[si+261] +mov ah,ds:[si+263] +mov es:[di+216],ax +mov al,ds:[si+265] +mov ah,ds:[si+267] +mov es:[di+218],ax +mov ax,ds:[si+269] +mov es:[di+220],ax +mov al,ds:[si+272] +mov ah,ds:[si+274] +mov es:[di+222],ax +mov al,ds:[si+276] +mov ah,ds:[si+278] +mov es:[di+224],ax +mov ax,ds:[si+280] +mov es:[di+226],ax +mov al,ds:[si+283] +mov ah,ds:[si+285] +mov es:[di+228],ax +mov al,ds:[si+287] +mov ah,ds:[si+289] +mov es:[di+230],ax +mov al,ds:[si+290] +mov ah,ds:[si+292] +mov es:[di+232],ax +mov al,ds:[si+294] +mov ah,ds:[si+296] +mov es:[di+234],ax +mov al,ds:[si+298] +mov ah,ds:[si+300] +mov es:[di+236],ax +mov al,ds:[si+301] +mov ah,ds:[si+303] +mov es:[di+238],ax +mov al,ds:[si+305] +mov ah,ds:[si+307] +mov es:[di+240],ax +mov ax,ds:[si+309] +mov es:[di+242],ax +mov al,ds:[si+312] +mov ah,ds:[si+314] +mov es:[di+244],ax +mov al,ds:[si+316] +mov ah,ds:[si+318] +mov es:[di+246],ax +mov es:[di+248],edx +mov es:[di+252],edx +mov es:[di+256],edx +mov es:[di+260],edx +mov es:[di+264],edx +mov es:[di+268],edx +mov es:[di+272],edx +mov es:[di+276],edx +mov es:[di+280],edx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_178: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],edx +mov es:[di+40],edx +mov es:[di+44],edx +mov es:[di+48],edx +mov es:[di+52],edx +mov es:[di+56],edx +mov es:[di+60],edx +mov es:[di+64],edx +mov es:[di+68],dx +mov al,dl +mov ah,ds:[si+0] +mov es:[di+70],ax +mov al,ds:[si+2] +mov ah,ds:[si+4] +mov es:[di+72],ax +mov al,ds:[si+6] +mov ah,ds:[si+8] +mov es:[di+74],ax +mov al,ds:[si+9] +mov ah,ds:[si+11] +mov es:[di+76],ax +mov al,ds:[si+13] +mov ah,ds:[si+15] +mov es:[di+78],ax +mov ax,ds:[si+17] +mov es:[di+80],ax +mov al,ds:[si+20] +mov ah,ds:[si+22] +mov es:[di+82],ax +mov al,ds:[si+24] +mov ah,ds:[si+26] +mov es:[di+84],ax +mov al,ds:[si+27] +mov ah,ds:[si+29] +mov es:[di+86],ax +mov al,ds:[si+31] +mov ah,ds:[si+33] +mov es:[di+88],ax +mov ax,ds:[si+35] +mov es:[di+90],ax +mov al,ds:[si+38] +mov ah,ds:[si+40] +mov es:[di+92],ax +mov al,ds:[si+42] +mov ah,ds:[si+44] +mov es:[di+94],ax +mov al,ds:[si+45] +mov ah,ds:[si+47] +mov es:[di+96],ax +mov al,ds:[si+49] +mov ah,ds:[si+51] +mov es:[di+98],ax +mov ax,ds:[si+53] +mov es:[di+100],ax +mov al,ds:[si+56] +mov ah,ds:[si+58] +mov es:[di+102],ax +mov al,ds:[si+60] +mov ah,ds:[si+62] +mov es:[di+104],ax +mov al,ds:[si+63] +mov ah,ds:[si+65] +mov es:[di+106],ax +mov al,ds:[si+67] +mov ah,ds:[si+69] +mov es:[di+108],ax +mov ax,ds:[si+71] +mov es:[di+110],ax +mov al,ds:[si+74] +mov ah,ds:[si+76] +mov es:[di+112],ax +mov al,ds:[si+78] +mov ah,ds:[si+80] +mov es:[di+114],ax +add si,cx +mov al,ds:[si+81] +mov ah,ds:[si+83] +mov es:[di+116],ax +mov al,ds:[si+85] +mov ah,ds:[si+87] +mov es:[di+118],ax +mov ax,ds:[si+89] +mov es:[di+120],ax +mov al,ds:[si+92] +mov ah,ds:[si+94] +mov es:[di+122],ax +mov al,ds:[si+96] +mov ah,ds:[si+98] +mov es:[di+124],ax +mov al,ds:[si+99] +mov ah,ds:[si+101] +mov es:[di+126],ax +mov al,ds:[si+103] +mov ah,ds:[si+105] +mov es:[di+128],ax +mov ax,ds:[si+107] +mov es:[di+130],ax +mov al,ds:[si+110] +mov ah,ds:[si+112] +mov es:[di+132],ax +mov al,ds:[si+114] +mov ah,ds:[si+116] +mov es:[di+134],ax +add si,cx +mov al,ds:[si+117] +mov ah,ds:[si+119] +mov es:[di+136],ax +mov al,ds:[si+121] +mov ah,ds:[si+123] +mov es:[di+138],ax +mov ax,ds:[si+125] +mov es:[di+140],ax +mov al,ds:[si+128] +mov ah,ds:[si+130] +mov es:[di+142],ax +mov al,ds:[si+132] +mov ah,ds:[si+134] +mov es:[di+144],ax +mov al,ds:[si+135] +mov ah,ds:[si+137] +mov es:[di+146],ax +mov al,ds:[si+139] +mov ah,ds:[si+141] +mov es:[di+148],ax +mov ax,ds:[si+143] +mov es:[di+150],ax +mov al,ds:[si+146] +mov ah,ds:[si+148] +mov es:[di+152],ax +mov al,ds:[si+150] +mov ah,ds:[si+152] +mov es:[di+154],ax +mov al,ds:[si+153] +mov ah,ds:[si+155] +mov es:[di+156],ax +mov al,ds:[si+157] +mov ah,ds:[si+159] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov al,ds:[si+163] +mov ah,ds:[si+165] +mov es:[di+162],ax +mov ax,ds:[si+167] +mov es:[di+164],ax +mov al,ds:[si+170] +mov ah,ds:[si+172] +mov es:[di+166],ax +mov al,ds:[si+174] +mov ah,ds:[si+176] +mov es:[di+168],ax +mov al,ds:[si+177] +mov ah,ds:[si+179] +mov es:[di+170],ax +mov al,ds:[si+181] +mov ah,ds:[si+183] +mov es:[di+172],ax +mov ax,ds:[si+185] +mov es:[di+174],ax +mov al,ds:[si+188] +mov ah,ds:[si+190] +mov es:[di+176],ax +mov al,ds:[si+192] +mov ah,ds:[si+194] +mov es:[di+178],ax +add si,cx +mov al,ds:[si+195] +mov ah,ds:[si+197] +mov es:[di+180],ax +mov al,ds:[si+199] +mov ah,ds:[si+201] +mov es:[di+182],ax +mov ax,ds:[si+203] +mov es:[di+184],ax +mov al,ds:[si+206] +mov ah,ds:[si+208] +mov es:[di+186],ax +mov al,ds:[si+210] +mov ah,ds:[si+212] +mov es:[di+188],ax +mov al,ds:[si+213] +mov ah,ds:[si+215] +mov es:[di+190],ax +mov al,ds:[si+217] +mov ah,ds:[si+219] +mov es:[di+192],ax +mov ax,ds:[si+221] +mov es:[di+194],ax +mov al,ds:[si+224] +mov ah,ds:[si+226] +mov es:[di+196],ax +mov al,ds:[si+228] +mov ah,ds:[si+230] +mov es:[di+198],ax +mov al,ds:[si+231] +mov ah,ds:[si+233] +mov es:[di+200],ax +mov al,ds:[si+235] +mov ah,ds:[si+237] +mov es:[di+202],ax +add si,cx +mov ax,ds:[si+239] +mov es:[di+204],ax +mov al,ds:[si+242] +mov ah,ds:[si+244] +mov es:[di+206],ax +mov al,ds:[si+246] +mov ah,ds:[si+248] +mov es:[di+208],ax +mov al,ds:[si+249] +mov ah,ds:[si+251] +mov es:[di+210],ax +mov al,ds:[si+253] +mov ah,ds:[si+255] +mov es:[di+212],ax +mov ax,ds:[si+257] +mov es:[di+214],ax +mov al,ds:[si+260] +mov ah,ds:[si+262] +mov es:[di+216],ax +mov al,ds:[si+264] +mov ah,ds:[si+266] +mov es:[di+218],ax +mov al,ds:[si+267] +mov ah,ds:[si+269] +mov es:[di+220],ax +mov al,ds:[si+271] +mov ah,ds:[si+273] +mov es:[di+222],ax +mov ax,ds:[si+275] +mov es:[di+224],ax +mov al,ds:[si+278] +mov ah,ds:[si+280] +mov es:[di+226],ax +mov al,ds:[si+282] +mov ah,ds:[si+284] +mov es:[di+228],ax +mov al,ds:[si+285] +mov ah,ds:[si+287] +mov es:[di+230],ax +mov al,ds:[si+289] +mov ah,ds:[si+291] +mov es:[di+232],ax +mov ax,ds:[si+293] +mov es:[di+234],ax +mov al,ds:[si+296] +mov ah,ds:[si+298] +mov es:[di+236],ax +mov al,ds:[si+300] +mov ah,ds:[si+302] +mov es:[di+238],ax +mov al,ds:[si+303] +mov ah,ds:[si+305] +mov es:[di+240],ax +mov al,ds:[si+307] +mov ah,ds:[si+309] +mov es:[di+242],ax +mov ax,ds:[si+311] +mov es:[di+244],ax +mov al,ds:[si+314] +mov ah,ds:[si+316] +mov es:[di+246],ax +mov al,ds:[si+318] +mov ah,dl +mov es:[di+248],ax +mov es:[di+250],dx +mov es:[di+252],edx +mov es:[di+256],edx +mov es:[di+260],edx +mov es:[di+264],edx +mov es:[di+268],edx +mov es:[di+272],edx +mov es:[di+276],edx +mov es:[di+280],edx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_184: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],edx +mov es:[di+40],edx +mov es:[di+44],edx +mov es:[di+48],edx +mov es:[di+52],edx +mov es:[di+56],edx +mov es:[di+60],edx +mov es:[di+64],edx +mov al,ds:[si+0] +mov ah,ds:[si+2] +mov es:[di+68],ax +mov al,ds:[si+4] +mov ah,ds:[si+6] +mov es:[di+70],ax +mov al,ds:[si+7] +mov ah,ds:[si+9] +mov es:[di+72],ax +mov al,ds:[si+11] +mov ah,ds:[si+13] +mov es:[di+74],ax +mov al,ds:[si+14] +mov ah,ds:[si+16] +mov es:[di+76],ax +mov al,ds:[si+18] +mov ah,ds:[si+20] +mov es:[di+78],ax +mov al,ds:[si+21] +mov ah,ds:[si+23] +mov es:[di+80],ax +mov al,ds:[si+25] +mov ah,ds:[si+27] +mov es:[di+82],ax +mov al,ds:[si+28] +mov ah,ds:[si+30] +mov es:[di+84],ax +mov al,ds:[si+32] +mov ah,ds:[si+34] +mov es:[di+86],ax +mov al,ds:[si+35] +mov ah,ds:[si+37] +mov es:[di+88],ax +mov ax,ds:[si+39] +mov es:[di+90],ax +mov al,ds:[si+42] +mov ah,ds:[si+44] +mov es:[di+92],ax +mov ax,ds:[si+46] +mov es:[di+94],ax +mov al,ds:[si+49] +mov ah,ds:[si+51] +mov es:[di+96],ax +mov ax,ds:[si+53] +mov es:[di+98],ax +mov al,ds:[si+56] +mov ah,ds:[si+58] +mov es:[di+100],ax +mov ax,ds:[si+60] +mov es:[di+102],ax +mov al,ds:[si+63] +mov ah,ds:[si+65] +mov es:[di+104],ax +mov ax,ds:[si+67] +mov es:[di+106],ax +mov al,ds:[si+70] +mov ah,ds:[si+72] +mov es:[di+108],ax +mov ax,ds:[si+74] +mov es:[di+110],ax +add si,cx +mov al,ds:[si+77] +mov ah,ds:[si+79] +mov es:[di+112],ax +mov al,ds:[si+80] +mov ah,ds:[si+82] +mov es:[di+114],ax +mov al,ds:[si+84] +mov ah,ds:[si+86] +mov es:[di+116],ax +mov al,ds:[si+87] +mov ah,ds:[si+89] +mov es:[di+118],ax +mov al,ds:[si+91] +mov ah,ds:[si+93] +mov es:[di+120],ax +mov al,ds:[si+94] +mov ah,ds:[si+96] +mov es:[di+122],ax +mov al,ds:[si+98] +mov ah,ds:[si+100] +mov es:[di+124],ax +mov al,ds:[si+101] +mov ah,ds:[si+103] +mov es:[di+126],ax +mov al,ds:[si+105] +mov ah,ds:[si+107] +mov es:[di+128],ax +mov al,ds:[si+108] +mov ah,ds:[si+110] +mov es:[di+130],ax +mov al,ds:[si+112] +mov ah,ds:[si+114] +mov es:[di+132],ax +mov al,ds:[si+115] +mov ah,ds:[si+117] +mov es:[di+134],ax +add si,cx +mov ax,ds:[si+119] +mov es:[di+136],ax +mov al,ds:[si+122] +mov ah,ds:[si+124] +mov es:[di+138],ax +mov ax,ds:[si+126] +mov es:[di+140],ax +mov al,ds:[si+129] +mov ah,ds:[si+131] +mov es:[di+142],ax +mov ax,ds:[si+133] +mov es:[di+144],ax +mov al,ds:[si+136] +mov ah,ds:[si+138] +mov es:[di+146],ax +mov ax,ds:[si+140] +mov es:[di+148],ax +mov al,ds:[si+143] +mov ah,ds:[si+145] +mov es:[di+150],ax +mov ax,ds:[si+147] +mov es:[di+152],ax +mov al,ds:[si+150] +mov ah,ds:[si+152] +mov es:[di+154],ax +mov ax,ds:[si+154] +mov es:[di+156],ax +mov al,ds:[si+157] +mov ah,ds:[si+159] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov al,ds:[si+163] +mov ah,ds:[si+165] +mov es:[di+162],ax +mov al,ds:[si+166] +mov ah,ds:[si+168] +mov es:[di+164],ax +mov al,ds:[si+170] +mov ah,ds:[si+172] +mov es:[di+166],ax +mov al,ds:[si+173] +mov ah,ds:[si+175] +mov es:[di+168],ax +mov al,ds:[si+177] +mov ah,ds:[si+179] +mov es:[di+170],ax +mov al,ds:[si+180] +mov ah,ds:[si+182] +mov es:[di+172],ax +mov al,ds:[si+184] +mov ah,ds:[si+186] +mov es:[di+174],ax +mov al,ds:[si+187] +mov ah,ds:[si+189] +mov es:[di+176],ax +mov al,ds:[si+191] +mov ah,ds:[si+193] +mov es:[di+178],ax +add si,cx +mov al,ds:[si+194] +mov ah,ds:[si+196] +mov es:[di+180],ax +mov al,ds:[si+198] +mov ah,ds:[si+200] +mov es:[di+182],ax +mov al,ds:[si+201] +mov ah,ds:[si+203] +mov es:[di+184],ax +mov ax,ds:[si+205] +mov es:[di+186],ax +mov al,ds:[si+208] +mov ah,ds:[si+210] +mov es:[di+188],ax +mov ax,ds:[si+212] +mov es:[di+190],ax +mov al,ds:[si+215] +mov ah,ds:[si+217] +mov es:[di+192],ax +mov ax,ds:[si+219] +mov es:[di+194],ax +mov al,ds:[si+222] +mov ah,ds:[si+224] +mov es:[di+196],ax +mov ax,ds:[si+226] +mov es:[di+198],ax +mov al,ds:[si+229] +mov ah,ds:[si+231] +mov es:[di+200],ax +mov ax,ds:[si+233] +mov es:[di+202],ax +add si,cx +mov al,ds:[si+236] +mov ah,ds:[si+238] +mov es:[di+204],ax +mov ax,ds:[si+240] +mov es:[di+206],ax +mov al,ds:[si+243] +mov ah,ds:[si+245] +mov es:[di+208],ax +mov al,ds:[si+246] +mov ah,ds:[si+248] +mov es:[di+210],ax +mov al,ds:[si+250] +mov ah,ds:[si+252] +mov es:[di+212],ax +mov al,ds:[si+253] +mov ah,ds:[si+255] +mov es:[di+214],ax +mov al,ds:[si+257] +mov ah,ds:[si+259] +mov es:[di+216],ax +mov al,ds:[si+260] +mov ah,ds:[si+262] +mov es:[di+218],ax +mov al,ds:[si+264] +mov ah,ds:[si+266] +mov es:[di+220],ax +mov al,ds:[si+267] +mov ah,ds:[si+269] +mov es:[di+222],ax +mov al,ds:[si+271] +mov ah,ds:[si+273] +mov es:[di+224],ax +mov al,ds:[si+274] +mov ah,ds:[si+276] +mov es:[di+226],ax +mov al,ds:[si+278] +mov ah,ds:[si+280] +mov es:[di+228],ax +mov al,ds:[si+281] +mov ah,ds:[si+283] +mov es:[di+230],ax +mov ax,ds:[si+285] +mov es:[di+232],ax +mov al,ds:[si+288] +mov ah,ds:[si+290] +mov es:[di+234],ax +mov ax,ds:[si+292] +mov es:[di+236],ax +mov al,ds:[si+295] +mov ah,ds:[si+297] +mov es:[di+238],ax +mov ax,ds:[si+299] +mov es:[di+240],ax +mov al,ds:[si+302] +mov ah,ds:[si+304] +mov es:[di+242],ax +mov ax,ds:[si+306] +mov es:[di+244],ax +mov al,ds:[si+309] +mov ah,ds:[si+311] +mov es:[di+246],ax +mov ax,ds:[si+313] +mov es:[di+248],ax +mov al,ds:[si+316] +mov ah,ds:[si+318] +mov es:[di+250],ax +mov es:[di+252],edx +mov es:[di+256],edx +mov es:[di+260],edx +mov es:[di+264],edx +mov es:[di+268],edx +mov es:[di+272],edx +mov es:[di+276],edx +mov es:[di+280],edx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_186: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],edx +mov es:[di+40],edx +mov es:[di+44],edx +mov es:[di+48],edx +mov es:[di+52],edx +mov es:[di+56],edx +mov es:[di+60],edx +mov es:[di+64],dx +mov al,dl +mov ah,ds:[si+0] +mov es:[di+66],ax +mov al,ds:[si+2] +mov ah,ds:[si+4] +mov es:[di+68],ax +mov ax,ds:[si+6] +mov es:[di+70],ax +mov al,ds:[si+9] +mov ah,ds:[si+11] +mov es:[di+72],ax +mov ax,ds:[si+13] +mov es:[di+74],ax +mov al,ds:[si+16] +mov ah,ds:[si+18] +mov es:[di+76],ax +mov al,ds:[si+19] +mov ah,ds:[si+21] +mov es:[di+78],ax +mov al,ds:[si+23] +mov ah,ds:[si+25] +mov es:[di+80],ax +mov al,ds:[si+26] +mov ah,ds:[si+28] +mov es:[di+82],ax +mov ax,ds:[si+30] +mov es:[di+84],ax +mov al,ds:[si+33] +mov ah,ds:[si+35] +mov es:[di+86],ax +mov ax,ds:[si+37] +mov es:[di+88],ax +mov al,ds:[si+40] +mov ah,ds:[si+42] +mov es:[di+90],ax +mov ax,ds:[si+44] +mov es:[di+92],ax +mov al,ds:[si+47] +mov ah,ds:[si+49] +mov es:[di+94],ax +mov al,ds:[si+50] +mov ah,ds:[si+52] +mov es:[di+96],ax +mov al,ds:[si+54] +mov ah,ds:[si+56] +mov es:[di+98],ax +mov al,ds:[si+57] +mov ah,ds:[si+59] +mov es:[di+100],ax +mov ax,ds:[si+61] +mov es:[di+102],ax +mov al,ds:[si+64] +mov ah,ds:[si+66] +mov es:[di+104],ax +mov ax,ds:[si+68] +mov es:[di+106],ax +mov al,ds:[si+71] +mov ah,ds:[si+73] +mov es:[di+108],ax +mov al,ds:[si+74] +mov ah,ds:[si+76] +mov es:[di+110],ax +add si,cx +mov al,ds:[si+78] +mov ah,ds:[si+80] +mov es:[di+112],ax +mov al,ds:[si+81] +mov ah,ds:[si+83] +mov es:[di+114],ax +mov al,ds:[si+85] +mov ah,ds:[si+87] +mov es:[di+116],ax +mov al,ds:[si+88] +mov ah,ds:[si+90] +mov es:[di+118],ax +mov ax,ds:[si+92] +mov es:[di+120],ax +mov al,ds:[si+95] +mov ah,ds:[si+97] +mov es:[di+122],ax +mov ax,ds:[si+99] +mov es:[di+124],ax +mov al,ds:[si+102] +mov ah,ds:[si+104] +mov es:[di+126],ax +mov al,ds:[si+105] +mov ah,ds:[si+107] +mov es:[di+128],ax +mov al,ds:[si+109] +mov ah,ds:[si+111] +mov es:[di+130],ax +mov al,ds:[si+112] +mov ah,ds:[si+114] +mov es:[di+132],ax +mov ax,ds:[si+116] +mov es:[di+134],ax +add si,cx +mov al,ds:[si+119] +mov ah,ds:[si+121] +mov es:[di+136],ax +mov ax,ds:[si+123] +mov es:[di+138],ax +mov al,ds:[si+126] +mov ah,ds:[si+128] +mov es:[di+140],ax +mov ax,ds:[si+130] +mov es:[di+142],ax +mov al,ds:[si+133] +mov ah,ds:[si+135] +mov es:[di+144],ax +mov al,ds:[si+136] +mov ah,ds:[si+138] +mov es:[di+146],ax +mov al,ds:[si+140] +mov ah,ds:[si+142] +mov es:[di+148],ax +mov al,ds:[si+143] +mov ah,ds:[si+145] +mov es:[di+150],ax +mov ax,ds:[si+147] +mov es:[di+152],ax +mov al,ds:[si+150] +mov ah,ds:[si+152] +mov es:[di+154],ax +mov ax,ds:[si+154] +mov es:[di+156],ax +mov al,ds:[si+157] +mov ah,ds:[si+159] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov al,ds:[si+163] +mov ah,ds:[si+165] +mov es:[di+162],ax +mov al,ds:[si+166] +mov ah,ds:[si+168] +mov es:[di+164],ax +mov al,ds:[si+170] +mov ah,ds:[si+172] +mov es:[di+166],ax +mov al,ds:[si+173] +mov ah,ds:[si+175] +mov es:[di+168],ax +mov ax,ds:[si+177] +mov es:[di+170],ax +mov al,ds:[si+180] +mov ah,ds:[si+182] +mov es:[di+172],ax +mov ax,ds:[si+184] +mov es:[di+174],ax +mov al,ds:[si+187] +mov ah,ds:[si+189] +mov es:[di+176],ax +mov al,ds:[si+190] +mov ah,ds:[si+192] +mov es:[di+178],ax +add si,cx +mov al,ds:[si+194] +mov ah,ds:[si+196] +mov es:[di+180],ax +mov al,ds:[si+197] +mov ah,ds:[si+199] +mov es:[di+182],ax +mov al,ds:[si+201] +mov ah,ds:[si+203] +mov es:[di+184],ax +mov al,ds:[si+204] +mov ah,ds:[si+206] +mov es:[di+186],ax +mov ax,ds:[si+208] +mov es:[di+188],ax +mov al,ds:[si+211] +mov ah,ds:[si+213] +mov es:[di+190],ax +mov ax,ds:[si+215] +mov es:[di+192],ax +mov al,ds:[si+218] +mov ah,ds:[si+220] +mov es:[di+194],ax +mov al,ds:[si+221] +mov ah,ds:[si+223] +mov es:[di+196],ax +mov al,ds:[si+225] +mov ah,ds:[si+227] +mov es:[di+198],ax +mov al,ds:[si+228] +mov ah,ds:[si+230] +mov es:[di+200],ax +mov ax,ds:[si+232] +mov es:[di+202],ax +add si,cx +mov al,ds:[si+235] +mov ah,ds:[si+237] +mov es:[di+204],ax +mov ax,ds:[si+239] +mov es:[di+206],ax +mov al,ds:[si+242] +mov ah,ds:[si+244] +mov es:[di+208],ax +mov ax,ds:[si+246] +mov es:[di+210],ax +mov al,ds:[si+249] +mov ah,ds:[si+251] +mov es:[di+212],ax +mov al,ds:[si+252] +mov ah,ds:[si+254] +mov es:[di+214],ax +mov al,ds:[si+256] +mov ah,ds:[si+258] +mov es:[di+216],ax +mov al,ds:[si+259] +mov ah,ds:[si+261] +mov es:[di+218],ax +mov ax,ds:[si+263] +mov es:[di+220],ax +mov al,ds:[si+266] +mov ah,ds:[si+268] +mov es:[di+222],ax +mov ax,ds:[si+270] +mov es:[di+224],ax +mov al,ds:[si+273] +mov ah,ds:[si+275] +mov es:[di+226],ax +mov al,ds:[si+276] +mov ah,ds:[si+278] +mov es:[di+228],ax +mov al,ds:[si+280] +mov ah,ds:[si+282] +mov es:[di+230],ax +mov al,ds:[si+283] +mov ah,ds:[si+285] +mov es:[di+232],ax +mov al,ds:[si+287] +mov ah,ds:[si+289] +mov es:[di+234],ax +mov al,ds:[si+290] +mov ah,ds:[si+292] +mov es:[di+236],ax +mov ax,ds:[si+294] +mov es:[di+238],ax +mov al,ds:[si+297] +mov ah,ds:[si+299] +mov es:[di+240],ax +mov ax,ds:[si+301] +mov es:[di+242],ax +mov al,ds:[si+304] +mov ah,ds:[si+306] +mov es:[di+244],ax +mov al,ds:[si+307] +mov ah,ds:[si+309] +mov es:[di+246],ax +mov al,ds:[si+311] +mov ah,ds:[si+313] +mov es:[di+248],ax +mov al,ds:[si+314] +mov ah,ds:[si+316] +mov es:[di+250],ax +mov al,ds:[si+318] +mov ah,dl +mov es:[di+252],ax +mov es:[di+254],dx +mov es:[di+256],edx +mov es:[di+260],edx +mov es:[di+264],edx +mov es:[di+268],edx +mov es:[di+272],edx +mov es:[di+276],edx +mov es:[di+280],edx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_192: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],edx +mov es:[di+40],edx +mov es:[di+44],edx +mov es:[di+48],edx +mov es:[di+52],edx +mov es:[di+56],edx +mov es:[di+60],edx +mov al,ds:[si+0] +mov ah,ds:[si+2] +mov es:[di+64],ax +mov ax,ds:[si+4] +mov es:[di+66],ax +mov al,ds:[si+7] +mov ah,ds:[si+9] +mov es:[di+68],ax +mov al,ds:[si+10] +mov ah,ds:[si+12] +mov es:[di+70],ax +mov ax,ds:[si+14] +mov es:[di+72],ax +mov al,ds:[si+17] +mov ah,ds:[si+19] +mov es:[di+74],ax +mov al,ds:[si+20] +mov ah,ds:[si+22] +mov es:[di+76],ax +mov ax,ds:[si+24] +mov es:[di+78],ax +mov al,ds:[si+27] +mov ah,ds:[si+29] +mov es:[di+80],ax +mov al,ds:[si+30] +mov ah,ds:[si+32] +mov es:[di+82],ax +mov ax,ds:[si+34] +mov es:[di+84],ax +mov al,ds:[si+37] +mov ah,ds:[si+39] +mov es:[di+86],ax +mov al,ds:[si+40] +mov ah,ds:[si+42] +mov es:[di+88],ax +mov ax,ds:[si+44] +mov es:[di+90],ax +mov al,ds:[si+47] +mov ah,ds:[si+49] +mov es:[di+92],ax +mov al,ds:[si+50] +mov ah,ds:[si+52] +mov es:[di+94],ax +mov ax,ds:[si+54] +mov es:[di+96],ax +mov al,ds:[si+57] +mov ah,ds:[si+59] +mov es:[di+98],ax +mov al,ds:[si+60] +mov ah,ds:[si+62] +mov es:[di+100],ax +mov ax,ds:[si+64] +mov es:[di+102],ax +mov al,ds:[si+67] +mov ah,ds:[si+69] +mov es:[di+104],ax +mov al,ds:[si+70] +mov ah,ds:[si+72] +mov es:[di+106],ax +mov ax,ds:[si+74] +mov es:[di+108],ax +mov al,ds:[si+77] +mov ah,ds:[si+79] +mov es:[di+110],ax +add si,cx +mov al,ds:[si+80] +mov ah,ds:[si+82] +mov es:[di+112],ax +mov ax,ds:[si+84] +mov es:[di+114],ax +mov al,ds:[si+87] +mov ah,ds:[si+89] +mov es:[di+116],ax +mov al,ds:[si+90] +mov ah,ds:[si+92] +mov es:[di+118],ax +mov ax,ds:[si+94] +mov es:[di+120],ax +mov al,ds:[si+97] +mov ah,ds:[si+99] +mov es:[di+122],ax +mov al,ds:[si+100] +mov ah,ds:[si+102] +mov es:[di+124],ax +mov ax,ds:[si+104] +mov es:[di+126],ax +mov al,ds:[si+107] +mov ah,ds:[si+109] +mov es:[di+128],ax +mov al,ds:[si+110] +mov ah,ds:[si+112] +mov es:[di+130],ax +mov ax,ds:[si+114] +mov es:[di+132],ax +mov al,ds:[si+117] +mov ah,ds:[si+119] +mov es:[di+134],ax +add si,cx +mov al,ds:[si+120] +mov ah,ds:[si+122] +mov es:[di+136],ax +mov ax,ds:[si+124] +mov es:[di+138],ax +mov al,ds:[si+127] +mov ah,ds:[si+129] +mov es:[di+140],ax +mov al,ds:[si+130] +mov ah,ds:[si+132] +mov es:[di+142],ax +mov ax,ds:[si+134] +mov es:[di+144],ax +mov al,ds:[si+137] +mov ah,ds:[si+139] +mov es:[di+146],ax +mov al,ds:[si+140] +mov ah,ds:[si+142] +mov es:[di+148],ax +mov ax,ds:[si+144] +mov es:[di+150],ax +mov al,ds:[si+147] +mov ah,ds:[si+149] +mov es:[di+152],ax +mov al,ds:[si+150] +mov ah,ds:[si+152] +mov es:[di+154],ax +mov ax,ds:[si+154] +mov es:[di+156],ax +mov al,ds:[si+157] +mov ah,ds:[si+159] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov al,ds:[si+163] +mov ah,ds:[si+165] +mov es:[di+162],ax +mov al,ds:[si+166] +mov ah,ds:[si+168] +mov es:[di+164],ax +mov ax,ds:[si+170] +mov es:[di+166],ax +mov al,ds:[si+173] +mov ah,ds:[si+175] +mov es:[di+168],ax +mov al,ds:[si+176] +mov ah,ds:[si+178] +mov es:[di+170],ax +mov ax,ds:[si+180] +mov es:[di+172],ax +mov al,ds:[si+183] +mov ah,ds:[si+185] +mov es:[di+174],ax +mov al,ds:[si+186] +mov ah,ds:[si+188] +mov es:[di+176],ax +mov ax,ds:[si+190] +mov es:[di+178],ax +mov al,ds:[si+193] +mov ah,ds:[si+195] +mov es:[di+180],ax +mov al,ds:[si+196] +mov ah,ds:[si+198] +mov es:[di+182],ax +add si,cx +mov ax,ds:[si+200] +mov es:[di+184],ax +mov al,ds:[si+203] +mov ah,ds:[si+205] +mov es:[di+186],ax +mov al,ds:[si+206] +mov ah,ds:[si+208] +mov es:[di+188],ax +mov ax,ds:[si+210] +mov es:[di+190],ax +mov al,ds:[si+213] +mov ah,ds:[si+215] +mov es:[di+192],ax +mov al,ds:[si+216] +mov ah,ds:[si+218] +mov es:[di+194],ax +mov ax,ds:[si+220] +mov es:[di+196],ax +mov al,ds:[si+223] +mov ah,ds:[si+225] +mov es:[di+198],ax +mov al,ds:[si+226] +mov ah,ds:[si+228] +mov es:[di+200],ax +mov ax,ds:[si+230] +mov es:[di+202],ax +mov al,ds:[si+233] +mov ah,ds:[si+235] +mov es:[di+204],ax +mov al,ds:[si+236] +mov ah,ds:[si+238] +mov es:[di+206],ax +add si,cx +mov ax,ds:[si+240] +mov es:[di+208],ax +mov al,ds:[si+243] +mov ah,ds:[si+245] +mov es:[di+210],ax +mov al,ds:[si+246] +mov ah,ds:[si+248] +mov es:[di+212],ax +mov ax,ds:[si+250] +mov es:[di+214],ax +mov al,ds:[si+253] +mov ah,ds:[si+255] +mov es:[di+216],ax +mov al,ds:[si+256] +mov ah,ds:[si+258] +mov es:[di+218],ax +mov ax,ds:[si+260] +mov es:[di+220],ax +mov al,ds:[si+263] +mov ah,ds:[si+265] +mov es:[di+222],ax +mov al,ds:[si+266] +mov ah,ds:[si+268] +mov es:[di+224],ax +mov ax,ds:[si+270] +mov es:[di+226],ax +mov al,ds:[si+273] +mov ah,ds:[si+275] +mov es:[di+228],ax +mov al,ds:[si+276] +mov ah,ds:[si+278] +mov es:[di+230],ax +mov ax,ds:[si+280] +mov es:[di+232],ax +mov al,ds:[si+283] +mov ah,ds:[si+285] +mov es:[di+234],ax +mov al,ds:[si+286] +mov ah,ds:[si+288] +mov es:[di+236],ax +mov ax,ds:[si+290] +mov es:[di+238],ax +mov al,ds:[si+293] +mov ah,ds:[si+295] +mov es:[di+240],ax +mov al,ds:[si+296] +mov ah,ds:[si+298] +mov es:[di+242],ax +mov ax,ds:[si+300] +mov es:[di+244],ax +mov al,ds:[si+303] +mov ah,ds:[si+305] +mov es:[di+246],ax +mov al,ds:[si+306] +mov ah,ds:[si+308] +mov es:[di+248],ax +mov ax,ds:[si+310] +mov es:[di+250],ax +mov al,ds:[si+313] +mov ah,ds:[si+315] +mov es:[di+252],ax +mov al,ds:[si+316] +mov ah,ds:[si+318] +mov es:[di+254],ax +mov es:[di+256],edx +mov es:[di+260],edx +mov es:[di+264],edx +mov es:[di+268],edx +mov es:[di+272],edx +mov es:[di+276],edx +mov es:[di+280],edx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_194: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],edx +mov es:[di+40],edx +mov es:[di+44],edx +mov es:[di+48],edx +mov es:[di+52],edx +mov es:[di+56],edx +mov es:[di+60],dx +mov al,dl +mov ah,ds:[si+0] +mov es:[di+62],ax +mov al,ds:[si+2] +mov ah,ds:[si+4] +mov es:[di+64],ax +mov al,ds:[si+5] +mov ah,ds:[si+7] +mov es:[di+66],ax +mov ax,ds:[si+9] +mov es:[di+68],ax +mov al,ds:[si+12] +mov ah,ds:[si+14] +mov es:[di+70],ax +mov al,ds:[si+15] +mov ah,ds:[si+17] +mov es:[di+72],ax +mov ax,ds:[si+19] +mov es:[di+74],ax +mov al,ds:[si+22] +mov ah,ds:[si+24] +mov es:[di+76],ax +mov al,ds:[si+25] +mov ah,ds:[si+27] +mov es:[di+78],ax +mov ax,ds:[si+29] +mov es:[di+80],ax +mov ax,ds:[si+32] +mov es:[di+82],ax +mov al,ds:[si+35] +mov ah,ds:[si+37] +mov es:[di+84],ax +mov al,ds:[si+38] +mov ah,ds:[si+40] +mov es:[di+86],ax +mov ax,ds:[si+42] +mov es:[di+88],ax +mov al,ds:[si+45] +mov ah,ds:[si+47] +mov es:[di+90],ax +mov al,ds:[si+48] +mov ah,ds:[si+50] +mov es:[di+92],ax +mov ax,ds:[si+52] +mov es:[di+94],ax +mov al,ds:[si+55] +mov ah,ds:[si+57] +mov es:[di+96],ax +mov al,ds:[si+58] +mov ah,ds:[si+60] +mov es:[di+98],ax +mov ax,ds:[si+62] +mov es:[di+100],ax +mov ax,ds:[si+65] +mov es:[di+102],ax +mov al,ds:[si+68] +mov ah,ds:[si+70] +mov es:[di+104],ax +mov al,ds:[si+71] +mov ah,ds:[si+73] +mov es:[di+106],ax +mov ax,ds:[si+75] +mov es:[di+108],ax +mov al,ds:[si+78] +mov ah,ds:[si+80] +mov es:[di+110],ax +add si,cx +mov al,ds:[si+81] +mov ah,ds:[si+83] +mov es:[di+112],ax +mov ax,ds:[si+85] +mov es:[di+114],ax +mov al,ds:[si+88] +mov ah,ds:[si+90] +mov es:[di+116],ax +mov al,ds:[si+91] +mov ah,ds:[si+93] +mov es:[di+118],ax +mov ax,ds:[si+95] +mov es:[di+120],ax +mov ax,ds:[si+98] +mov es:[di+122],ax +mov al,ds:[si+101] +mov ah,ds:[si+103] +mov es:[di+124],ax +mov al,ds:[si+104] +mov ah,ds:[si+106] +mov es:[di+126],ax +mov ax,ds:[si+108] +mov es:[di+128],ax +mov al,ds:[si+111] +mov ah,ds:[si+113] +mov es:[di+130],ax +mov al,ds:[si+114] +mov ah,ds:[si+116] +mov es:[di+132],ax +mov ax,ds:[si+118] +mov es:[di+134],ax +add si,cx +mov al,ds:[si+121] +mov ah,ds:[si+123] +mov es:[di+136],ax +mov al,ds:[si+124] +mov ah,ds:[si+126] +mov es:[di+138],ax +mov ax,ds:[si+128] +mov es:[di+140],ax +mov ax,ds:[si+131] +mov es:[di+142],ax +mov al,ds:[si+134] +mov ah,ds:[si+136] +mov es:[di+144],ax +mov al,ds:[si+137] +mov ah,ds:[si+139] +mov es:[di+146],ax +mov ax,ds:[si+141] +mov es:[di+148],ax +mov al,ds:[si+144] +mov ah,ds:[si+146] +mov es:[di+150],ax +mov al,ds:[si+147] +mov ah,ds:[si+149] +mov es:[di+152],ax +mov ax,ds:[si+151] +mov es:[di+154],ax +mov al,ds:[si+154] +mov ah,ds:[si+156] +mov es:[di+156],ax +mov al,ds:[si+157] +mov ah,ds:[si+159] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+163] +mov es:[di+162],ax +mov al,ds:[si+166] +mov ah,ds:[si+168] +mov es:[di+164],ax +mov al,ds:[si+169] +mov ah,ds:[si+171] +mov es:[di+166],ax +mov ax,ds:[si+173] +mov es:[di+168],ax +mov al,ds:[si+176] +mov ah,ds:[si+178] +mov es:[di+170],ax +mov al,ds:[si+179] +mov ah,ds:[si+181] +mov es:[di+172],ax +mov ax,ds:[si+183] +mov es:[di+174],ax +mov al,ds:[si+186] +mov ah,ds:[si+188] +mov es:[di+176],ax +mov al,ds:[si+189] +mov ah,ds:[si+191] +mov es:[di+178],ax +mov al,ds:[si+192] +mov ah,ds:[si+194] +mov es:[di+180],ax +mov ax,ds:[si+196] +mov es:[di+182],ax +add si,cx +mov al,ds:[si+199] +mov ah,ds:[si+201] +mov es:[di+184],ax +mov al,ds:[si+202] +mov ah,ds:[si+204] +mov es:[di+186],ax +mov ax,ds:[si+206] +mov es:[di+188],ax +mov al,ds:[si+209] +mov ah,ds:[si+211] +mov es:[di+190],ax +mov al,ds:[si+212] +mov ah,ds:[si+214] +mov es:[di+192],ax +mov ax,ds:[si+216] +mov es:[di+194],ax +mov al,ds:[si+219] +mov ah,ds:[si+221] +mov es:[di+196],ax +mov al,ds:[si+222] +mov ah,ds:[si+224] +mov es:[di+198],ax +mov al,ds:[si+225] +mov ah,ds:[si+227] +mov es:[di+200],ax +mov ax,ds:[si+229] +mov es:[di+202],ax +mov al,ds:[si+232] +mov ah,ds:[si+234] +mov es:[di+204],ax +mov al,ds:[si+235] +mov ah,ds:[si+237] +mov es:[di+206],ax +add si,cx +mov ax,ds:[si+239] +mov es:[di+208],ax +mov al,ds:[si+242] +mov ah,ds:[si+244] +mov es:[di+210],ax +mov al,ds:[si+245] +mov ah,ds:[si+247] +mov es:[di+212],ax +mov ax,ds:[si+249] +mov es:[di+214],ax +mov al,ds:[si+252] +mov ah,ds:[si+254] +mov es:[di+216],ax +mov al,ds:[si+255] +mov ah,ds:[si+257] +mov es:[di+218],ax +mov al,ds:[si+258] +mov ah,ds:[si+260] +mov es:[di+220],ax +mov ax,ds:[si+262] +mov es:[di+222],ax +mov al,ds:[si+265] +mov ah,ds:[si+267] +mov es:[di+224],ax +mov al,ds:[si+268] +mov ah,ds:[si+270] +mov es:[di+226],ax +mov ax,ds:[si+272] +mov es:[di+228],ax +mov al,ds:[si+275] +mov ah,ds:[si+277] +mov es:[di+230],ax +mov al,ds:[si+278] +mov ah,ds:[si+280] +mov es:[di+232],ax +mov ax,ds:[si+282] +mov es:[di+234],ax +mov al,ds:[si+285] +mov ah,ds:[si+287] +mov es:[di+236],ax +mov al,ds:[si+288] +mov ah,ds:[si+290] +mov es:[di+238],ax +mov al,ds:[si+291] +mov ah,ds:[si+293] +mov es:[di+240],ax +mov ax,ds:[si+295] +mov es:[di+242],ax +mov al,ds:[si+298] +mov ah,ds:[si+300] +mov es:[di+244],ax +mov al,ds:[si+301] +mov ah,ds:[si+303] +mov es:[di+246],ax +mov ax,ds:[si+305] +mov es:[di+248],ax +mov al,ds:[si+308] +mov ah,ds:[si+310] +mov es:[di+250],ax +mov al,ds:[si+311] +mov ah,ds:[si+313] +mov es:[di+252],ax +mov ax,ds:[si+315] +mov es:[di+254],ax +mov al,ds:[si+318] +mov ah,dl +mov es:[di+256],ax +mov es:[di+258],dx +mov es:[di+260],edx +mov es:[di+264],edx +mov es:[di+268],edx +mov es:[di+272],edx +mov es:[di+276],edx +mov es:[di+280],edx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_200: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],edx +mov es:[di+40],edx +mov es:[di+44],edx +mov es:[di+48],edx +mov es:[di+52],edx +mov es:[di+56],edx +mov al,ds:[si+0] +mov ah,ds:[si+2] +mov es:[di+60],ax +mov ax,ds:[si+4] +mov es:[di+62],ax +mov ax,ds:[si+7] +mov es:[di+64],ax +mov al,ds:[si+10] +mov ah,ds:[si+12] +mov es:[di+66],ax +mov al,ds:[si+13] +mov ah,ds:[si+15] +mov es:[di+68],ax +mov al,ds:[si+16] +mov ah,ds:[si+18] +mov es:[di+70],ax +mov ax,ds:[si+20] +mov es:[di+72],ax +mov ax,ds:[si+23] +mov es:[di+74],ax +mov al,ds:[si+26] +mov ah,ds:[si+28] +mov es:[di+76],ax +mov al,ds:[si+29] +mov ah,ds:[si+31] +mov es:[di+78],ax +mov al,ds:[si+32] +mov ah,ds:[si+34] +mov es:[di+80],ax +mov ax,ds:[si+36] +mov es:[di+82],ax +mov ax,ds:[si+39] +mov es:[di+84],ax +mov al,ds:[si+42] +mov ah,ds:[si+44] +mov es:[di+86],ax +mov al,ds:[si+45] +mov ah,ds:[si+47] +mov es:[di+88],ax +mov al,ds:[si+48] +mov ah,ds:[si+50] +mov es:[di+90],ax +mov ax,ds:[si+52] +mov es:[di+92],ax +mov ax,ds:[si+55] +mov es:[di+94],ax +mov al,ds:[si+58] +mov ah,ds:[si+60] +mov es:[di+96],ax +mov al,ds:[si+61] +mov ah,ds:[si+63] +mov es:[di+98],ax +mov al,ds:[si+64] +mov ah,ds:[si+66] +mov es:[di+100],ax +mov ax,ds:[si+68] +mov es:[di+102],ax +mov ax,ds:[si+71] +mov es:[di+104],ax +mov al,ds:[si+74] +mov ah,ds:[si+76] +mov es:[di+106],ax +add si,cx +mov al,ds:[si+77] +mov ah,ds:[si+79] +mov es:[di+108],ax +mov al,ds:[si+80] +mov ah,ds:[si+82] +mov es:[di+110],ax +mov ax,ds:[si+84] +mov es:[di+112],ax +mov ax,ds:[si+87] +mov es:[di+114],ax +mov al,ds:[si+90] +mov ah,ds:[si+92] +mov es:[di+116],ax +mov al,ds:[si+93] +mov ah,ds:[si+95] +mov es:[di+118],ax +mov al,ds:[si+96] +mov ah,ds:[si+98] +mov es:[di+120],ax +mov ax,ds:[si+100] +mov es:[di+122],ax +mov ax,ds:[si+103] +mov es:[di+124],ax +mov al,ds:[si+106] +mov ah,ds:[si+108] +mov es:[di+126],ax +mov al,ds:[si+109] +mov ah,ds:[si+111] +mov es:[di+128],ax +mov al,ds:[si+112] +mov ah,ds:[si+114] +mov es:[di+130],ax +add si,cx +mov ax,ds:[si+116] +mov es:[di+132],ax +mov ax,ds:[si+119] +mov es:[di+134],ax +mov al,ds:[si+122] +mov ah,ds:[si+124] +mov es:[di+136],ax +mov al,ds:[si+125] +mov ah,ds:[si+127] +mov es:[di+138],ax +mov al,ds:[si+128] +mov ah,ds:[si+130] +mov es:[di+140],ax +mov ax,ds:[si+132] +mov es:[di+142],ax +mov ax,ds:[si+135] +mov es:[di+144],ax +mov al,ds:[si+138] +mov ah,ds:[si+140] +mov es:[di+146],ax +mov al,ds:[si+141] +mov ah,ds:[si+143] +mov es:[di+148],ax +mov al,ds:[si+144] +mov ah,ds:[si+146] +mov es:[di+150],ax +mov ax,ds:[si+148] +mov es:[di+152],ax +mov ax,ds:[si+151] +mov es:[di+154],ax +mov al,ds:[si+154] +mov ah,ds:[si+156] +mov es:[di+156],ax +mov al,ds:[si+157] +mov ah,ds:[si+159] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+163] +mov es:[di+162],ax +mov al,ds:[si+166] +mov ah,ds:[si+168] +mov es:[di+164],ax +mov al,ds:[si+169] +mov ah,ds:[si+171] +mov es:[di+166],ax +mov al,ds:[si+172] +mov ah,ds:[si+174] +mov es:[di+168],ax +mov ax,ds:[si+176] +mov es:[di+170],ax +mov ax,ds:[si+179] +mov es:[di+172],ax +mov al,ds:[si+182] +mov ah,ds:[si+184] +mov es:[di+174],ax +mov al,ds:[si+185] +mov ah,ds:[si+187] +mov es:[di+176],ax +mov al,ds:[si+188] +mov ah,ds:[si+190] +mov es:[di+178],ax +mov ax,ds:[si+192] +mov es:[di+180],ax +mov ax,ds:[si+195] +mov es:[di+182],ax +add si,cx +mov al,ds:[si+198] +mov ah,ds:[si+200] +mov es:[di+184],ax +mov al,ds:[si+201] +mov ah,ds:[si+203] +mov es:[di+186],ax +mov al,ds:[si+204] +mov ah,ds:[si+206] +mov es:[di+188],ax +mov ax,ds:[si+208] +mov es:[di+190],ax +mov ax,ds:[si+211] +mov es:[di+192],ax +mov al,ds:[si+214] +mov ah,ds:[si+216] +mov es:[di+194],ax +mov al,ds:[si+217] +mov ah,ds:[si+219] +mov es:[di+196],ax +mov al,ds:[si+220] +mov ah,ds:[si+222] +mov es:[di+198],ax +mov ax,ds:[si+224] +mov es:[di+200],ax +mov ax,ds:[si+227] +mov es:[di+202],ax +mov al,ds:[si+230] +mov ah,ds:[si+232] +mov es:[di+204],ax +mov al,ds:[si+233] +mov ah,ds:[si+235] +mov es:[di+206],ax +add si,cx +mov al,ds:[si+236] +mov ah,ds:[si+238] +mov es:[di+208],ax +mov ax,ds:[si+240] +mov es:[di+210],ax +mov ax,ds:[si+243] +mov es:[di+212],ax +mov al,ds:[si+246] +mov ah,ds:[si+248] +mov es:[di+214],ax +mov al,ds:[si+249] +mov ah,ds:[si+251] +mov es:[di+216],ax +mov al,ds:[si+252] +mov ah,ds:[si+254] +mov es:[di+218],ax +mov ax,ds:[si+256] +mov es:[di+220],ax +mov ax,ds:[si+259] +mov es:[di+222],ax +mov al,ds:[si+262] +mov ah,ds:[si+264] +mov es:[di+224],ax +mov al,ds:[si+265] +mov ah,ds:[si+267] +mov es:[di+226],ax +mov al,ds:[si+268] +mov ah,ds:[si+270] +mov es:[di+228],ax +mov ax,ds:[si+272] +mov es:[di+230],ax +mov ax,ds:[si+275] +mov es:[di+232],ax +mov al,ds:[si+278] +mov ah,ds:[si+280] +mov es:[di+234],ax +mov al,ds:[si+281] +mov ah,ds:[si+283] +mov es:[di+236],ax +mov al,ds:[si+284] +mov ah,ds:[si+286] +mov es:[di+238],ax +mov ax,ds:[si+288] +mov es:[di+240],ax +mov ax,ds:[si+291] +mov es:[di+242],ax +mov al,ds:[si+294] +mov ah,ds:[si+296] +mov es:[di+244],ax +mov al,ds:[si+297] +mov ah,ds:[si+299] +mov es:[di+246],ax +mov al,ds:[si+300] +mov ah,ds:[si+302] +mov es:[di+248],ax +mov ax,ds:[si+304] +mov es:[di+250],ax +mov ax,ds:[si+307] +mov es:[di+252],ax +mov al,ds:[si+310] +mov ah,ds:[si+312] +mov es:[di+254],ax +mov al,ds:[si+313] +mov ah,ds:[si+315] +mov es:[di+256],ax +mov al,ds:[si+316] +mov ah,ds:[si+318] +mov es:[di+258],ax +mov es:[di+260],edx +mov es:[di+264],edx +mov es:[di+268],edx +mov es:[di+272],edx +mov es:[di+276],edx +mov es:[di+280],edx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_202: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],edx +mov es:[di+40],edx +mov es:[di+44],edx +mov es:[di+48],edx +mov es:[di+52],edx +mov es:[di+56],dx +mov al,dl +mov ah,ds:[si+0] +mov es:[di+58],ax +mov al,ds:[si+2] +mov ah,ds:[si+4] +mov es:[di+60],ax +mov al,ds:[si+5] +mov ah,ds:[si+7] +mov es:[di+62],ax +mov al,ds:[si+8] +mov ah,ds:[si+10] +mov es:[di+64],ax +mov ax,ds:[si+12] +mov es:[di+66],ax +mov ax,ds:[si+15] +mov es:[di+68],ax +mov al,ds:[si+18] +mov ah,ds:[si+20] +mov es:[di+70],ax +mov al,ds:[si+21] +mov ah,ds:[si+23] +mov es:[di+72],ax +mov al,ds:[si+24] +mov ah,ds:[si+26] +mov es:[di+74],ax +mov al,ds:[si+27] +mov ah,ds:[si+29] +mov es:[di+76],ax +mov ax,ds:[si+31] +mov es:[di+78],ax +mov ax,ds:[si+34] +mov es:[di+80],ax +mov al,ds:[si+37] +mov ah,ds:[si+39] +mov es:[di+82],ax +mov al,ds:[si+40] +mov ah,ds:[si+42] +mov es:[di+84],ax +mov al,ds:[si+43] +mov ah,ds:[si+45] +mov es:[di+86],ax +mov al,ds:[si+46] +mov ah,ds:[si+48] +mov es:[di+88],ax +mov ax,ds:[si+50] +mov es:[di+90],ax +mov ax,ds:[si+53] +mov es:[di+92],ax +mov al,ds:[si+56] +mov ah,ds:[si+58] +mov es:[di+94],ax +mov al,ds:[si+59] +mov ah,ds:[si+61] +mov es:[di+96],ax +mov al,ds:[si+62] +mov ah,ds:[si+64] +mov es:[di+98],ax +mov al,ds:[si+65] +mov ah,ds:[si+67] +mov es:[di+100],ax +mov ax,ds:[si+69] +mov es:[di+102],ax +mov ax,ds:[si+72] +mov es:[di+104],ax +mov al,ds:[si+75] +mov ah,ds:[si+77] +mov es:[di+106],ax +add si,cx +mov al,ds:[si+78] +mov ah,ds:[si+80] +mov es:[di+108],ax +mov al,ds:[si+81] +mov ah,ds:[si+83] +mov es:[di+110],ax +mov al,ds:[si+84] +mov ah,ds:[si+86] +mov es:[di+112],ax +mov ax,ds:[si+88] +mov es:[di+114],ax +mov ax,ds:[si+91] +mov es:[di+116],ax +mov al,ds:[si+94] +mov ah,ds:[si+96] +mov es:[di+118],ax +mov al,ds:[si+97] +mov ah,ds:[si+99] +mov es:[di+120],ax +mov al,ds:[si+100] +mov ah,ds:[si+102] +mov es:[di+122],ax +mov al,ds:[si+103] +mov ah,ds:[si+105] +mov es:[di+124],ax +mov ax,ds:[si+107] +mov es:[di+126],ax +mov ax,ds:[si+110] +mov es:[di+128],ax +mov al,ds:[si+113] +mov ah,ds:[si+115] +mov es:[di+130],ax +add si,cx +mov al,ds:[si+116] +mov ah,ds:[si+118] +mov es:[di+132],ax +mov al,ds:[si+119] +mov ah,ds:[si+121] +mov es:[di+134],ax +mov al,ds:[si+122] +mov ah,ds:[si+124] +mov es:[di+136],ax +mov ax,ds:[si+126] +mov es:[di+138],ax +mov ax,ds:[si+129] +mov es:[di+140],ax +mov al,ds:[si+132] +mov ah,ds:[si+134] +mov es:[di+142],ax +mov al,ds:[si+135] +mov ah,ds:[si+137] +mov es:[di+144],ax +mov al,ds:[si+138] +mov ah,ds:[si+140] +mov es:[di+146],ax +mov al,ds:[si+141] +mov ah,ds:[si+143] +mov es:[di+148],ax +mov ax,ds:[si+145] +mov es:[di+150],ax +mov ax,ds:[si+148] +mov es:[di+152],ax +mov al,ds:[si+151] +mov ah,ds:[si+153] +mov es:[di+154],ax +mov al,ds:[si+154] +mov ah,ds:[si+156] +mov es:[di+156],ax +mov al,ds:[si+157] +mov ah,ds:[si+159] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+163] +mov es:[di+162],ax +mov ax,ds:[si+166] +mov es:[di+164],ax +mov al,ds:[si+169] +mov ah,ds:[si+171] +mov es:[di+166],ax +mov al,ds:[si+172] +mov ah,ds:[si+174] +mov es:[di+168],ax +mov al,ds:[si+175] +mov ah,ds:[si+177] +mov es:[di+170],ax +mov ax,ds:[si+179] +mov es:[di+172],ax +mov ax,ds:[si+182] +mov es:[di+174],ax +mov ax,ds:[si+185] +mov es:[di+176],ax +mov al,ds:[si+188] +mov ah,ds:[si+190] +mov es:[di+178],ax +mov al,ds:[si+191] +mov ah,ds:[si+193] +mov es:[di+180],ax +mov al,ds:[si+194] +mov ah,ds:[si+196] +mov es:[di+182],ax +add si,cx +mov ax,ds:[si+198] +mov es:[di+184],ax +mov ax,ds:[si+201] +mov es:[di+186],ax +mov ax,ds:[si+204] +mov es:[di+188],ax +mov al,ds:[si+207] +mov ah,ds:[si+209] +mov es:[di+190],ax +mov al,ds:[si+210] +mov ah,ds:[si+212] +mov es:[di+192],ax +mov al,ds:[si+213] +mov ah,ds:[si+215] +mov es:[di+194],ax +mov ax,ds:[si+217] +mov es:[di+196],ax +mov ax,ds:[si+220] +mov es:[di+198],ax +mov ax,ds:[si+223] +mov es:[di+200],ax +mov al,ds:[si+226] +mov ah,ds:[si+228] +mov es:[di+202],ax +mov al,ds:[si+229] +mov ah,ds:[si+231] +mov es:[di+204],ax +mov al,ds:[si+232] +mov ah,ds:[si+234] +mov es:[di+206],ax +add si,cx +mov ax,ds:[si+236] +mov es:[di+208],ax +mov ax,ds:[si+239] +mov es:[di+210],ax +mov ax,ds:[si+242] +mov es:[di+212],ax +mov al,ds:[si+245] +mov ah,ds:[si+247] +mov es:[di+214],ax +mov al,ds:[si+248] +mov ah,ds:[si+250] +mov es:[di+216],ax +mov al,ds:[si+251] +mov ah,ds:[si+253] +mov es:[di+218],ax +mov ax,ds:[si+255] +mov es:[di+220],ax +mov ax,ds:[si+258] +mov es:[di+222],ax +mov ax,ds:[si+261] +mov es:[di+224],ax +mov al,ds:[si+264] +mov ah,ds:[si+266] +mov es:[di+226],ax +mov al,ds:[si+267] +mov ah,ds:[si+269] +mov es:[di+228],ax +mov al,ds:[si+270] +mov ah,ds:[si+272] +mov es:[di+230],ax +mov ax,ds:[si+274] +mov es:[di+232],ax +mov ax,ds:[si+277] +mov es:[di+234],ax +mov ax,ds:[si+280] +mov es:[di+236],ax +mov al,ds:[si+283] +mov ah,ds:[si+285] +mov es:[di+238],ax +mov al,ds:[si+286] +mov ah,ds:[si+288] +mov es:[di+240],ax +mov al,ds:[si+289] +mov ah,ds:[si+291] +mov es:[di+242],ax +mov ax,ds:[si+293] +mov es:[di+244],ax +mov ax,ds:[si+296] +mov es:[di+246],ax +mov ax,ds:[si+299] +mov es:[di+248],ax +mov al,ds:[si+302] +mov ah,ds:[si+304] +mov es:[di+250],ax +mov al,ds:[si+305] +mov ah,ds:[si+307] +mov es:[di+252],ax +mov al,ds:[si+308] +mov ah,ds:[si+310] +mov es:[di+254],ax +mov ax,ds:[si+312] +mov es:[di+256],ax +mov ax,ds:[si+315] +mov es:[di+258],ax +mov al,ds:[si+318] +mov ah,dl +mov es:[di+260],ax +mov es:[di+262],dx +mov es:[di+264],edx +mov es:[di+268],edx +mov es:[di+272],edx +mov es:[di+276],edx +mov es:[di+280],edx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_208: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],edx +mov es:[di+40],edx +mov es:[di+44],edx +mov es:[di+48],edx +mov es:[di+52],edx +mov al,ds:[si+0] +mov ah,ds:[si+2] +mov es:[di+56],ax +mov ax,ds:[si+4] +mov es:[di+58],ax +mov ax,ds:[si+7] +mov es:[di+60],ax +mov ax,ds:[si+10] +mov es:[di+62],ax +mov ax,ds:[si+13] +mov es:[di+64],ax +mov ax,ds:[si+16] +mov es:[di+66],ax +mov ax,ds:[si+19] +mov es:[di+68],ax +mov al,ds:[si+22] +mov ah,ds:[si+24] +mov es:[di+70],ax +mov al,ds:[si+25] +mov ah,ds:[si+27] +mov es:[di+72],ax +mov al,ds:[si+28] +mov ah,ds:[si+30] +mov es:[di+74],ax +mov al,ds:[si+31] +mov ah,ds:[si+33] +mov es:[di+76],ax +mov al,ds:[si+34] +mov ah,ds:[si+36] +mov es:[di+78],ax +mov al,ds:[si+37] +mov ah,ds:[si+39] +mov es:[di+80],ax +mov al,ds:[si+40] +mov ah,ds:[si+42] +mov es:[di+82],ax +mov ax,ds:[si+44] +mov es:[di+84],ax +mov ax,ds:[si+47] +mov es:[di+86],ax +mov ax,ds:[si+50] +mov es:[di+88],ax +mov ax,ds:[si+53] +mov es:[di+90],ax +mov ax,ds:[si+56] +mov es:[di+92],ax +mov ax,ds:[si+59] +mov es:[di+94],ax +mov al,ds:[si+62] +mov ah,ds:[si+64] +mov es:[di+96],ax +mov al,ds:[si+65] +mov ah,ds:[si+67] +mov es:[di+98],ax +mov al,ds:[si+68] +mov ah,ds:[si+70] +mov es:[di+100],ax +mov al,ds:[si+71] +mov ah,ds:[si+73] +mov es:[di+102],ax +mov al,ds:[si+74] +mov ah,ds:[si+76] +mov es:[di+104],ax +mov al,ds:[si+77] +mov ah,ds:[si+79] +mov es:[di+106],ax +add si,cx +mov al,ds:[si+80] +mov ah,ds:[si+82] +mov es:[di+108],ax +mov ax,ds:[si+84] +mov es:[di+110],ax +mov ax,ds:[si+87] +mov es:[di+112],ax +mov ax,ds:[si+90] +mov es:[di+114],ax +mov ax,ds:[si+93] +mov es:[di+116],ax +mov ax,ds:[si+96] +mov es:[di+118],ax +mov ax,ds:[si+99] +mov es:[di+120],ax +mov al,ds:[si+102] +mov ah,ds:[si+104] +mov es:[di+122],ax +mov al,ds:[si+105] +mov ah,ds:[si+107] +mov es:[di+124],ax +mov al,ds:[si+108] +mov ah,ds:[si+110] +mov es:[di+126],ax +mov al,ds:[si+111] +mov ah,ds:[si+113] +mov es:[di+128],ax +mov al,ds:[si+114] +mov ah,ds:[si+116] +mov es:[di+130],ax +add si,cx +mov al,ds:[si+117] +mov ah,ds:[si+119] +mov es:[di+132],ax +mov al,ds:[si+120] +mov ah,ds:[si+122] +mov es:[di+134],ax +mov ax,ds:[si+124] +mov es:[di+136],ax +mov ax,ds:[si+127] +mov es:[di+138],ax +mov ax,ds:[si+130] +mov es:[di+140],ax +mov ax,ds:[si+133] +mov es:[di+142],ax +mov ax,ds:[si+136] +mov es:[di+144],ax +mov ax,ds:[si+139] +mov es:[di+146],ax +mov al,ds:[si+142] +mov ah,ds:[si+144] +mov es:[di+148],ax +mov al,ds:[si+145] +mov ah,ds:[si+147] +mov es:[di+150],ax +mov al,ds:[si+148] +mov ah,ds:[si+150] +mov es:[di+152],ax +mov al,ds:[si+151] +mov ah,ds:[si+153] +mov es:[di+154],ax +mov al,ds:[si+154] +mov ah,ds:[si+156] +mov es:[di+156],ax +mov al,ds:[si+157] +mov ah,ds:[si+159] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+163] +mov es:[di+162],ax +mov ax,ds:[si+166] +mov es:[di+164],ax +mov ax,ds:[si+169] +mov es:[di+166],ax +mov ax,ds:[si+172] +mov es:[di+168],ax +mov ax,ds:[si+175] +mov es:[di+170],ax +mov al,ds:[si+178] +mov ah,ds:[si+180] +mov es:[di+172],ax +mov al,ds:[si+181] +mov ah,ds:[si+183] +mov es:[di+174],ax +mov al,ds:[si+184] +mov ah,ds:[si+186] +mov es:[di+176],ax +mov al,ds:[si+187] +mov ah,ds:[si+189] +mov es:[di+178],ax +mov al,ds:[si+190] +mov ah,ds:[si+192] +mov es:[di+180],ax +mov al,ds:[si+193] +mov ah,ds:[si+195] +mov es:[di+182],ax +add si,cx +mov al,ds:[si+196] +mov ah,ds:[si+198] +mov es:[di+184],ax +mov ax,ds:[si+200] +mov es:[di+186],ax +mov ax,ds:[si+203] +mov es:[di+188],ax +mov ax,ds:[si+206] +mov es:[di+190],ax +mov ax,ds:[si+209] +mov es:[di+192],ax +mov ax,ds:[si+212] +mov es:[di+194],ax +mov ax,ds:[si+215] +mov es:[di+196],ax +mov al,ds:[si+218] +mov ah,ds:[si+220] +mov es:[di+198],ax +mov al,ds:[si+221] +mov ah,ds:[si+223] +mov es:[di+200],ax +mov al,ds:[si+224] +mov ah,ds:[si+226] +mov es:[di+202],ax +mov al,ds:[si+227] +mov ah,ds:[si+229] +mov es:[di+204],ax +mov al,ds:[si+230] +mov ah,ds:[si+232] +mov es:[di+206],ax +mov al,ds:[si+233] +mov ah,ds:[si+235] +mov es:[di+208],ax +mov al,ds:[si+236] +mov ah,ds:[si+238] +mov es:[di+210],ax +add si,cx +mov ax,ds:[si+240] +mov es:[di+212],ax +mov ax,ds:[si+243] +mov es:[di+214],ax +mov ax,ds:[si+246] +mov es:[di+216],ax +mov ax,ds:[si+249] +mov es:[di+218],ax +mov ax,ds:[si+252] +mov es:[di+220],ax +mov ax,ds:[si+255] +mov es:[di+222],ax +mov al,ds:[si+258] +mov ah,ds:[si+260] +mov es:[di+224],ax +mov al,ds:[si+261] +mov ah,ds:[si+263] +mov es:[di+226],ax +mov al,ds:[si+264] +mov ah,ds:[si+266] +mov es:[di+228],ax +mov al,ds:[si+267] +mov ah,ds:[si+269] +mov es:[di+230],ax +mov al,ds:[si+270] +mov ah,ds:[si+272] +mov es:[di+232],ax +mov al,ds:[si+273] +mov ah,ds:[si+275] +mov es:[di+234],ax +mov al,ds:[si+276] +mov ah,ds:[si+278] +mov es:[di+236],ax +mov ax,ds:[si+280] +mov es:[di+238],ax +mov ax,ds:[si+283] +mov es:[di+240],ax +mov ax,ds:[si+286] +mov es:[di+242],ax +mov ax,ds:[si+289] +mov es:[di+244],ax +mov ax,ds:[si+292] +mov es:[di+246],ax +mov ax,ds:[si+295] +mov es:[di+248],ax +mov al,ds:[si+298] +mov ah,ds:[si+300] +mov es:[di+250],ax +mov al,ds:[si+301] +mov ah,ds:[si+303] +mov es:[di+252],ax +mov al,ds:[si+304] +mov ah,ds:[si+306] +mov es:[di+254],ax +mov al,ds:[si+307] +mov ah,ds:[si+309] +mov es:[di+256],ax +mov al,ds:[si+310] +mov ah,ds:[si+312] +mov es:[di+258],ax +mov al,ds:[si+313] +mov ah,ds:[si+315] +mov es:[di+260],ax +mov al,ds:[si+316] +mov ah,ds:[si+318] +mov es:[di+262],ax +mov es:[di+264],edx +mov es:[di+268],edx +mov es:[di+272],edx +mov es:[di+276],edx +mov es:[di+280],edx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_210: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],edx +mov es:[di+40],edx +mov es:[di+44],edx +mov es:[di+48],edx +mov es:[di+52],dx +mov al,dl +mov ah,ds:[si+0] +mov es:[di+54],ax +mov al,ds:[si+2] +mov ah,ds:[si+4] +mov es:[di+56],ax +mov al,ds:[si+5] +mov ah,ds:[si+7] +mov es:[di+58],ax +mov al,ds:[si+8] +mov ah,ds:[si+10] +mov es:[di+60],ax +mov al,ds:[si+11] +mov ah,ds:[si+13] +mov es:[di+62],ax +mov al,ds:[si+14] +mov ah,ds:[si+16] +mov es:[di+64],ax +mov al,ds:[si+17] +mov ah,ds:[si+19] +mov es:[di+66],ax +mov al,ds:[si+20] +mov ah,ds:[si+22] +mov es:[di+68],ax +mov al,ds:[si+23] +mov ah,ds:[si+25] +mov es:[di+70],ax +mov al,ds:[si+26] +mov ah,ds:[si+28] +mov es:[di+72],ax +mov al,ds:[si+29] +mov ah,ds:[si+31] +mov es:[di+74],ax +mov al,ds:[si+32] +mov ah,ds:[si+34] +mov es:[di+76],ax +mov ax,ds:[si+36] +mov es:[di+78],ax +mov ax,ds:[si+39] +mov es:[di+80],ax +mov ax,ds:[si+42] +mov es:[di+82],ax +mov ax,ds:[si+45] +mov es:[di+84],ax +mov ax,ds:[si+48] +mov es:[di+86],ax +mov ax,ds:[si+51] +mov es:[di+88],ax +mov ax,ds:[si+54] +mov es:[di+90],ax +mov ax,ds:[si+57] +mov es:[di+92],ax +mov ax,ds:[si+60] +mov es:[di+94],ax +mov ax,ds:[si+63] +mov es:[di+96],ax +mov al,ds:[si+66] +mov ah,ds:[si+68] +mov es:[di+98],ax +mov al,ds:[si+69] +mov ah,ds:[si+71] +mov es:[di+100],ax +mov al,ds:[si+72] +mov ah,ds:[si+74] +mov es:[di+102],ax +mov al,ds:[si+75] +mov ah,ds:[si+77] +mov es:[di+104],ax +mov al,ds:[si+78] +mov ah,ds:[si+80] +mov es:[di+106],ax +add si,cx +mov al,ds:[si+81] +mov ah,ds:[si+83] +mov es:[di+108],ax +mov al,ds:[si+84] +mov ah,ds:[si+86] +mov es:[di+110],ax +mov al,ds:[si+87] +mov ah,ds:[si+89] +mov es:[di+112],ax +mov al,ds:[si+90] +mov ah,ds:[si+92] +mov es:[di+114],ax +mov al,ds:[si+93] +mov ah,ds:[si+95] +mov es:[di+116],ax +mov al,ds:[si+96] +mov ah,ds:[si+98] +mov es:[di+118],ax +mov ax,ds:[si+100] +mov es:[di+120],ax +mov ax,ds:[si+103] +mov es:[di+122],ax +mov ax,ds:[si+106] +mov es:[di+124],ax +mov ax,ds:[si+109] +mov es:[di+126],ax +mov ax,ds:[si+112] +mov es:[di+128],ax +mov ax,ds:[si+115] +mov es:[di+130],ax +add si,cx +mov ax,ds:[si+118] +mov es:[di+132],ax +mov ax,ds:[si+121] +mov es:[di+134],ax +mov ax,ds:[si+124] +mov es:[di+136],ax +mov ax,ds:[si+127] +mov es:[di+138],ax +mov al,ds:[si+130] +mov ah,ds:[si+132] +mov es:[di+140],ax +mov al,ds:[si+133] +mov ah,ds:[si+135] +mov es:[di+142],ax +mov al,ds:[si+136] +mov ah,ds:[si+138] +mov es:[di+144],ax +mov al,ds:[si+139] +mov ah,ds:[si+141] +mov es:[di+146],ax +mov al,ds:[si+142] +mov ah,ds:[si+144] +mov es:[di+148],ax +mov al,ds:[si+145] +mov ah,ds:[si+147] +mov es:[di+150],ax +mov al,ds:[si+148] +mov ah,ds:[si+150] +mov es:[di+152],ax +mov al,ds:[si+151] +mov ah,ds:[si+153] +mov es:[di+154],ax +mov al,ds:[si+154] +mov ah,ds:[si+156] +mov es:[di+156],ax +mov al,ds:[si+157] +mov ah,ds:[si+159] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+163] +mov es:[di+162],ax +mov ax,ds:[si+166] +mov es:[di+164],ax +mov ax,ds:[si+169] +mov es:[di+166],ax +mov ax,ds:[si+172] +mov es:[di+168],ax +mov ax,ds:[si+175] +mov es:[di+170],ax +mov ax,ds:[si+178] +mov es:[di+172],ax +mov ax,ds:[si+181] +mov es:[di+174],ax +mov ax,ds:[si+184] +mov es:[di+176],ax +mov ax,ds:[si+187] +mov es:[di+178],ax +mov al,ds:[si+190] +mov ah,ds:[si+192] +mov es:[di+180],ax +mov al,ds:[si+193] +mov ah,ds:[si+195] +mov es:[di+182],ax +add si,cx +mov al,ds:[si+196] +mov ah,ds:[si+198] +mov es:[di+184],ax +mov al,ds:[si+199] +mov ah,ds:[si+201] +mov es:[di+186],ax +mov al,ds:[si+202] +mov ah,ds:[si+204] +mov es:[di+188],ax +mov al,ds:[si+205] +mov ah,ds:[si+207] +mov es:[di+190],ax +mov al,ds:[si+208] +mov ah,ds:[si+210] +mov es:[di+192],ax +mov al,ds:[si+211] +mov ah,ds:[si+213] +mov es:[di+194],ax +mov al,ds:[si+214] +mov ah,ds:[si+216] +mov es:[di+196],ax +mov al,ds:[si+217] +mov ah,ds:[si+219] +mov es:[di+198],ax +mov al,ds:[si+220] +mov ah,ds:[si+222] +mov es:[di+200],ax +mov ax,ds:[si+224] +mov es:[di+202],ax +mov ax,ds:[si+227] +mov es:[di+204],ax +mov ax,ds:[si+230] +mov es:[di+206],ax +mov ax,ds:[si+233] +mov es:[di+208],ax +mov ax,ds:[si+236] +mov es:[di+210],ax +add si,cx +mov ax,ds:[si+239] +mov es:[di+212],ax +mov ax,ds:[si+242] +mov es:[di+214],ax +mov ax,ds:[si+245] +mov es:[di+216],ax +mov ax,ds:[si+248] +mov es:[di+218],ax +mov ax,ds:[si+251] +mov es:[di+220],ax +mov al,ds:[si+254] +mov ah,ds:[si+256] +mov es:[di+222],ax +mov al,ds:[si+257] +mov ah,ds:[si+259] +mov es:[di+224],ax +mov al,ds:[si+260] +mov ah,ds:[si+262] +mov es:[di+226],ax +mov al,ds:[si+263] +mov ah,ds:[si+265] +mov es:[di+228],ax +mov al,ds:[si+266] +mov ah,ds:[si+268] +mov es:[di+230],ax +mov al,ds:[si+269] +mov ah,ds:[si+271] +mov es:[di+232],ax +mov al,ds:[si+272] +mov ah,ds:[si+274] +mov es:[di+234],ax +mov al,ds:[si+275] +mov ah,ds:[si+277] +mov es:[di+236],ax +mov al,ds:[si+278] +mov ah,ds:[si+280] +mov es:[di+238],ax +mov al,ds:[si+281] +mov ah,ds:[si+283] +mov es:[di+240],ax +mov al,ds:[si+284] +mov ah,ds:[si+286] +mov es:[di+242],ax +mov ax,ds:[si+288] +mov es:[di+244],ax +mov ax,ds:[si+291] +mov es:[di+246],ax +mov ax,ds:[si+294] +mov es:[di+248],ax +mov ax,ds:[si+297] +mov es:[di+250],ax +mov ax,ds:[si+300] +mov es:[di+252],ax +mov ax,ds:[si+303] +mov es:[di+254],ax +mov ax,ds:[si+306] +mov es:[di+256],ax +mov ax,ds:[si+309] +mov es:[di+258],ax +mov ax,ds:[si+312] +mov es:[di+260],ax +mov ax,ds:[si+315] +mov es:[di+262],ax +mov al,ds:[si+318] +mov ah,dl +mov es:[di+264],ax +mov es:[di+266],dx +mov es:[di+268],edx +mov es:[di+272],edx +mov es:[di+276],edx +mov es:[di+280],edx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_216: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],edx +mov es:[di+40],edx +mov es:[di+44],edx +mov es:[di+48],edx +mov al,ds:[si+0] +mov ah,ds:[si+2] +mov es:[di+52],ax +mov al,ds:[si+3] +mov ah,ds:[si+5] +mov es:[di+54],ax +mov al,ds:[si+6] +mov ah,ds:[si+8] +mov es:[di+56],ax +mov al,ds:[si+9] +mov ah,ds:[si+11] +mov es:[di+58],ax +mov al,ds:[si+12] +mov ah,ds:[si+14] +mov es:[di+60],ax +mov al,ds:[si+15] +mov ah,ds:[si+17] +mov es:[di+62],ax +mov al,ds:[si+18] +mov ah,ds:[si+20] +mov es:[di+64],ax +mov al,ds:[si+21] +mov ah,ds:[si+23] +mov es:[di+66],ax +mov al,ds:[si+24] +mov ah,ds:[si+26] +mov es:[di+68],ax +mov al,ds:[si+27] +mov ah,ds:[si+29] +mov es:[di+70],ax +mov al,ds:[si+30] +mov ah,ds:[si+32] +mov es:[di+72],ax +mov al,ds:[si+33] +mov ah,ds:[si+35] +mov es:[di+74],ax +mov al,ds:[si+36] +mov ah,ds:[si+38] +mov es:[di+76],ax +mov ax,ds:[si+39] +mov es:[di+78],ax +mov ax,ds:[si+42] +mov es:[di+80],ax +mov ax,ds:[si+45] +mov es:[di+82],ax +mov ax,ds:[si+48] +mov es:[di+84],ax +mov ax,ds:[si+51] +mov es:[di+86],ax +mov ax,ds:[si+54] +mov es:[di+88],ax +mov ax,ds:[si+57] +mov es:[di+90],ax +mov ax,ds:[si+60] +mov es:[di+92],ax +mov ax,ds:[si+63] +mov es:[di+94],ax +mov ax,ds:[si+66] +mov es:[di+96],ax +mov ax,ds:[si+69] +mov es:[di+98],ax +mov ax,ds:[si+72] +mov es:[di+100],ax +mov ax,ds:[si+75] +mov es:[di+102],ax +add si,cx +mov ax,ds:[si+78] +mov es:[di+104],ax +mov al,ds:[si+80] +mov ah,ds:[si+82] +mov es:[di+106],ax +mov al,ds:[si+83] +mov ah,ds:[si+85] +mov es:[di+108],ax +mov al,ds:[si+86] +mov ah,ds:[si+88] +mov es:[di+110],ax +mov al,ds:[si+89] +mov ah,ds:[si+91] +mov es:[di+112],ax +mov al,ds:[si+92] +mov ah,ds:[si+94] +mov es:[di+114],ax +mov al,ds:[si+95] +mov ah,ds:[si+97] +mov es:[di+116],ax +mov al,ds:[si+98] +mov ah,ds:[si+100] +mov es:[di+118],ax +mov al,ds:[si+101] +mov ah,ds:[si+103] +mov es:[di+120],ax +mov al,ds:[si+104] +mov ah,ds:[si+106] +mov es:[di+122],ax +mov al,ds:[si+107] +mov ah,ds:[si+109] +mov es:[di+124],ax +mov al,ds:[si+110] +mov ah,ds:[si+112] +mov es:[di+126],ax +mov al,ds:[si+113] +mov ah,ds:[si+115] +mov es:[di+128],ax +mov al,ds:[si+116] +mov ah,ds:[si+118] +mov es:[di+130],ax +add si,cx +mov ax,ds:[si+119] +mov es:[di+132],ax +mov ax,ds:[si+122] +mov es:[di+134],ax +mov ax,ds:[si+125] +mov es:[di+136],ax +mov ax,ds:[si+128] +mov es:[di+138],ax +mov ax,ds:[si+131] +mov es:[di+140],ax +mov ax,ds:[si+134] +mov es:[di+142],ax +mov ax,ds:[si+137] +mov es:[di+144],ax +mov ax,ds:[si+140] +mov es:[di+146],ax +mov ax,ds:[si+143] +mov es:[di+148],ax +mov ax,ds:[si+146] +mov es:[di+150],ax +mov ax,ds:[si+149] +mov es:[di+152],ax +mov ax,ds:[si+152] +mov es:[di+154],ax +mov ax,ds:[si+155] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov al,ds:[si+162] +mov ah,ds:[si+164] +mov es:[di+162],ax +mov al,ds:[si+165] +mov ah,ds:[si+167] +mov es:[di+164],ax +mov al,ds:[si+168] +mov ah,ds:[si+170] +mov es:[di+166],ax +mov al,ds:[si+171] +mov ah,ds:[si+173] +mov es:[di+168],ax +mov al,ds:[si+174] +mov ah,ds:[si+176] +mov es:[di+170],ax +mov al,ds:[si+177] +mov ah,ds:[si+179] +mov es:[di+172],ax +mov al,ds:[si+180] +mov ah,ds:[si+182] +mov es:[di+174],ax +mov al,ds:[si+183] +mov ah,ds:[si+185] +mov es:[di+176],ax +mov al,ds:[si+186] +mov ah,ds:[si+188] +mov es:[di+178],ax +mov al,ds:[si+189] +mov ah,ds:[si+191] +mov es:[di+180],ax +mov al,ds:[si+192] +mov ah,ds:[si+194] +mov es:[di+182],ax +add si,cx +mov al,ds:[si+195] +mov ah,ds:[si+197] +mov es:[di+184],ax +mov al,ds:[si+198] +mov ah,ds:[si+200] +mov es:[di+186],ax +mov ax,ds:[si+201] +mov es:[di+188],ax +mov ax,ds:[si+204] +mov es:[di+190],ax +mov ax,ds:[si+207] +mov es:[di+192],ax +mov ax,ds:[si+210] +mov es:[di+194],ax +mov ax,ds:[si+213] +mov es:[di+196],ax +mov ax,ds:[si+216] +mov es:[di+198],ax +mov ax,ds:[si+219] +mov es:[di+200],ax +mov ax,ds:[si+222] +mov es:[di+202],ax +mov ax,ds:[si+225] +mov es:[di+204],ax +mov ax,ds:[si+228] +mov es:[di+206],ax +mov ax,ds:[si+231] +mov es:[di+208],ax +mov ax,ds:[si+234] +mov es:[di+210],ax +add si,cx +mov ax,ds:[si+237] +mov es:[di+212],ax +mov ax,ds:[si+240] +mov es:[di+214],ax +mov al,ds:[si+242] +mov ah,ds:[si+244] +mov es:[di+216],ax +mov al,ds:[si+245] +mov ah,ds:[si+247] +mov es:[di+218],ax +mov al,ds:[si+248] +mov ah,ds:[si+250] +mov es:[di+220],ax +mov al,ds:[si+251] +mov ah,ds:[si+253] +mov es:[di+222],ax +mov al,ds:[si+254] +mov ah,ds:[si+256] +mov es:[di+224],ax +mov al,ds:[si+257] +mov ah,ds:[si+259] +mov es:[di+226],ax +mov al,ds:[si+260] +mov ah,ds:[si+262] +mov es:[di+228],ax +mov al,ds:[si+263] +mov ah,ds:[si+265] +mov es:[di+230],ax +mov al,ds:[si+266] +mov ah,ds:[si+268] +mov es:[di+232],ax +mov al,ds:[si+269] +mov ah,ds:[si+271] +mov es:[di+234],ax +mov al,ds:[si+272] +mov ah,ds:[si+274] +mov es:[di+236],ax +mov al,ds:[si+275] +mov ah,ds:[si+277] +mov es:[di+238],ax +mov al,ds:[si+278] +mov ah,ds:[si+280] +mov es:[di+240],ax +mov ax,ds:[si+281] +mov es:[di+242],ax +mov ax,ds:[si+284] +mov es:[di+244],ax +mov ax,ds:[si+287] +mov es:[di+246],ax +mov ax,ds:[si+290] +mov es:[di+248],ax +mov ax,ds:[si+293] +mov es:[di+250],ax +mov ax,ds:[si+296] +mov es:[di+252],ax +mov ax,ds:[si+299] +mov es:[di+254],ax +mov ax,ds:[si+302] +mov es:[di+256],ax +mov ax,ds:[si+305] +mov es:[di+258],ax +mov ax,ds:[si+308] +mov es:[di+260],ax +mov ax,ds:[si+311] +mov es:[di+262],ax +mov ax,ds:[si+314] +mov es:[di+264],ax +mov ax,ds:[si+317] +mov es:[di+266],ax +mov es:[di+268],edx +mov es:[di+272],edx +mov es:[di+276],edx +mov es:[di+280],edx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_218: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],edx +mov es:[di+40],edx +mov es:[di+44],edx +mov es:[di+48],dx +mov al,dl +mov ah,ds:[si+0] +mov es:[di+50],ax +mov ax,ds:[si+2] +mov es:[di+52],ax +mov ax,ds:[si+5] +mov es:[di+54],ax +mov ax,ds:[si+8] +mov es:[di+56],ax +mov ax,ds:[si+11] +mov es:[di+58],ax +mov ax,ds:[si+14] +mov es:[di+60],ax +mov ax,ds:[si+17] +mov es:[di+62],ax +mov ax,ds:[si+20] +mov es:[di+64],ax +mov ax,ds:[si+23] +mov es:[di+66],ax +mov al,ds:[si+25] +mov ah,ds:[si+27] +mov es:[di+68],ax +mov al,ds:[si+28] +mov ah,ds:[si+30] +mov es:[di+70],ax +mov al,ds:[si+31] +mov ah,ds:[si+33] +mov es:[di+72],ax +mov al,ds:[si+34] +mov ah,ds:[si+36] +mov es:[di+74],ax +mov al,ds:[si+37] +mov ah,ds:[si+39] +mov es:[di+76],ax +mov al,ds:[si+40] +mov ah,ds:[si+42] +mov es:[di+78],ax +mov al,ds:[si+43] +mov ah,ds:[si+45] +mov es:[di+80],ax +mov ax,ds:[si+46] +mov es:[di+82],ax +mov ax,ds:[si+49] +mov es:[di+84],ax +mov ax,ds:[si+52] +mov es:[di+86],ax +mov ax,ds:[si+55] +mov es:[di+88],ax +mov ax,ds:[si+58] +mov es:[di+90],ax +mov ax,ds:[si+61] +mov es:[di+92],ax +mov ax,ds:[si+64] +mov es:[di+94],ax +mov ax,ds:[si+67] +mov es:[di+96],ax +mov al,ds:[si+69] +mov ah,ds:[si+71] +mov es:[di+98],ax +mov al,ds:[si+72] +mov ah,ds:[si+74] +mov es:[di+100],ax +mov al,ds:[si+75] +mov ah,ds:[si+77] +mov es:[di+102],ax +add si,cx +mov al,ds:[si+78] +mov ah,ds:[si+80] +mov es:[di+104],ax +mov al,ds:[si+81] +mov ah,ds:[si+83] +mov es:[di+106],ax +mov al,ds:[si+84] +mov ah,ds:[si+86] +mov es:[di+108],ax +mov al,ds:[si+87] +mov ah,ds:[si+89] +mov es:[di+110],ax +mov al,ds:[si+90] +mov ah,ds:[si+92] +mov es:[di+112],ax +mov ax,ds:[si+93] +mov es:[di+114],ax +mov ax,ds:[si+96] +mov es:[di+116],ax +mov ax,ds:[si+99] +mov es:[di+118],ax +mov ax,ds:[si+102] +mov es:[di+120],ax +mov ax,ds:[si+105] +mov es:[di+122],ax +mov ax,ds:[si+108] +mov es:[di+124],ax +mov ax,ds:[si+111] +mov es:[di+126],ax +mov ax,ds:[si+114] +mov es:[di+128],ax +mov al,ds:[si+116] +mov ah,ds:[si+118] +mov es:[di+130],ax +add si,cx +mov al,ds:[si+119] +mov ah,ds:[si+121] +mov es:[di+132],ax +mov al,ds:[si+122] +mov ah,ds:[si+124] +mov es:[di+134],ax +mov al,ds:[si+125] +mov ah,ds:[si+127] +mov es:[di+136],ax +mov al,ds:[si+128] +mov ah,ds:[si+130] +mov es:[di+138],ax +mov al,ds:[si+131] +mov ah,ds:[si+133] +mov es:[di+140],ax +mov al,ds:[si+134] +mov ah,ds:[si+136] +mov es:[di+142],ax +mov ax,ds:[si+137] +mov es:[di+144],ax +mov ax,ds:[si+140] +mov es:[di+146],ax +mov ax,ds:[si+143] +mov es:[di+148],ax +mov ax,ds:[si+146] +mov es:[di+150],ax +mov ax,ds:[si+149] +mov es:[di+152],ax +mov ax,ds:[si+152] +mov es:[di+154],ax +mov ax,ds:[si+155] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov al,ds:[si+162] +mov ah,ds:[si+164] +mov es:[di+162],ax +mov al,ds:[si+165] +mov ah,ds:[si+167] +mov es:[di+164],ax +mov al,ds:[si+168] +mov ah,ds:[si+170] +mov es:[di+166],ax +mov al,ds:[si+171] +mov ah,ds:[si+173] +mov es:[di+168],ax +mov al,ds:[si+174] +mov ah,ds:[si+176] +mov es:[di+170],ax +mov al,ds:[si+177] +mov ah,ds:[si+179] +mov es:[di+172],ax +mov al,ds:[si+180] +mov ah,ds:[si+182] +mov es:[di+174],ax +mov ax,ds:[si+183] +mov es:[di+176],ax +mov ax,ds:[si+186] +mov es:[di+178],ax +mov ax,ds:[si+189] +mov es:[di+180],ax +mov ax,ds:[si+192] +mov es:[di+182],ax +add si,cx +mov ax,ds:[si+195] +mov es:[di+184],ax +mov ax,ds:[si+198] +mov es:[di+186],ax +mov ax,ds:[si+201] +mov es:[di+188],ax +mov ax,ds:[si+204] +mov es:[di+190],ax +mov al,ds:[si+206] +mov ah,ds:[si+208] +mov es:[di+192],ax +mov al,ds:[si+209] +mov ah,ds:[si+211] +mov es:[di+194],ax +mov al,ds:[si+212] +mov ah,ds:[si+214] +mov es:[di+196],ax +mov al,ds:[si+215] +mov ah,ds:[si+217] +mov es:[di+198],ax +mov al,ds:[si+218] +mov ah,ds:[si+220] +mov es:[di+200],ax +mov al,ds:[si+221] +mov ah,ds:[si+223] +mov es:[di+202],ax +mov al,ds:[si+224] +mov ah,ds:[si+226] +mov es:[di+204],ax +mov ax,ds:[si+227] +mov es:[di+206],ax +mov ax,ds:[si+230] +mov es:[di+208],ax +mov ax,ds:[si+233] +mov es:[di+210],ax +add si,cx +mov ax,ds:[si+236] +mov es:[di+212],ax +mov ax,ds:[si+239] +mov es:[di+214],ax +mov ax,ds:[si+242] +mov es:[di+216],ax +mov ax,ds:[si+245] +mov es:[di+218],ax +mov ax,ds:[si+248] +mov es:[di+220],ax +mov ax,ds:[si+251] +mov es:[di+222],ax +mov al,ds:[si+253] +mov ah,ds:[si+255] +mov es:[di+224],ax +mov al,ds:[si+256] +mov ah,ds:[si+258] +mov es:[di+226],ax +mov al,ds:[si+259] +mov ah,ds:[si+261] +mov es:[di+228],ax +mov al,ds:[si+262] +mov ah,ds:[si+264] +mov es:[di+230],ax +mov al,ds:[si+265] +mov ah,ds:[si+267] +mov es:[di+232],ax +mov al,ds:[si+268] +mov ah,ds:[si+270] +mov es:[di+234],ax +mov al,ds:[si+271] +mov ah,ds:[si+273] +mov es:[di+236],ax +mov ax,ds:[si+274] +mov es:[di+238],ax +mov ax,ds:[si+277] +mov es:[di+240],ax +mov ax,ds:[si+280] +mov es:[di+242],ax +mov ax,ds:[si+283] +mov es:[di+244],ax +mov ax,ds:[si+286] +mov es:[di+246],ax +mov ax,ds:[si+289] +mov es:[di+248],ax +mov ax,ds:[si+292] +mov es:[di+250],ax +mov ax,ds:[si+295] +mov es:[di+252],ax +mov al,ds:[si+297] +mov ah,ds:[si+299] +mov es:[di+254],ax +mov al,ds:[si+300] +mov ah,ds:[si+302] +mov es:[di+256],ax +mov al,ds:[si+303] +mov ah,ds:[si+305] +mov es:[di+258],ax +mov al,ds:[si+306] +mov ah,ds:[si+308] +mov es:[di+260],ax +mov al,ds:[si+309] +mov ah,ds:[si+311] +mov es:[di+262],ax +mov al,ds:[si+312] +mov ah,ds:[si+314] +mov es:[di+264],ax +mov al,ds:[si+315] +mov ah,ds:[si+317] +mov es:[di+266],ax +mov al,ds:[si+318] +mov ah,dl +mov es:[di+268],ax +mov es:[di+270],dx +mov es:[di+272],edx +mov es:[di+276],edx +mov es:[di+280],edx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_224: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],edx +mov es:[di+40],edx +mov es:[di+44],edx +mov al,ds:[si+0] +mov ah,ds:[si+2] +mov es:[di+48],ax +mov al,ds:[si+3] +mov ah,ds:[si+5] +mov es:[di+50],ax +mov al,ds:[si+6] +mov ah,ds:[si+8] +mov es:[di+52],ax +mov ax,ds:[si+9] +mov es:[di+54],ax +mov ax,ds:[si+12] +mov es:[di+56],ax +mov ax,ds:[si+15] +mov es:[di+58],ax +mov ax,ds:[si+18] +mov es:[di+60],ax +mov al,ds:[si+20] +mov ah,ds:[si+22] +mov es:[di+62],ax +mov al,ds:[si+23] +mov ah,ds:[si+25] +mov es:[di+64],ax +mov al,ds:[si+26] +mov ah,ds:[si+28] +mov es:[di+66],ax +mov ax,ds:[si+29] +mov es:[di+68],ax +mov ax,ds:[si+32] +mov es:[di+70],ax +mov ax,ds:[si+35] +mov es:[di+72],ax +mov ax,ds:[si+38] +mov es:[di+74],ax +mov al,ds:[si+40] +mov ah,ds:[si+42] +mov es:[di+76],ax +mov al,ds:[si+43] +mov ah,ds:[si+45] +mov es:[di+78],ax +mov al,ds:[si+46] +mov ah,ds:[si+48] +mov es:[di+80],ax +mov ax,ds:[si+49] +mov es:[di+82],ax +mov ax,ds:[si+52] +mov es:[di+84],ax +mov ax,ds:[si+55] +mov es:[di+86],ax +mov ax,ds:[si+58] +mov es:[di+88],ax +mov al,ds:[si+60] +mov ah,ds:[si+62] +mov es:[di+90],ax +mov al,ds:[si+63] +mov ah,ds:[si+65] +mov es:[di+92],ax +mov al,ds:[si+66] +mov ah,ds:[si+68] +mov es:[di+94],ax +mov ax,ds:[si+69] +mov es:[di+96],ax +mov ax,ds:[si+72] +mov es:[di+98],ax +mov ax,ds:[si+75] +mov es:[di+100],ax +mov ax,ds:[si+78] +mov es:[di+102],ax +add si,cx +mov al,ds:[si+80] +mov ah,ds:[si+82] +mov es:[di+104],ax +mov al,ds:[si+83] +mov ah,ds:[si+85] +mov es:[di+106],ax +mov al,ds:[si+86] +mov ah,ds:[si+88] +mov es:[di+108],ax +mov ax,ds:[si+89] +mov es:[di+110],ax +mov ax,ds:[si+92] +mov es:[di+112],ax +mov ax,ds:[si+95] +mov es:[di+114],ax +mov ax,ds:[si+98] +mov es:[di+116],ax +mov al,ds:[si+100] +mov ah,ds:[si+102] +mov es:[di+118],ax +mov al,ds:[si+103] +mov ah,ds:[si+105] +mov es:[di+120],ax +mov al,ds:[si+106] +mov ah,ds:[si+108] +mov es:[di+122],ax +mov ax,ds:[si+109] +mov es:[di+124],ax +mov ax,ds:[si+112] +mov es:[di+126],ax +mov ax,ds:[si+115] +mov es:[di+128],ax +mov ax,ds:[si+118] +mov es:[di+130],ax +add si,cx +mov al,ds:[si+120] +mov ah,ds:[si+122] +mov es:[di+132],ax +mov al,ds:[si+123] +mov ah,ds:[si+125] +mov es:[di+134],ax +mov al,ds:[si+126] +mov ah,ds:[si+128] +mov es:[di+136],ax +mov ax,ds:[si+129] +mov es:[di+138],ax +mov ax,ds:[si+132] +mov es:[di+140],ax +mov ax,ds:[si+135] +mov es:[di+142],ax +mov ax,ds:[si+138] +mov es:[di+144],ax +mov al,ds:[si+140] +mov ah,ds:[si+142] +mov es:[di+146],ax +mov al,ds:[si+143] +mov ah,ds:[si+145] +mov es:[di+148],ax +mov al,ds:[si+146] +mov ah,ds:[si+148] +mov es:[di+150],ax +mov ax,ds:[si+149] +mov es:[di+152],ax +mov ax,ds:[si+152] +mov es:[di+154],ax +mov ax,ds:[si+155] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov al,ds:[si+162] +mov ah,ds:[si+164] +mov es:[di+162],ax +mov al,ds:[si+165] +mov ah,ds:[si+167] +mov es:[di+164],ax +mov al,ds:[si+168] +mov ah,ds:[si+170] +mov es:[di+166],ax +mov ax,ds:[si+171] +mov es:[di+168],ax +mov ax,ds:[si+174] +mov es:[di+170],ax +mov ax,ds:[si+177] +mov es:[di+172],ax +mov ax,ds:[si+180] +mov es:[di+174],ax +mov al,ds:[si+182] +mov ah,ds:[si+184] +mov es:[di+176],ax +mov al,ds:[si+185] +mov ah,ds:[si+187] +mov es:[di+178],ax +mov al,ds:[si+188] +mov ah,ds:[si+190] +mov es:[di+180],ax +mov ax,ds:[si+191] +mov es:[di+182],ax +mov ax,ds:[si+194] +mov es:[di+184],ax +mov ax,ds:[si+197] +mov es:[di+186],ax +add si,cx +mov ax,ds:[si+200] +mov es:[di+188],ax +mov al,ds:[si+202] +mov ah,ds:[si+204] +mov es:[di+190],ax +mov al,ds:[si+205] +mov ah,ds:[si+207] +mov es:[di+192],ax +mov al,ds:[si+208] +mov ah,ds:[si+210] +mov es:[di+194],ax +mov ax,ds:[si+211] +mov es:[di+196],ax +mov ax,ds:[si+214] +mov es:[di+198],ax +mov ax,ds:[si+217] +mov es:[di+200],ax +mov ax,ds:[si+220] +mov es:[di+202],ax +mov al,ds:[si+222] +mov ah,ds:[si+224] +mov es:[di+204],ax +mov al,ds:[si+225] +mov ah,ds:[si+227] +mov es:[di+206],ax +mov al,ds:[si+228] +mov ah,ds:[si+230] +mov es:[di+208],ax +mov ax,ds:[si+231] +mov es:[di+210],ax +mov ax,ds:[si+234] +mov es:[di+212],ax +mov ax,ds:[si+237] +mov es:[di+214],ax +add si,cx +mov ax,ds:[si+240] +mov es:[di+216],ax +mov al,ds:[si+242] +mov ah,ds:[si+244] +mov es:[di+218],ax +mov al,ds:[si+245] +mov ah,ds:[si+247] +mov es:[di+220],ax +mov al,ds:[si+248] +mov ah,ds:[si+250] +mov es:[di+222],ax +mov ax,ds:[si+251] +mov es:[di+224],ax +mov ax,ds:[si+254] +mov es:[di+226],ax +mov ax,ds:[si+257] +mov es:[di+228],ax +mov ax,ds:[si+260] +mov es:[di+230],ax +mov al,ds:[si+262] +mov ah,ds:[si+264] +mov es:[di+232],ax +mov al,ds:[si+265] +mov ah,ds:[si+267] +mov es:[di+234],ax +mov al,ds:[si+268] +mov ah,ds:[si+270] +mov es:[di+236],ax +mov ax,ds:[si+271] +mov es:[di+238],ax +mov ax,ds:[si+274] +mov es:[di+240],ax +mov ax,ds:[si+277] +mov es:[di+242],ax +mov ax,ds:[si+280] +mov es:[di+244],ax +mov al,ds:[si+282] +mov ah,ds:[si+284] +mov es:[di+246],ax +mov al,ds:[si+285] +mov ah,ds:[si+287] +mov es:[di+248],ax +mov al,ds:[si+288] +mov ah,ds:[si+290] +mov es:[di+250],ax +mov ax,ds:[si+291] +mov es:[di+252],ax +mov ax,ds:[si+294] +mov es:[di+254],ax +mov ax,ds:[si+297] +mov es:[di+256],ax +mov ax,ds:[si+300] +mov es:[di+258],ax +mov al,ds:[si+302] +mov ah,ds:[si+304] +mov es:[di+260],ax +mov al,ds:[si+305] +mov ah,ds:[si+307] +mov es:[di+262],ax +mov al,ds:[si+308] +mov ah,ds:[si+310] +mov es:[di+264],ax +mov ax,ds:[si+311] +mov es:[di+266],ax +mov ax,ds:[si+314] +mov es:[di+268],ax +mov ax,ds:[si+317] +mov es:[di+270],ax +mov es:[di+272],edx +mov es:[di+276],edx +mov es:[di+280],edx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_226: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],edx +mov es:[di+40],edx +mov es:[di+44],dx +mov al,dl +mov ah,ds:[si+0] +mov es:[di+46],ax +mov ax,ds:[si+2] +mov es:[di+48],ax +mov ax,ds:[si+5] +mov es:[di+50],ax +mov ax,ds:[si+8] +mov es:[di+52],ax +mov al,ds:[si+10] +mov ah,ds:[si+12] +mov es:[di+54],ax +mov al,ds:[si+13] +mov ah,ds:[si+15] +mov es:[di+56],ax +mov ax,ds:[si+16] +mov es:[di+58],ax +mov ax,ds:[si+19] +mov es:[di+60],ax +mov ax,ds:[si+22] +mov es:[di+62],ax +mov ax,ds:[si+25] +mov es:[di+64],ax +mov al,ds:[si+27] +mov ah,ds:[si+29] +mov es:[di+66],ax +mov al,ds:[si+30] +mov ah,ds:[si+32] +mov es:[di+68],ax +mov ax,ds:[si+33] +mov es:[di+70],ax +mov ax,ds:[si+36] +mov es:[di+72],ax +mov ax,ds:[si+39] +mov es:[di+74],ax +mov ax,ds:[si+42] +mov es:[di+76],ax +mov al,ds:[si+44] +mov ah,ds:[si+46] +mov es:[di+78],ax +mov al,ds:[si+47] +mov ah,ds:[si+49] +mov es:[di+80],ax +mov ax,ds:[si+50] +mov es:[di+82],ax +mov ax,ds:[si+53] +mov es:[di+84],ax +mov ax,ds:[si+56] +mov es:[di+86],ax +mov ax,ds:[si+59] +mov es:[di+88],ax +mov al,ds:[si+61] +mov ah,ds:[si+63] +mov es:[di+90],ax +mov al,ds:[si+64] +mov ah,ds:[si+66] +mov es:[di+92],ax +mov ax,ds:[si+67] +mov es:[di+94],ax +mov ax,ds:[si+70] +mov es:[di+96],ax +mov ax,ds:[si+73] +mov es:[di+98],ax +mov ax,ds:[si+76] +mov es:[di+100],ax +mov al,ds:[si+78] +mov ah,ds:[si+80] +mov es:[di+102],ax +add si,cx +mov al,ds:[si+81] +mov ah,ds:[si+83] +mov es:[di+104],ax +mov ax,ds:[si+84] +mov es:[di+106],ax +mov ax,ds:[si+87] +mov es:[di+108],ax +mov ax,ds:[si+90] +mov es:[di+110],ax +mov ax,ds:[si+93] +mov es:[di+112],ax +mov al,ds:[si+95] +mov ah,ds:[si+97] +mov es:[di+114],ax +mov al,ds:[si+98] +mov ah,ds:[si+100] +mov es:[di+116],ax +mov ax,ds:[si+101] +mov es:[di+118],ax +mov ax,ds:[si+104] +mov es:[di+120],ax +mov ax,ds:[si+107] +mov es:[di+122],ax +mov ax,ds:[si+110] +mov es:[di+124],ax +mov al,ds:[si+112] +mov ah,ds:[si+114] +mov es:[di+126],ax +mov al,ds:[si+115] +mov ah,ds:[si+117] +mov es:[di+128],ax +mov ax,ds:[si+118] +mov es:[di+130],ax +add si,cx +mov ax,ds:[si+121] +mov es:[di+132],ax +mov ax,ds:[si+124] +mov es:[di+134],ax +mov ax,ds:[si+127] +mov es:[di+136],ax +mov al,ds:[si+129] +mov ah,ds:[si+131] +mov es:[di+138],ax +mov al,ds:[si+132] +mov ah,ds:[si+134] +mov es:[di+140],ax +mov ax,ds:[si+135] +mov es:[di+142],ax +mov ax,ds:[si+138] +mov es:[di+144],ax +mov ax,ds:[si+141] +mov es:[di+146],ax +mov ax,ds:[si+144] +mov es:[di+148],ax +mov al,ds:[si+146] +mov ah,ds:[si+148] +mov es:[di+150],ax +mov al,ds:[si+149] +mov ah,ds:[si+151] +mov es:[di+152],ax +mov ax,ds:[si+152] +mov es:[di+154],ax +mov ax,ds:[si+155] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov al,ds:[si+162] +mov ah,ds:[si+164] +mov es:[di+162],ax +mov al,ds:[si+165] +mov ah,ds:[si+167] +mov es:[di+164],ax +mov ax,ds:[si+168] +mov es:[di+166],ax +mov ax,ds:[si+171] +mov es:[di+168],ax +mov ax,ds:[si+174] +mov es:[di+170],ax +mov al,ds:[si+176] +mov ah,ds:[si+178] +mov es:[di+172],ax +mov al,ds:[si+179] +mov ah,ds:[si+181] +mov es:[di+174],ax +mov al,ds:[si+182] +mov ah,ds:[si+184] +mov es:[di+176],ax +mov ax,ds:[si+185] +mov es:[di+178],ax +mov ax,ds:[si+188] +mov es:[di+180],ax +mov ax,ds:[si+191] +mov es:[di+182],ax +mov al,ds:[si+193] +mov ah,ds:[si+195] +mov es:[di+184],ax +mov al,ds:[si+196] +mov ah,ds:[si+198] +mov es:[di+186],ax +add si,cx +mov al,ds:[si+199] +mov ah,ds:[si+201] +mov es:[di+188],ax +mov ax,ds:[si+202] +mov es:[di+190],ax +mov ax,ds:[si+205] +mov es:[di+192],ax +mov ax,ds:[si+208] +mov es:[di+194],ax +mov al,ds:[si+210] +mov ah,ds:[si+212] +mov es:[di+196],ax +mov al,ds:[si+213] +mov ah,ds:[si+215] +mov es:[di+198],ax +mov al,ds:[si+216] +mov ah,ds:[si+218] +mov es:[di+200],ax +mov ax,ds:[si+219] +mov es:[di+202],ax +mov ax,ds:[si+222] +mov es:[di+204],ax +mov ax,ds:[si+225] +mov es:[di+206],ax +mov al,ds:[si+227] +mov ah,ds:[si+229] +mov es:[di+208],ax +mov al,ds:[si+230] +mov ah,ds:[si+232] +mov es:[di+210],ax +mov al,ds:[si+233] +mov ah,ds:[si+235] +mov es:[di+212],ax +mov ax,ds:[si+236] +mov es:[di+214],ax +add si,cx +mov ax,ds:[si+239] +mov es:[di+216],ax +mov ax,ds:[si+242] +mov es:[di+218],ax +mov al,ds:[si+244] +mov ah,ds:[si+246] +mov es:[di+220],ax +mov al,ds:[si+247] +mov ah,ds:[si+249] +mov es:[di+222],ax +mov al,ds:[si+250] +mov ah,ds:[si+252] +mov es:[di+224],ax +mov ax,ds:[si+253] +mov es:[di+226],ax +mov ax,ds:[si+256] +mov es:[di+228],ax +mov ax,ds:[si+259] +mov es:[di+230],ax +mov al,ds:[si+261] +mov ah,ds:[si+263] +mov es:[di+232],ax +mov al,ds:[si+264] +mov ah,ds:[si+266] +mov es:[di+234],ax +mov al,ds:[si+267] +mov ah,ds:[si+269] +mov es:[di+236],ax +mov ax,ds:[si+270] +mov es:[di+238],ax +mov ax,ds:[si+273] +mov es:[di+240],ax +mov ax,ds:[si+276] +mov es:[di+242],ax +mov al,ds:[si+278] +mov ah,ds:[si+280] +mov es:[di+244],ax +mov al,ds:[si+281] +mov ah,ds:[si+283] +mov es:[di+246],ax +mov al,ds:[si+284] +mov ah,ds:[si+286] +mov es:[di+248],ax +mov ax,ds:[si+287] +mov es:[di+250],ax +mov ax,ds:[si+290] +mov es:[di+252],ax +mov ax,ds:[si+293] +mov es:[di+254],ax +mov al,ds:[si+295] +mov ah,ds:[si+297] +mov es:[di+256],ax +mov al,ds:[si+298] +mov ah,ds:[si+300] +mov es:[di+258],ax +mov al,ds:[si+301] +mov ah,ds:[si+303] +mov es:[di+260],ax +mov ax,ds:[si+304] +mov es:[di+262],ax +mov ax,ds:[si+307] +mov es:[di+264],ax +mov ax,ds:[si+310] +mov es:[di+266],ax +mov al,ds:[si+312] +mov ah,ds:[si+314] +mov es:[di+268],ax +mov al,ds:[si+315] +mov ah,ds:[si+317] +mov es:[di+270],ax +mov al,ds:[si+318] +mov ah,dl +mov es:[di+272],ax +mov es:[di+274],dx +mov es:[di+276],edx +mov es:[di+280],edx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_232: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],edx +mov es:[di+40],edx +mov al,ds:[si+0] +mov ah,ds:[si+2] +mov es:[di+44],ax +mov al,ds:[si+3] +mov ah,ds:[si+5] +mov es:[di+46],ax +mov ax,ds:[si+6] +mov es:[di+48],ax +mov ax,ds:[si+9] +mov es:[di+50],ax +mov ax,ds:[si+12] +mov es:[di+52],ax +mov al,ds:[si+14] +mov ah,ds:[si+16] +mov es:[di+54],ax +mov ax,ds:[si+17] +mov es:[di+56],ax +mov ax,ds:[si+20] +mov es:[di+58],ax +mov ax,ds:[si+23] +mov es:[di+60],ax +mov al,ds:[si+25] +mov ah,ds:[si+27] +mov es:[di+62],ax +mov ax,ds:[si+28] +mov es:[di+64],ax +mov ax,ds:[si+31] +mov es:[di+66],ax +mov ax,ds:[si+34] +mov es:[di+68],ax +mov al,ds:[si+36] +mov ah,ds:[si+38] +mov es:[di+70],ax +mov ax,ds:[si+39] +mov es:[di+72],ax +mov ax,ds:[si+42] +mov es:[di+74],ax +mov ax,ds:[si+45] +mov es:[di+76],ax +mov al,ds:[si+47] +mov ah,ds:[si+49] +mov es:[di+78],ax +mov al,ds:[si+50] +mov ah,ds:[si+52] +mov es:[di+80],ax +mov ax,ds:[si+53] +mov es:[di+82],ax +mov ax,ds:[si+56] +mov es:[di+84],ax +mov al,ds:[si+58] +mov ah,ds:[si+60] +mov es:[di+86],ax +mov al,ds:[si+61] +mov ah,ds:[si+63] +mov es:[di+88],ax +mov ax,ds:[si+64] +mov es:[di+90],ax +mov ax,ds:[si+67] +mov es:[di+92],ax +mov al,ds:[si+69] +mov ah,ds:[si+71] +mov es:[di+94],ax +mov al,ds:[si+72] +mov ah,ds:[si+74] +mov es:[di+96],ax +mov ax,ds:[si+75] +mov es:[di+98],ax +add si,cx +mov ax,ds:[si+78] +mov es:[di+100],ax +mov al,ds:[si+80] +mov ah,ds:[si+82] +mov es:[di+102],ax +mov al,ds:[si+83] +mov ah,ds:[si+85] +mov es:[di+104],ax +mov ax,ds:[si+86] +mov es:[di+106],ax +mov ax,ds:[si+89] +mov es:[di+108],ax +mov ax,ds:[si+92] +mov es:[di+110],ax +mov al,ds:[si+94] +mov ah,ds:[si+96] +mov es:[di+112],ax +mov ax,ds:[si+97] +mov es:[di+114],ax +mov ax,ds:[si+100] +mov es:[di+116],ax +mov ax,ds:[si+103] +mov es:[di+118],ax +mov al,ds:[si+105] +mov ah,ds:[si+107] +mov es:[di+120],ax +mov ax,ds:[si+108] +mov es:[di+122],ax +mov ax,ds:[si+111] +mov es:[di+124],ax +mov ax,ds:[si+114] +mov es:[di+126],ax +add si,cx +mov al,ds:[si+116] +mov ah,ds:[si+118] +mov es:[di+128],ax +mov ax,ds:[si+119] +mov es:[di+130],ax +mov ax,ds:[si+122] +mov es:[di+132],ax +mov ax,ds:[si+125] +mov es:[di+134],ax +mov al,ds:[si+127] +mov ah,ds:[si+129] +mov es:[di+136],ax +mov al,ds:[si+130] +mov ah,ds:[si+132] +mov es:[di+138],ax +mov ax,ds:[si+133] +mov es:[di+140],ax +mov ax,ds:[si+136] +mov es:[di+142],ax +mov al,ds:[si+138] +mov ah,ds:[si+140] +mov es:[di+144],ax +mov al,ds:[si+141] +mov ah,ds:[si+143] +mov es:[di+146],ax +mov ax,ds:[si+144] +mov es:[di+148],ax +mov ax,ds:[si+147] +mov es:[di+150],ax +mov al,ds:[si+149] +mov ah,ds:[si+151] +mov es:[di+152],ax +mov al,ds:[si+152] +mov ah,ds:[si+154] +mov es:[di+154],ax +mov ax,ds:[si+155] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov al,ds:[si+162] +mov ah,ds:[si+164] +mov es:[di+162],ax +mov ax,ds:[si+165] +mov es:[di+164],ax +mov ax,ds:[si+168] +mov es:[di+166],ax +mov ax,ds:[si+171] +mov es:[di+168],ax +mov al,ds:[si+173] +mov ah,ds:[si+175] +mov es:[di+170],ax +mov ax,ds:[si+176] +mov es:[di+172],ax +mov ax,ds:[si+179] +mov es:[di+174],ax +mov ax,ds:[si+182] +mov es:[di+176],ax +mov al,ds:[si+184] +mov ah,ds:[si+186] +mov es:[di+178],ax +mov ax,ds:[si+187] +mov es:[di+180],ax +mov ax,ds:[si+190] +mov es:[di+182],ax +mov ax,ds:[si+193] +mov es:[di+184],ax +mov al,ds:[si+195] +mov ah,ds:[si+197] +mov es:[di+186],ax +add si,cx +mov al,ds:[si+198] +mov ah,ds:[si+200] +mov es:[di+188],ax +mov ax,ds:[si+201] +mov es:[di+190],ax +mov ax,ds:[si+204] +mov es:[di+192],ax +mov al,ds:[si+206] +mov ah,ds:[si+208] +mov es:[di+194],ax +mov al,ds:[si+209] +mov ah,ds:[si+211] +mov es:[di+196],ax +mov ax,ds:[si+212] +mov es:[di+198],ax +mov ax,ds:[si+215] +mov es:[di+200],ax +mov al,ds:[si+217] +mov ah,ds:[si+219] +mov es:[di+202],ax +mov al,ds:[si+220] +mov ah,ds:[si+222] +mov es:[di+204],ax +mov ax,ds:[si+223] +mov es:[di+206],ax +mov ax,ds:[si+226] +mov es:[di+208],ax +mov al,ds:[si+228] +mov ah,ds:[si+230] +mov es:[di+210],ax +mov al,ds:[si+231] +mov ah,ds:[si+233] +mov es:[di+212],ax +mov ax,ds:[si+234] +mov es:[di+214],ax +add si,cx +mov ax,ds:[si+237] +mov es:[di+216],ax +mov ax,ds:[si+240] +mov es:[di+218],ax +mov al,ds:[si+242] +mov ah,ds:[si+244] +mov es:[di+220],ax +mov ax,ds:[si+245] +mov es:[di+222],ax +mov ax,ds:[si+248] +mov es:[di+224],ax +mov ax,ds:[si+251] +mov es:[di+226],ax +mov al,ds:[si+253] +mov ah,ds:[si+255] +mov es:[di+228],ax +mov ax,ds:[si+256] +mov es:[di+230],ax +mov ax,ds:[si+259] +mov es:[di+232],ax +mov ax,ds:[si+262] +mov es:[di+234],ax +mov al,ds:[si+264] +mov ah,ds:[si+266] +mov es:[di+236],ax +mov ax,ds:[si+267] +mov es:[di+238],ax +mov ax,ds:[si+270] +mov es:[di+240],ax +mov ax,ds:[si+273] +mov es:[di+242],ax +mov al,ds:[si+275] +mov ah,ds:[si+277] +mov es:[di+244],ax +mov al,ds:[si+278] +mov ah,ds:[si+280] +mov es:[di+246],ax +mov ax,ds:[si+281] +mov es:[di+248],ax +mov ax,ds:[si+284] +mov es:[di+250],ax +mov al,ds:[si+286] +mov ah,ds:[si+288] +mov es:[di+252],ax +mov al,ds:[si+289] +mov ah,ds:[si+291] +mov es:[di+254],ax +mov ax,ds:[si+292] +mov es:[di+256],ax +mov ax,ds:[si+295] +mov es:[di+258],ax +mov al,ds:[si+297] +mov ah,ds:[si+299] +mov es:[di+260],ax +mov al,ds:[si+300] +mov ah,ds:[si+302] +mov es:[di+262],ax +mov ax,ds:[si+303] +mov es:[di+264],ax +mov ax,ds:[si+306] +mov es:[di+266],ax +mov al,ds:[si+308] +mov ah,ds:[si+310] +mov es:[di+268],ax +mov al,ds:[si+311] +mov ah,ds:[si+313] +mov es:[di+270],ax +mov ax,ds:[si+314] +mov es:[di+272],ax +mov ax,ds:[si+317] +mov es:[di+274],ax +mov es:[di+276],edx +mov es:[di+280],edx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_234: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],edx +mov es:[di+40],dx +mov al,dl +mov ah,ds:[si+0] +mov es:[di+42],ax +mov ax,ds:[si+2] +mov es:[di+44],ax +mov ax,ds:[si+5] +mov es:[di+46],ax +mov al,ds:[si+7] +mov ah,ds:[si+9] +mov es:[di+48],ax +mov ax,ds:[si+10] +mov es:[di+50],ax +mov ax,ds:[si+13] +mov es:[di+52],ax +mov ax,ds:[si+16] +mov es:[di+54],ax +mov al,ds:[si+18] +mov ah,ds:[si+20] +mov es:[di+56],ax +mov ax,ds:[si+21] +mov es:[di+58],ax +mov ax,ds:[si+24] +mov es:[di+60],ax +mov al,ds:[si+26] +mov ah,ds:[si+28] +mov es:[di+62],ax +mov al,ds:[si+29] +mov ah,ds:[si+31] +mov es:[di+64],ax +mov ax,ds:[si+32] +mov es:[di+66],ax +mov ax,ds:[si+35] +mov es:[di+68],ax +mov al,ds:[si+37] +mov ah,ds:[si+39] +mov es:[di+70],ax +mov al,ds:[si+40] +mov ah,ds:[si+42] +mov es:[di+72],ax +mov ax,ds:[si+43] +mov es:[di+74],ax +mov ax,ds:[si+46] +mov es:[di+76],ax +mov al,ds:[si+48] +mov ah,ds:[si+50] +mov es:[di+78],ax +mov ax,ds:[si+51] +mov es:[di+80],ax +mov ax,ds:[si+54] +mov es:[di+82],ax +mov ax,ds:[si+57] +mov es:[di+84],ax +mov al,ds:[si+59] +mov ah,ds:[si+61] +mov es:[di+86],ax +mov ax,ds:[si+62] +mov es:[di+88],ax +mov ax,ds:[si+65] +mov es:[di+90],ax +mov ax,ds:[si+68] +mov es:[di+92],ax +mov al,ds:[si+70] +mov ah,ds:[si+72] +mov es:[di+94],ax +mov ax,ds:[si+73] +mov es:[di+96],ax +mov ax,ds:[si+76] +mov es:[di+98],ax +add si,cx +mov al,ds:[si+78] +mov ah,ds:[si+80] +mov es:[di+100],ax +mov al,ds:[si+81] +mov ah,ds:[si+83] +mov es:[di+102],ax +mov ax,ds:[si+84] +mov es:[di+104],ax +mov ax,ds:[si+87] +mov es:[di+106],ax +mov al,ds:[si+89] +mov ah,ds:[si+91] +mov es:[di+108],ax +mov ax,ds:[si+92] +mov es:[di+110],ax +mov ax,ds:[si+95] +mov es:[di+112],ax +mov ax,ds:[si+98] +mov es:[di+114],ax +mov al,ds:[si+100] +mov ah,ds:[si+102] +mov es:[di+116],ax +mov ax,ds:[si+103] +mov es:[di+118],ax +mov ax,ds:[si+106] +mov es:[di+120],ax +mov ax,ds:[si+109] +mov es:[di+122],ax +mov al,ds:[si+111] +mov ah,ds:[si+113] +mov es:[di+124],ax +mov ax,ds:[si+114] +mov es:[di+126],ax +add si,cx +mov ax,ds:[si+117] +mov es:[di+128],ax +mov al,ds:[si+119] +mov ah,ds:[si+121] +mov es:[di+130],ax +mov al,ds:[si+122] +mov ah,ds:[si+124] +mov es:[di+132],ax +mov ax,ds:[si+125] +mov es:[di+134],ax +mov ax,ds:[si+128] +mov es:[di+136],ax +mov al,ds:[si+130] +mov ah,ds:[si+132] +mov es:[di+138],ax +mov al,ds:[si+133] +mov ah,ds:[si+135] +mov es:[di+140],ax +mov ax,ds:[si+136] +mov es:[di+142],ax +mov ax,ds:[si+139] +mov es:[di+144],ax +mov al,ds:[si+141] +mov ah,ds:[si+143] +mov es:[di+146],ax +mov ax,ds:[si+144] +mov es:[di+148],ax +mov ax,ds:[si+147] +mov es:[di+150],ax +mov ax,ds:[si+150] +mov es:[di+152],ax +mov al,ds:[si+152] +mov ah,ds:[si+154] +mov es:[di+154],ax +mov ax,ds:[si+155] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov al,ds:[si+162] +mov ah,ds:[si+164] +mov es:[di+162],ax +mov ax,ds:[si+165] +mov es:[di+164],ax +mov ax,ds:[si+168] +mov es:[di+166],ax +mov al,ds:[si+170] +mov ah,ds:[si+172] +mov es:[di+168],ax +mov al,ds:[si+173] +mov ah,ds:[si+175] +mov es:[di+170],ax +mov ax,ds:[si+176] +mov es:[di+172],ax +mov ax,ds:[si+179] +mov es:[di+174],ax +mov al,ds:[si+181] +mov ah,ds:[si+183] +mov es:[di+176],ax +mov ax,ds:[si+184] +mov es:[di+178],ax +mov ax,ds:[si+187] +mov es:[di+180],ax +mov ax,ds:[si+190] +mov es:[di+182],ax +mov al,ds:[si+192] +mov ah,ds:[si+194] +mov es:[di+184],ax +mov ax,ds:[si+195] +mov es:[di+186],ax +add si,cx +mov ax,ds:[si+198] +mov es:[di+188],ax +mov ax,ds:[si+201] +mov es:[di+190],ax +mov al,ds:[si+203] +mov ah,ds:[si+205] +mov es:[di+192],ax +mov ax,ds:[si+206] +mov es:[di+194],ax +mov ax,ds:[si+209] +mov es:[di+196],ax +mov al,ds:[si+211] +mov ah,ds:[si+213] +mov es:[di+198],ax +mov al,ds:[si+214] +mov ah,ds:[si+216] +mov es:[di+200],ax +mov ax,ds:[si+217] +mov es:[di+202],ax +mov ax,ds:[si+220] +mov es:[di+204],ax +mov al,ds:[si+222] +mov ah,ds:[si+224] +mov es:[di+206],ax +mov al,ds:[si+225] +mov ah,ds:[si+227] +mov es:[di+208],ax +mov ax,ds:[si+228] +mov es:[di+210],ax +mov ax,ds:[si+231] +mov es:[di+212],ax +mov al,ds:[si+233] +mov ah,ds:[si+235] +mov es:[di+214],ax +add si,cx +mov ax,ds:[si+236] +mov es:[di+216],ax +mov ax,ds:[si+239] +mov es:[di+218],ax +mov ax,ds:[si+242] +mov es:[di+220],ax +mov al,ds:[si+244] +mov ah,ds:[si+246] +mov es:[di+222],ax +mov ax,ds:[si+247] +mov es:[di+224],ax +mov ax,ds:[si+250] +mov es:[di+226],ax +mov al,ds:[si+252] +mov ah,ds:[si+254] +mov es:[di+228],ax +mov al,ds:[si+255] +mov ah,ds:[si+257] +mov es:[di+230],ax +mov ax,ds:[si+258] +mov es:[di+232],ax +mov ax,ds:[si+261] +mov es:[di+234],ax +mov al,ds:[si+263] +mov ah,ds:[si+265] +mov es:[di+236],ax +mov al,ds:[si+266] +mov ah,ds:[si+268] +mov es:[di+238],ax +mov ax,ds:[si+269] +mov es:[di+240],ax +mov ax,ds:[si+272] +mov es:[di+242],ax +mov al,ds:[si+274] +mov ah,ds:[si+276] +mov es:[di+244],ax +mov ax,ds:[si+277] +mov es:[di+246],ax +mov ax,ds:[si+280] +mov es:[di+248],ax +mov ax,ds:[si+283] +mov es:[di+250],ax +mov al,ds:[si+285] +mov ah,ds:[si+287] +mov es:[di+252],ax +mov ax,ds:[si+288] +mov es:[di+254],ax +mov ax,ds:[si+291] +mov es:[di+256],ax +mov ax,ds:[si+294] +mov es:[di+258],ax +mov al,ds:[si+296] +mov ah,ds:[si+298] +mov es:[di+260],ax +mov ax,ds:[si+299] +mov es:[di+262],ax +mov ax,ds:[si+302] +mov es:[di+264],ax +mov al,ds:[si+304] +mov ah,ds:[si+306] +mov es:[di+266],ax +mov al,ds:[si+307] +mov ah,ds:[si+309] +mov es:[di+268],ax +mov ax,ds:[si+310] +mov es:[di+270],ax +mov ax,ds:[si+313] +mov es:[di+272],ax +mov al,ds:[si+315] +mov ah,ds:[si+317] +mov es:[di+274],ax +mov al,ds:[si+318] +mov ah,dl +mov es:[di+276],ax +mov es:[di+278],dx +mov es:[di+280],edx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_240: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],edx +mov al,ds:[si+0] +mov ah,ds:[si+2] +mov es:[di+40],ax +mov ax,ds:[si+3] +mov es:[di+42],ax +mov ax,ds:[si+6] +mov es:[di+44],ax +mov al,ds:[si+8] +mov ah,ds:[si+10] +mov es:[di+46],ax +mov ax,ds:[si+11] +mov es:[di+48],ax +mov ax,ds:[si+14] +mov es:[di+50],ax +mov al,ds:[si+16] +mov ah,ds:[si+18] +mov es:[di+52],ax +mov ax,ds:[si+19] +mov es:[di+54],ax +mov ax,ds:[si+22] +mov es:[di+56],ax +mov al,ds:[si+24] +mov ah,ds:[si+26] +mov es:[di+58],ax +mov ax,ds:[si+27] +mov es:[di+60],ax +mov ax,ds:[si+30] +mov es:[di+62],ax +mov al,ds:[si+32] +mov ah,ds:[si+34] +mov es:[di+64],ax +mov ax,ds:[si+35] +mov es:[di+66],ax +mov ax,ds:[si+38] +mov es:[di+68],ax +mov al,ds:[si+40] +mov ah,ds:[si+42] +mov es:[di+70],ax +mov ax,ds:[si+43] +mov es:[di+72],ax +mov ax,ds:[si+46] +mov es:[di+74],ax +mov al,ds:[si+48] +mov ah,ds:[si+50] +mov es:[di+76],ax +mov ax,ds:[si+51] +mov es:[di+78],ax +mov ax,ds:[si+54] +mov es:[di+80],ax +mov al,ds:[si+56] +mov ah,ds:[si+58] +mov es:[di+82],ax +mov ax,ds:[si+59] +mov es:[di+84],ax +mov ax,ds:[si+62] +mov es:[di+86],ax +mov al,ds:[si+64] +mov ah,ds:[si+66] +mov es:[di+88],ax +mov ax,ds:[si+67] +mov es:[di+90],ax +mov ax,ds:[si+70] +mov es:[di+92],ax +mov al,ds:[si+72] +mov ah,ds:[si+74] +mov es:[di+94],ax +mov ax,ds:[si+75] +mov es:[di+96],ax +mov ax,ds:[si+78] +mov es:[di+98],ax +add si,cx +mov al,ds:[si+80] +mov ah,ds:[si+82] +mov es:[di+100],ax +mov ax,ds:[si+83] +mov es:[di+102],ax +mov ax,ds:[si+86] +mov es:[di+104],ax +mov al,ds:[si+88] +mov ah,ds:[si+90] +mov es:[di+106],ax +mov ax,ds:[si+91] +mov es:[di+108],ax +mov ax,ds:[si+94] +mov es:[di+110],ax +mov al,ds:[si+96] +mov ah,ds:[si+98] +mov es:[di+112],ax +mov ax,ds:[si+99] +mov es:[di+114],ax +mov ax,ds:[si+102] +mov es:[di+116],ax +mov al,ds:[si+104] +mov ah,ds:[si+106] +mov es:[di+118],ax +mov ax,ds:[si+107] +mov es:[di+120],ax +mov ax,ds:[si+110] +mov es:[di+122],ax +mov al,ds:[si+112] +mov ah,ds:[si+114] +mov es:[di+124],ax +mov ax,ds:[si+115] +mov es:[di+126],ax +add si,cx +mov ax,ds:[si+118] +mov es:[di+128],ax +mov al,ds:[si+120] +mov ah,ds:[si+122] +mov es:[di+130],ax +mov ax,ds:[si+123] +mov es:[di+132],ax +mov ax,ds:[si+126] +mov es:[di+134],ax +mov al,ds:[si+128] +mov ah,ds:[si+130] +mov es:[di+136],ax +mov ax,ds:[si+131] +mov es:[di+138],ax +mov ax,ds:[si+134] +mov es:[di+140],ax +mov al,ds:[si+136] +mov ah,ds:[si+138] +mov es:[di+142],ax +mov ax,ds:[si+139] +mov es:[di+144],ax +mov ax,ds:[si+142] +mov es:[di+146],ax +mov al,ds:[si+144] +mov ah,ds:[si+146] +mov es:[di+148],ax +mov ax,ds:[si+147] +mov es:[di+150],ax +mov ax,ds:[si+150] +mov es:[di+152],ax +mov al,ds:[si+152] +mov ah,ds:[si+154] +mov es:[di+154],ax +mov ax,ds:[si+155] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov al,ds:[si+162] +mov ah,ds:[si+164] +mov es:[di+162],ax +mov ax,ds:[si+165] +mov es:[di+164],ax +mov ax,ds:[si+168] +mov es:[di+166],ax +mov al,ds:[si+170] +mov ah,ds:[si+172] +mov es:[di+168],ax +mov ax,ds:[si+173] +mov es:[di+170],ax +mov ax,ds:[si+176] +mov es:[di+172],ax +mov al,ds:[si+178] +mov ah,ds:[si+180] +mov es:[di+174],ax +mov ax,ds:[si+181] +mov es:[di+176],ax +mov ax,ds:[si+184] +mov es:[di+178],ax +mov al,ds:[si+186] +mov ah,ds:[si+188] +mov es:[di+180],ax +mov ax,ds:[si+189] +mov es:[di+182],ax +mov ax,ds:[si+192] +mov es:[di+184],ax +mov al,ds:[si+194] +mov ah,ds:[si+196] +mov es:[di+186],ax +add si,cx +mov ax,ds:[si+197] +mov es:[di+188],ax +mov ax,ds:[si+200] +mov es:[di+190],ax +mov al,ds:[si+202] +mov ah,ds:[si+204] +mov es:[di+192],ax +mov ax,ds:[si+205] +mov es:[di+194],ax +mov ax,ds:[si+208] +mov es:[di+196],ax +mov al,ds:[si+210] +mov ah,ds:[si+212] +mov es:[di+198],ax +mov ax,ds:[si+213] +mov es:[di+200],ax +mov ax,ds:[si+216] +mov es:[di+202],ax +mov al,ds:[si+218] +mov ah,ds:[si+220] +mov es:[di+204],ax +mov ax,ds:[si+221] +mov es:[di+206],ax +mov ax,ds:[si+224] +mov es:[di+208],ax +mov al,ds:[si+226] +mov ah,ds:[si+228] +mov es:[di+210],ax +mov ax,ds:[si+229] +mov es:[di+212],ax +mov ax,ds:[si+232] +mov es:[di+214],ax +mov al,ds:[si+234] +mov ah,ds:[si+236] +mov es:[di+216],ax +mov ax,ds:[si+237] +mov es:[di+218],ax +add si,cx +mov ax,ds:[si+240] +mov es:[di+220],ax +mov al,ds:[si+242] +mov ah,ds:[si+244] +mov es:[di+222],ax +mov ax,ds:[si+245] +mov es:[di+224],ax +mov ax,ds:[si+248] +mov es:[di+226],ax +mov al,ds:[si+250] +mov ah,ds:[si+252] +mov es:[di+228],ax +mov ax,ds:[si+253] +mov es:[di+230],ax +mov ax,ds:[si+256] +mov es:[di+232],ax +mov al,ds:[si+258] +mov ah,ds:[si+260] +mov es:[di+234],ax +mov ax,ds:[si+261] +mov es:[di+236],ax +mov ax,ds:[si+264] +mov es:[di+238],ax +mov al,ds:[si+266] +mov ah,ds:[si+268] +mov es:[di+240],ax +mov ax,ds:[si+269] +mov es:[di+242],ax +mov ax,ds:[si+272] +mov es:[di+244],ax +mov al,ds:[si+274] +mov ah,ds:[si+276] +mov es:[di+246],ax +mov ax,ds:[si+277] +mov es:[di+248],ax +mov ax,ds:[si+280] +mov es:[di+250],ax +mov al,ds:[si+282] +mov ah,ds:[si+284] +mov es:[di+252],ax +mov ax,ds:[si+285] +mov es:[di+254],ax +mov ax,ds:[si+288] +mov es:[di+256],ax +mov al,ds:[si+290] +mov ah,ds:[si+292] +mov es:[di+258],ax +mov ax,ds:[si+293] +mov es:[di+260],ax +mov ax,ds:[si+296] +mov es:[di+262],ax +mov al,ds:[si+298] +mov ah,ds:[si+300] +mov es:[di+264],ax +mov ax,ds:[si+301] +mov es:[di+266],ax +mov ax,ds:[si+304] +mov es:[di+268],ax +mov al,ds:[si+306] +mov ah,ds:[si+308] +mov es:[di+270],ax +mov ax,ds:[si+309] +mov es:[di+272],ax +mov ax,ds:[si+312] +mov es:[di+274],ax +mov al,ds:[si+314] +mov ah,ds:[si+316] +mov es:[di+276],ax +mov ax,ds:[si+317] +mov es:[di+278],ax +mov es:[di+280],edx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_242: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov es:[di+36],dx +mov al,dl +mov ah,ds:[si+0] +mov es:[di+38],ax +mov ax,ds:[si+2] +mov es:[di+40],ax +mov al,ds:[si+4] +mov ah,ds:[si+6] +mov es:[di+42],ax +mov ax,ds:[si+7] +mov es:[di+44],ax +mov ax,ds:[si+10] +mov es:[di+46],ax +mov al,ds:[si+12] +mov ah,ds:[si+14] +mov es:[di+48],ax +mov ax,ds:[si+15] +mov es:[di+50],ax +mov ax,ds:[si+18] +mov es:[di+52],ax +mov al,ds:[si+20] +mov ah,ds:[si+22] +mov es:[di+54],ax +mov ax,ds:[si+23] +mov es:[di+56],ax +mov ax,ds:[si+26] +mov es:[di+58],ax +mov al,ds:[si+28] +mov ah,ds:[si+30] +mov es:[di+60],ax +mov ax,ds:[si+31] +mov es:[di+62],ax +mov ax,ds:[si+34] +mov es:[di+64],ax +mov al,ds:[si+36] +mov ah,ds:[si+38] +mov es:[di+66],ax +mov ax,ds:[si+39] +mov es:[di+68],ax +mov al,ds:[si+41] +mov ah,ds:[si+43] +mov es:[di+70],ax +mov ax,ds:[si+44] +mov es:[di+72],ax +mov ax,ds:[si+47] +mov es:[di+74],ax +mov al,ds:[si+49] +mov ah,ds:[si+51] +mov es:[di+76],ax +mov ax,ds:[si+52] +mov es:[di+78],ax +mov ax,ds:[si+55] +mov es:[di+80],ax +mov al,ds:[si+57] +mov ah,ds:[si+59] +mov es:[di+82],ax +mov ax,ds:[si+60] +mov es:[di+84],ax +mov ax,ds:[si+63] +mov es:[di+86],ax +mov al,ds:[si+65] +mov ah,ds:[si+67] +mov es:[di+88],ax +mov ax,ds:[si+68] +mov es:[di+90],ax +mov ax,ds:[si+71] +mov es:[di+92],ax +mov al,ds:[si+73] +mov ah,ds:[si+75] +mov es:[di+94],ax +mov ax,ds:[si+76] +mov es:[di+96],ax +mov ax,ds:[si+79] +mov es:[di+98],ax +add si,cx +mov ax,ds:[si+81] +mov es:[di+100],ax +mov ax,ds:[si+84] +mov es:[di+102],ax +mov al,ds:[si+86] +mov ah,ds:[si+88] +mov es:[di+104],ax +mov ax,ds:[si+89] +mov es:[di+106],ax +mov ax,ds:[si+92] +mov es:[di+108],ax +mov al,ds:[si+94] +mov ah,ds:[si+96] +mov es:[di+110],ax +mov ax,ds:[si+97] +mov es:[di+112],ax +mov ax,ds:[si+100] +mov es:[di+114],ax +mov al,ds:[si+102] +mov ah,ds:[si+104] +mov es:[di+116],ax +mov ax,ds:[si+105] +mov es:[di+118],ax +mov ax,ds:[si+108] +mov es:[di+120],ax +mov al,ds:[si+110] +mov ah,ds:[si+112] +mov es:[di+122],ax +mov ax,ds:[si+113] +mov es:[di+124],ax +mov ax,ds:[si+116] +mov es:[di+126],ax +add si,cx +mov al,ds:[si+118] +mov ah,ds:[si+120] +mov es:[di+128],ax +mov ax,ds:[si+121] +mov es:[di+130],ax +mov al,ds:[si+123] +mov ah,ds:[si+125] +mov es:[di+132],ax +mov ax,ds:[si+126] +mov es:[di+134],ax +mov ax,ds:[si+129] +mov es:[di+136],ax +mov al,ds:[si+131] +mov ah,ds:[si+133] +mov es:[di+138],ax +mov ax,ds:[si+134] +mov es:[di+140],ax +mov ax,ds:[si+137] +mov es:[di+142],ax +mov al,ds:[si+139] +mov ah,ds:[si+141] +mov es:[di+144],ax +mov ax,ds:[si+142] +mov es:[di+146],ax +mov ax,ds:[si+145] +mov es:[di+148],ax +mov al,ds:[si+147] +mov ah,ds:[si+149] +mov es:[di+150],ax +mov ax,ds:[si+150] +mov es:[di+152],ax +mov ax,ds:[si+153] +mov es:[di+154],ax +mov al,ds:[si+155] +mov ah,ds:[si+157] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+162] +mov es:[di+162],ax +mov ax,ds:[si+165] +mov es:[di+164],ax +mov al,ds:[si+167] +mov ah,ds:[si+169] +mov es:[di+166],ax +mov ax,ds:[si+170] +mov es:[di+168],ax +mov ax,ds:[si+173] +mov es:[di+170],ax +mov al,ds:[si+175] +mov ah,ds:[si+177] +mov es:[di+172],ax +mov ax,ds:[si+178] +mov es:[di+174],ax +mov ax,ds:[si+181] +mov es:[di+176],ax +mov al,ds:[si+183] +mov ah,ds:[si+185] +mov es:[di+178],ax +mov ax,ds:[si+186] +mov es:[di+180],ax +mov ax,ds:[si+189] +mov es:[di+182],ax +mov al,ds:[si+191] +mov ah,ds:[si+193] +mov es:[di+184],ax +mov ax,ds:[si+194] +mov es:[di+186],ax +add si,cx +mov ax,ds:[si+197] +mov es:[di+188],ax +mov ax,ds:[si+199] +mov es:[di+190],ax +mov ax,ds:[si+202] +mov es:[di+192],ax +mov al,ds:[si+204] +mov ah,ds:[si+206] +mov es:[di+194],ax +mov ax,ds:[si+207] +mov es:[di+196],ax +mov ax,ds:[si+210] +mov es:[di+198],ax +mov al,ds:[si+212] +mov ah,ds:[si+214] +mov es:[di+200],ax +mov ax,ds:[si+215] +mov es:[di+202],ax +mov ax,ds:[si+218] +mov es:[di+204],ax +mov al,ds:[si+220] +mov ah,ds:[si+222] +mov es:[di+206],ax +mov ax,ds:[si+223] +mov es:[di+208],ax +mov ax,ds:[si+226] +mov es:[di+210],ax +mov al,ds:[si+228] +mov ah,ds:[si+230] +mov es:[di+212],ax +mov ax,ds:[si+231] +mov es:[di+214],ax +mov ax,ds:[si+234] +mov es:[di+216],ax +mov al,ds:[si+236] +mov ah,ds:[si+238] +mov es:[di+218],ax +add si,cx +mov ax,ds:[si+239] +mov es:[di+220],ax +mov al,ds:[si+241] +mov ah,ds:[si+243] +mov es:[di+222],ax +mov ax,ds:[si+244] +mov es:[di+224],ax +mov ax,ds:[si+247] +mov es:[di+226],ax +mov al,ds:[si+249] +mov ah,ds:[si+251] +mov es:[di+228],ax +mov ax,ds:[si+252] +mov es:[di+230],ax +mov ax,ds:[si+255] +mov es:[di+232],ax +mov al,ds:[si+257] +mov ah,ds:[si+259] +mov es:[di+234],ax +mov ax,ds:[si+260] +mov es:[di+236],ax +mov ax,ds:[si+263] +mov es:[di+238],ax +mov al,ds:[si+265] +mov ah,ds:[si+267] +mov es:[di+240],ax +mov ax,ds:[si+268] +mov es:[di+242],ax +mov ax,ds:[si+271] +mov es:[di+244],ax +mov al,ds:[si+273] +mov ah,ds:[si+275] +mov es:[di+246],ax +mov ax,ds:[si+276] +mov es:[di+248],ax +mov ax,ds:[si+279] +mov es:[di+250],ax +mov ax,ds:[si+281] +mov es:[di+252],ax +mov ax,ds:[si+284] +mov es:[di+254],ax +mov al,ds:[si+286] +mov ah,ds:[si+288] +mov es:[di+256],ax +mov ax,ds:[si+289] +mov es:[di+258],ax +mov ax,ds:[si+292] +mov es:[di+260],ax +mov al,ds:[si+294] +mov ah,ds:[si+296] +mov es:[di+262],ax +mov ax,ds:[si+297] +mov es:[di+264],ax +mov ax,ds:[si+300] +mov es:[di+266],ax +mov al,ds:[si+302] +mov ah,ds:[si+304] +mov es:[di+268],ax +mov ax,ds:[si+305] +mov es:[di+270],ax +mov ax,ds:[si+308] +mov es:[di+272],ax +mov al,ds:[si+310] +mov ah,ds:[si+312] +mov es:[di+274],ax +mov ax,ds:[si+313] +mov es:[di+276],ax +mov ax,ds:[si+316] +mov es:[di+278],ax +mov al,ds:[si+318] +mov ah,dl +mov es:[di+280],ax +mov es:[di+282],dx +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_248: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],edx +mov al,ds:[si+0] +mov ah,ds:[si+2] +mov es:[di+36],ax +mov ax,ds:[si+3] +mov es:[di+38],ax +mov ax,ds:[si+6] +mov es:[di+40],ax +mov al,ds:[si+8] +mov ah,ds:[si+10] +mov es:[di+42],ax +mov ax,ds:[si+11] +mov es:[di+44],ax +mov al,ds:[si+13] +mov ah,ds:[si+15] +mov es:[di+46],ax +mov ax,ds:[si+16] +mov es:[di+48],ax +mov ax,ds:[si+19] +mov es:[di+50],ax +mov ax,ds:[si+21] +mov es:[di+52],ax +mov ax,ds:[si+24] +mov es:[di+54],ax +mov al,ds:[si+26] +mov ah,ds:[si+28] +mov es:[di+56],ax +mov ax,ds:[si+29] +mov es:[di+58],ax +mov al,ds:[si+31] +mov ah,ds:[si+33] +mov es:[di+60],ax +mov ax,ds:[si+34] +mov es:[di+62],ax +mov ax,ds:[si+37] +mov es:[di+64],ax +mov ax,ds:[si+39] +mov es:[di+66],ax +mov ax,ds:[si+42] +mov es:[di+68],ax +mov al,ds:[si+44] +mov ah,ds:[si+46] +mov es:[di+70],ax +mov ax,ds:[si+47] +mov es:[di+72],ax +mov ax,ds:[si+50] +mov es:[di+74],ax +mov ax,ds:[si+52] +mov es:[di+76],ax +mov ax,ds:[si+55] +mov es:[di+78],ax +mov al,ds:[si+57] +mov ah,ds:[si+59] +mov es:[di+80],ax +mov ax,ds:[si+60] +mov es:[di+82],ax +mov al,ds:[si+62] +mov ah,ds:[si+64] +mov es:[di+84],ax +mov ax,ds:[si+65] +mov es:[di+86],ax +mov ax,ds:[si+68] +mov es:[di+88],ax +mov ax,ds:[si+70] +mov es:[di+90],ax +mov ax,ds:[si+73] +mov es:[di+92],ax +mov al,ds:[si+75] +mov ah,ds:[si+77] +mov es:[di+94],ax +add si,cx +mov ax,ds:[si+78] +mov es:[di+96],ax +mov al,ds:[si+80] +mov ah,ds:[si+82] +mov es:[di+98],ax +mov ax,ds:[si+83] +mov es:[di+100],ax +mov ax,ds:[si+86] +mov es:[di+102],ax +mov al,ds:[si+88] +mov ah,ds:[si+90] +mov es:[di+104],ax +mov ax,ds:[si+91] +mov es:[di+106],ax +mov al,ds:[si+93] +mov ah,ds:[si+95] +mov es:[di+108],ax +mov ax,ds:[si+96] +mov es:[di+110],ax +mov ax,ds:[si+99] +mov es:[di+112],ax +mov ax,ds:[si+101] +mov es:[di+114],ax +mov ax,ds:[si+104] +mov es:[di+116],ax +mov al,ds:[si+106] +mov ah,ds:[si+108] +mov es:[di+118],ax +mov ax,ds:[si+109] +mov es:[di+120],ax +mov al,ds:[si+111] +mov ah,ds:[si+113] +mov es:[di+122],ax +mov ax,ds:[si+114] +mov es:[di+124],ax +mov ax,ds:[si+117] +mov es:[di+126],ax +add si,cx +mov ax,ds:[si+119] +mov es:[di+128],ax +mov ax,ds:[si+122] +mov es:[di+130],ax +mov al,ds:[si+124] +mov ah,ds:[si+126] +mov es:[di+132],ax +mov ax,ds:[si+127] +mov es:[di+134],ax +mov ax,ds:[si+130] +mov es:[di+136],ax +mov ax,ds:[si+132] +mov es:[di+138],ax +mov ax,ds:[si+135] +mov es:[di+140],ax +mov al,ds:[si+137] +mov ah,ds:[si+139] +mov es:[di+142],ax +mov ax,ds:[si+140] +mov es:[di+144],ax +mov al,ds:[si+142] +mov ah,ds:[si+144] +mov es:[di+146],ax +mov ax,ds:[si+145] +mov es:[di+148],ax +mov ax,ds:[si+148] +mov es:[di+150],ax +mov ax,ds:[si+150] +mov es:[di+152],ax +mov ax,ds:[si+153] +mov es:[di+154],ax +mov al,ds:[si+155] +mov ah,ds:[si+157] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+162] +mov es:[di+162],ax +mov ax,ds:[si+165] +mov es:[di+164],ax +mov al,ds:[si+167] +mov ah,ds:[si+169] +mov es:[di+166],ax +mov ax,ds:[si+170] +mov es:[di+168],ax +mov al,ds:[si+172] +mov ah,ds:[si+174] +mov es:[di+170],ax +mov ax,ds:[si+175] +mov es:[di+172],ax +mov ax,ds:[si+178] +mov es:[di+174],ax +mov ax,ds:[si+180] +mov es:[di+176],ax +mov ax,ds:[si+183] +mov es:[di+178],ax +mov al,ds:[si+185] +mov ah,ds:[si+187] +mov es:[di+180],ax +mov ax,ds:[si+188] +mov es:[di+182],ax +mov al,ds:[si+190] +mov ah,ds:[si+192] +mov es:[di+184],ax +mov ax,ds:[si+193] +mov es:[di+186],ax +add si,cx +mov ax,ds:[si+196] +mov es:[di+188],ax +mov al,ds:[si+198] +mov ah,ds:[si+200] +mov es:[di+190],ax +mov ax,ds:[si+201] +mov es:[di+192],ax +mov al,ds:[si+203] +mov ah,ds:[si+205] +mov es:[di+194],ax +mov ax,ds:[si+206] +mov es:[di+196],ax +mov ax,ds:[si+209] +mov es:[di+198],ax +mov ax,ds:[si+211] +mov es:[di+200],ax +mov ax,ds:[si+214] +mov es:[di+202],ax +mov al,ds:[si+216] +mov ah,ds:[si+218] +mov es:[di+204],ax +mov ax,ds:[si+219] +mov es:[di+206],ax +mov al,ds:[si+221] +mov ah,ds:[si+223] +mov es:[di+208],ax +mov ax,ds:[si+224] +mov es:[di+210],ax +mov ax,ds:[si+227] +mov es:[di+212],ax +mov ax,ds:[si+229] +mov es:[di+214],ax +mov ax,ds:[si+232] +mov es:[di+216],ax +mov al,ds:[si+234] +mov ah,ds:[si+236] +mov es:[di+218],ax +add si,cx +mov ax,ds:[si+237] +mov es:[di+220],ax +mov ax,ds:[si+240] +mov es:[di+222],ax +mov ax,ds:[si+242] +mov es:[di+224],ax +mov ax,ds:[si+245] +mov es:[di+226],ax +mov al,ds:[si+247] +mov ah,ds:[si+249] +mov es:[di+228],ax +mov ax,ds:[si+250] +mov es:[di+230],ax +mov al,ds:[si+252] +mov ah,ds:[si+254] +mov es:[di+232],ax +mov ax,ds:[si+255] +mov es:[di+234],ax +mov ax,ds:[si+258] +mov es:[di+236],ax +mov ax,ds:[si+260] +mov es:[di+238],ax +mov ax,ds:[si+263] +mov es:[di+240],ax +mov al,ds:[si+265] +mov ah,ds:[si+267] +mov es:[di+242],ax +mov ax,ds:[si+268] +mov es:[di+244],ax +mov al,ds:[si+270] +mov ah,ds:[si+272] +mov es:[di+246],ax +mov ax,ds:[si+273] +mov es:[di+248],ax +mov ax,ds:[si+276] +mov es:[di+250],ax +mov al,ds:[si+278] +mov ah,ds:[si+280] +mov es:[di+252],ax +mov ax,ds:[si+281] +mov es:[di+254],ax +mov al,ds:[si+283] +mov ah,ds:[si+285] +mov es:[di+256],ax +mov ax,ds:[si+286] +mov es:[di+258],ax +mov ax,ds:[si+289] +mov es:[di+260],ax +mov ax,ds:[si+291] +mov es:[di+262],ax +mov ax,ds:[si+294] +mov es:[di+264],ax +mov al,ds:[si+296] +mov ah,ds:[si+298] +mov es:[di+266],ax +mov ax,ds:[si+299] +mov es:[di+268],ax +mov al,ds:[si+301] +mov ah,ds:[si+303] +mov es:[di+270],ax +mov ax,ds:[si+304] +mov es:[di+272],ax +mov ax,ds:[si+307] +mov es:[di+274],ax +mov ax,ds:[si+309] +mov es:[di+276],ax +mov ax,ds:[si+312] +mov es:[di+278],ax +mov al,ds:[si+314] +mov ah,ds:[si+316] +mov es:[di+280],ax +mov ax,ds:[si+317] +mov es:[di+282],ax +mov es:[di+284],edx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_250: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov es:[di+32],dx +mov al,dl +mov ah,ds:[si+0] +mov es:[di+34],ax +mov ax,ds:[si+2] +mov es:[di+36],ax +mov al,ds:[si+4] +mov ah,ds:[si+6] +mov es:[di+38],ax +mov ax,ds:[si+7] +mov es:[di+40],ax +mov al,ds:[si+9] +mov ah,ds:[si+11] +mov es:[di+42],ax +mov ax,ds:[si+12] +mov es:[di+44],ax +mov ax,ds:[si+15] +mov es:[di+46],ax +mov ax,ds:[si+17] +mov es:[di+48],ax +mov ax,ds:[si+20] +mov es:[di+50],ax +mov al,ds:[si+22] +mov ah,ds:[si+24] +mov es:[di+52],ax +mov ax,ds:[si+25] +mov es:[di+54],ax +mov al,ds:[si+27] +mov ah,ds:[si+29] +mov es:[di+56],ax +mov ax,ds:[si+30] +mov es:[di+58],ax +mov al,ds:[si+32] +mov ah,ds:[si+34] +mov es:[di+60],ax +mov ax,ds:[si+35] +mov es:[di+62],ax +mov ax,ds:[si+38] +mov es:[di+64],ax +mov ax,ds:[si+40] +mov es:[di+66],ax +mov ax,ds:[si+43] +mov es:[di+68],ax +mov al,ds:[si+45] +mov ah,ds:[si+47] +mov es:[di+70],ax +mov ax,ds:[si+48] +mov es:[di+72],ax +mov al,ds:[si+50] +mov ah,ds:[si+52] +mov es:[di+74],ax +mov ax,ds:[si+53] +mov es:[di+76],ax +mov ax,ds:[si+56] +mov es:[di+78],ax +mov ax,ds:[si+58] +mov es:[di+80],ax +mov ax,ds:[si+61] +mov es:[di+82],ax +mov ax,ds:[si+63] +mov es:[di+84],ax +mov ax,ds:[si+66] +mov es:[di+86],ax +mov al,ds:[si+68] +mov ah,ds:[si+70] +mov es:[di+88],ax +mov ax,ds:[si+71] +mov es:[di+90],ax +mov al,ds:[si+73] +mov ah,ds:[si+75] +mov es:[di+92],ax +mov ax,ds:[si+76] +mov es:[di+94],ax +add si,cx +mov ax,ds:[si+79] +mov es:[di+96],ax +mov ax,ds:[si+81] +mov es:[di+98],ax +mov ax,ds:[si+84] +mov es:[di+100],ax +mov al,ds:[si+86] +mov ah,ds:[si+88] +mov es:[di+102],ax +mov ax,ds:[si+89] +mov es:[di+104],ax +mov al,ds:[si+91] +mov ah,ds:[si+93] +mov es:[di+106],ax +mov ax,ds:[si+94] +mov es:[di+108],ax +mov al,ds:[si+96] +mov ah,ds:[si+98] +mov es:[di+110],ax +mov ax,ds:[si+99] +mov es:[di+112],ax +mov ax,ds:[si+102] +mov es:[di+114],ax +mov ax,ds:[si+104] +mov es:[di+116],ax +mov ax,ds:[si+107] +mov es:[di+118],ax +mov al,ds:[si+109] +mov ah,ds:[si+111] +mov es:[di+120],ax +mov ax,ds:[si+112] +mov es:[di+122],ax +mov al,ds:[si+114] +mov ah,ds:[si+116] +mov es:[di+124],ax +mov ax,ds:[si+117] +mov es:[di+126],ax +add si,cx +mov ax,ds:[si+120] +mov es:[di+128],ax +mov ax,ds:[si+122] +mov es:[di+130],ax +mov ax,ds:[si+125] +mov es:[di+132],ax +mov ax,ds:[si+127] +mov es:[di+134],ax +mov ax,ds:[si+130] +mov es:[di+136],ax +mov al,ds:[si+132] +mov ah,ds:[si+134] +mov es:[di+138],ax +mov ax,ds:[si+135] +mov es:[di+140],ax +mov al,ds:[si+137] +mov ah,ds:[si+139] +mov es:[di+142],ax +mov ax,ds:[si+140] +mov es:[di+144],ax +mov ax,ds:[si+143] +mov es:[di+146],ax +mov ax,ds:[si+145] +mov es:[di+148],ax +mov ax,ds:[si+148] +mov es:[di+150],ax +mov al,ds:[si+150] +mov ah,ds:[si+152] +mov es:[di+152],ax +mov ax,ds:[si+153] +mov es:[di+154],ax +mov al,ds:[si+155] +mov ah,ds:[si+157] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+162] +mov es:[di+162],ax +mov ax,ds:[si+165] +mov es:[di+164],ax +mov ax,ds:[si+167] +mov es:[di+166],ax +mov ax,ds:[si+170] +mov es:[di+168],ax +mov al,ds:[si+172] +mov ah,ds:[si+174] +mov es:[di+170],ax +mov ax,ds:[si+175] +mov es:[di+172],ax +mov al,ds:[si+177] +mov ah,ds:[si+179] +mov es:[di+174],ax +mov ax,ds:[si+180] +mov es:[di+176],ax +mov ax,ds:[si+183] +mov es:[di+178],ax +mov ax,ds:[si+185] +mov es:[di+180],ax +mov ax,ds:[si+188] +mov es:[di+182],ax +mov al,ds:[si+190] +mov ah,ds:[si+192] +mov es:[di+184],ax +mov ax,ds:[si+193] +mov es:[di+186],ax +add si,cx +mov al,ds:[si+195] +mov ah,ds:[si+197] +mov es:[di+188],ax +mov ax,ds:[si+198] +mov es:[di+190],ax +mov al,ds:[si+200] +mov ah,ds:[si+202] +mov es:[di+192],ax +mov ax,ds:[si+203] +mov es:[di+194],ax +mov ax,ds:[si+206] +mov es:[di+196],ax +mov ax,ds:[si+208] +mov es:[di+198],ax +mov ax,ds:[si+211] +mov es:[di+200],ax +mov al,ds:[si+213] +mov ah,ds:[si+215] +mov es:[di+202],ax +mov ax,ds:[si+216] +mov es:[di+204],ax +mov al,ds:[si+218] +mov ah,ds:[si+220] +mov es:[di+206],ax +mov ax,ds:[si+221] +mov es:[di+208],ax +mov ax,ds:[si+224] +mov es:[di+210],ax +mov ax,ds:[si+226] +mov es:[di+212],ax +mov ax,ds:[si+229] +mov es:[di+214],ax +mov ax,ds:[si+231] +mov es:[di+216],ax +mov ax,ds:[si+234] +mov es:[di+218],ax +add si,cx +mov al,ds:[si+236] +mov ah,ds:[si+238] +mov es:[di+220],ax +mov ax,ds:[si+239] +mov es:[di+222],ax +mov al,ds:[si+241] +mov ah,ds:[si+243] +mov es:[di+224],ax +mov ax,ds:[si+244] +mov es:[di+226],ax +mov ax,ds:[si+247] +mov es:[di+228],ax +mov ax,ds:[si+249] +mov es:[di+230],ax +mov ax,ds:[si+252] +mov es:[di+232],ax +mov al,ds:[si+254] +mov ah,ds:[si+256] +mov es:[di+234],ax +mov ax,ds:[si+257] +mov es:[di+236],ax +mov al,ds:[si+259] +mov ah,ds:[si+261] +mov es:[di+238],ax +mov ax,ds:[si+262] +mov es:[di+240],ax +mov al,ds:[si+264] +mov ah,ds:[si+266] +mov es:[di+242],ax +mov ax,ds:[si+267] +mov es:[di+244],ax +mov ax,ds:[si+270] +mov es:[di+246],ax +mov ax,ds:[si+272] +mov es:[di+248],ax +mov ax,ds:[si+275] +mov es:[di+250],ax +mov al,ds:[si+277] +mov ah,ds:[si+279] +mov es:[di+252],ax +mov ax,ds:[si+280] +mov es:[di+254],ax +mov al,ds:[si+282] +mov ah,ds:[si+284] +mov es:[di+256],ax +mov ax,ds:[si+285] +mov es:[di+258],ax +mov ax,ds:[si+288] +mov es:[di+260],ax +mov ax,ds:[si+290] +mov es:[di+262],ax +mov ax,ds:[si+293] +mov es:[di+264],ax +mov ax,ds:[si+295] +mov es:[di+266],ax +mov ax,ds:[si+298] +mov es:[di+268],ax +mov al,ds:[si+300] +mov ah,ds:[si+302] +mov es:[di+270],ax +mov ax,ds:[si+303] +mov es:[di+272],ax +mov al,ds:[si+305] +mov ah,ds:[si+307] +mov es:[di+274],ax +mov ax,ds:[si+308] +mov es:[di+276],ax +mov ax,ds:[si+311] +mov es:[di+278],ax +mov ax,ds:[si+313] +mov es:[di+280],ax +mov ax,ds:[si+316] +mov es:[di+282],ax +mov al,ds:[si+318] +mov ah,dl +mov es:[di+284],ax +mov es:[di+286],dx +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_256: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],edx +mov al,ds:[si+0] +mov ah,ds:[si+2] +mov es:[di+32],ax +mov ax,ds:[si+3] +mov es:[di+34],ax +mov al,ds:[si+5] +mov ah,ds:[si+7] +mov es:[di+36],ax +mov ax,ds:[si+8] +mov es:[di+38],ax +mov al,ds:[si+10] +mov ah,ds:[si+12] +mov es:[di+40],ax +mov ax,ds:[si+13] +mov es:[di+42],ax +mov al,ds:[si+15] +mov ah,ds:[si+17] +mov es:[di+44],ax +mov ax,ds:[si+18] +mov es:[di+46],ax +mov al,ds:[si+20] +mov ah,ds:[si+22] +mov es:[di+48],ax +mov ax,ds:[si+23] +mov es:[di+50],ax +mov al,ds:[si+25] +mov ah,ds:[si+27] +mov es:[di+52],ax +mov ax,ds:[si+28] +mov es:[di+54],ax +mov al,ds:[si+30] +mov ah,ds:[si+32] +mov es:[di+56],ax +mov ax,ds:[si+33] +mov es:[di+58],ax +mov al,ds:[si+35] +mov ah,ds:[si+37] +mov es:[di+60],ax +mov ax,ds:[si+38] +mov es:[di+62],ax +mov al,ds:[si+40] +mov ah,ds:[si+42] +mov es:[di+64],ax +mov ax,ds:[si+43] +mov es:[di+66],ax +mov al,ds:[si+45] +mov ah,ds:[si+47] +mov es:[di+68],ax +mov ax,ds:[si+48] +mov es:[di+70],ax +mov al,ds:[si+50] +mov ah,ds:[si+52] +mov es:[di+72],ax +mov ax,ds:[si+53] +mov es:[di+74],ax +mov al,ds:[si+55] +mov ah,ds:[si+57] +mov es:[di+76],ax +mov ax,ds:[si+58] +mov es:[di+78],ax +mov al,ds:[si+60] +mov ah,ds:[si+62] +mov es:[di+80],ax +mov ax,ds:[si+63] +mov es:[di+82],ax +mov al,ds:[si+65] +mov ah,ds:[si+67] +mov es:[di+84],ax +mov ax,ds:[si+68] +mov es:[di+86],ax +mov al,ds:[si+70] +mov ah,ds:[si+72] +mov es:[di+88],ax +mov ax,ds:[si+73] +mov es:[di+90],ax +mov al,ds:[si+75] +mov ah,ds:[si+77] +mov es:[di+92],ax +mov ax,ds:[si+78] +mov es:[di+94],ax +add si,cx +mov al,ds:[si+80] +mov ah,ds:[si+82] +mov es:[di+96],ax +mov ax,ds:[si+83] +mov es:[di+98],ax +mov al,ds:[si+85] +mov ah,ds:[si+87] +mov es:[di+100],ax +mov ax,ds:[si+88] +mov es:[di+102],ax +mov al,ds:[si+90] +mov ah,ds:[si+92] +mov es:[di+104],ax +mov ax,ds:[si+93] +mov es:[di+106],ax +mov al,ds:[si+95] +mov ah,ds:[si+97] +mov es:[di+108],ax +mov ax,ds:[si+98] +mov es:[di+110],ax +mov al,ds:[si+100] +mov ah,ds:[si+102] +mov es:[di+112],ax +mov ax,ds:[si+103] +mov es:[di+114],ax +mov al,ds:[si+105] +mov ah,ds:[si+107] +mov es:[di+116],ax +mov ax,ds:[si+108] +mov es:[di+118],ax +mov al,ds:[si+110] +mov ah,ds:[si+112] +mov es:[di+120],ax +mov ax,ds:[si+113] +mov es:[di+122],ax +mov al,ds:[si+115] +mov ah,ds:[si+117] +mov es:[di+124],ax +mov ax,ds:[si+118] +mov es:[di+126],ax +add si,cx +mov al,ds:[si+120] +mov ah,ds:[si+122] +mov es:[di+128],ax +mov ax,ds:[si+123] +mov es:[di+130],ax +mov al,ds:[si+125] +mov ah,ds:[si+127] +mov es:[di+132],ax +mov ax,ds:[si+128] +mov es:[di+134],ax +mov al,ds:[si+130] +mov ah,ds:[si+132] +mov es:[di+136],ax +mov ax,ds:[si+133] +mov es:[di+138],ax +mov al,ds:[si+135] +mov ah,ds:[si+137] +mov es:[di+140],ax +mov ax,ds:[si+138] +mov es:[di+142],ax +mov al,ds:[si+140] +mov ah,ds:[si+142] +mov es:[di+144],ax +mov ax,ds:[si+143] +mov es:[di+146],ax +mov al,ds:[si+145] +mov ah,ds:[si+147] +mov es:[di+148],ax +mov ax,ds:[si+148] +mov es:[di+150],ax +mov al,ds:[si+150] +mov ah,ds:[si+152] +mov es:[di+152],ax +mov ax,ds:[si+153] +mov es:[di+154],ax +mov al,ds:[si+155] +mov ah,ds:[si+157] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+162] +mov es:[di+162],ax +mov ax,ds:[si+165] +mov es:[di+164],ax +mov ax,ds:[si+167] +mov es:[di+166],ax +mov ax,ds:[si+170] +mov es:[di+168],ax +mov ax,ds:[si+172] +mov es:[di+170],ax +mov ax,ds:[si+175] +mov es:[di+172],ax +mov ax,ds:[si+177] +mov es:[di+174],ax +mov ax,ds:[si+180] +mov es:[di+176],ax +mov ax,ds:[si+182] +mov es:[di+178],ax +mov ax,ds:[si+185] +mov es:[di+180],ax +mov ax,ds:[si+187] +mov es:[di+182],ax +mov ax,ds:[si+190] +mov es:[di+184],ax +mov ax,ds:[si+192] +mov es:[di+186],ax +mov ax,ds:[si+195] +mov es:[di+188],ax +mov ax,ds:[si+197] +mov es:[di+190],ax +add si,cx +mov ax,ds:[si+200] +mov es:[di+192],ax +mov ax,ds:[si+202] +mov es:[di+194],ax +mov ax,ds:[si+205] +mov es:[di+196],ax +mov ax,ds:[si+207] +mov es:[di+198],ax +mov ax,ds:[si+210] +mov es:[di+200],ax +mov ax,ds:[si+212] +mov es:[di+202],ax +mov ax,ds:[si+215] +mov es:[di+204],ax +mov ax,ds:[si+217] +mov es:[di+206],ax +mov ax,ds:[si+220] +mov es:[di+208],ax +mov ax,ds:[si+222] +mov es:[di+210],ax +mov ax,ds:[si+225] +mov es:[di+212],ax +mov ax,ds:[si+227] +mov es:[di+214],ax +mov ax,ds:[si+230] +mov es:[di+216],ax +mov ax,ds:[si+232] +mov es:[di+218],ax +mov ax,ds:[si+235] +mov es:[di+220],ax +mov ax,ds:[si+237] +mov es:[di+222],ax +add si,cx +mov ax,ds:[si+240] +mov es:[di+224],ax +mov ax,ds:[si+242] +mov es:[di+226],ax +mov ax,ds:[si+245] +mov es:[di+228],ax +mov ax,ds:[si+247] +mov es:[di+230],ax +mov ax,ds:[si+250] +mov es:[di+232],ax +mov ax,ds:[si+252] +mov es:[di+234],ax +mov ax,ds:[si+255] +mov es:[di+236],ax +mov ax,ds:[si+257] +mov es:[di+238],ax +mov ax,ds:[si+260] +mov es:[di+240],ax +mov ax,ds:[si+262] +mov es:[di+242],ax +mov ax,ds:[si+265] +mov es:[di+244],ax +mov ax,ds:[si+267] +mov es:[di+246],ax +mov ax,ds:[si+270] +mov es:[di+248],ax +mov ax,ds:[si+272] +mov es:[di+250],ax +mov ax,ds:[si+275] +mov es:[di+252],ax +mov ax,ds:[si+277] +mov es:[di+254],ax +mov ax,ds:[si+280] +mov es:[di+256],ax +mov ax,ds:[si+282] +mov es:[di+258],ax +mov ax,ds:[si+285] +mov es:[di+260],ax +mov ax,ds:[si+287] +mov es:[di+262],ax +mov ax,ds:[si+290] +mov es:[di+264],ax +mov ax,ds:[si+292] +mov es:[di+266],ax +mov ax,ds:[si+295] +mov es:[di+268],ax +mov ax,ds:[si+297] +mov es:[di+270],ax +mov ax,ds:[si+300] +mov es:[di+272],ax +mov ax,ds:[si+302] +mov es:[di+274],ax +mov ax,ds:[si+305] +mov es:[di+276],ax +mov ax,ds:[si+307] +mov es:[di+278],ax +mov ax,ds:[si+310] +mov es:[di+280],ax +mov ax,ds:[si+312] +mov es:[di+282],ax +mov ax,ds:[si+315] +mov es:[di+284],ax +mov ax,ds:[si+317] +mov es:[di+286],ax +mov es:[di+288],edx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_258: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov es:[di+28],dx +mov al,dl +mov ah,ds:[si+0] +mov es:[di+30],ax +mov ax,ds:[si+2] +mov es:[di+32],ax +mov ax,ds:[si+4] +mov es:[di+34],ax +mov ax,ds:[si+7] +mov es:[di+36],ax +mov ax,ds:[si+9] +mov es:[di+38],ax +mov ax,ds:[si+12] +mov es:[di+40],ax +mov ax,ds:[si+14] +mov es:[di+42],ax +mov ax,ds:[si+17] +mov es:[di+44],ax +mov ax,ds:[si+19] +mov es:[di+46],ax +mov ax,ds:[si+22] +mov es:[di+48],ax +mov ax,ds:[si+24] +mov es:[di+50],ax +mov ax,ds:[si+27] +mov es:[di+52],ax +mov ax,ds:[si+29] +mov es:[di+54],ax +mov ax,ds:[si+32] +mov es:[di+56],ax +mov ax,ds:[si+34] +mov es:[di+58],ax +mov al,ds:[si+36] +mov ah,ds:[si+38] +mov es:[di+60],ax +mov ax,ds:[si+39] +mov es:[di+62],ax +mov al,ds:[si+41] +mov ah,ds:[si+43] +mov es:[di+64],ax +mov ax,ds:[si+44] +mov es:[di+66],ax +mov al,ds:[si+46] +mov ah,ds:[si+48] +mov es:[di+68],ax +mov ax,ds:[si+49] +mov es:[di+70],ax +mov al,ds:[si+51] +mov ah,ds:[si+53] +mov es:[di+72],ax +mov ax,ds:[si+54] +mov es:[di+74],ax +mov al,ds:[si+56] +mov ah,ds:[si+58] +mov es:[di+76],ax +mov ax,ds:[si+59] +mov es:[di+78],ax +mov al,ds:[si+61] +mov ah,ds:[si+63] +mov es:[di+80],ax +mov ax,ds:[si+64] +mov es:[di+82],ax +mov ax,ds:[si+66] +mov es:[di+84],ax +mov ax,ds:[si+69] +mov es:[di+86],ax +mov ax,ds:[si+71] +mov es:[di+88],ax +mov ax,ds:[si+74] +mov es:[di+90],ax +mov ax,ds:[si+76] +mov es:[di+92],ax +mov ax,ds:[si+79] +mov es:[di+94],ax +add si,cx +mov ax,ds:[si+81] +mov es:[di+96],ax +mov ax,ds:[si+84] +mov es:[di+98],ax +mov ax,ds:[si+86] +mov es:[di+100],ax +mov ax,ds:[si+89] +mov es:[di+102],ax +mov ax,ds:[si+91] +mov es:[di+104],ax +mov ax,ds:[si+94] +mov es:[di+106],ax +mov ax,ds:[si+96] +mov es:[di+108],ax +mov al,ds:[si+98] +mov ah,ds:[si+100] +mov es:[di+110],ax +mov ax,ds:[si+101] +mov es:[di+112],ax +mov al,ds:[si+103] +mov ah,ds:[si+105] +mov es:[di+114],ax +mov ax,ds:[si+106] +mov es:[di+116],ax +mov al,ds:[si+108] +mov ah,ds:[si+110] +mov es:[di+118],ax +mov ax,ds:[si+111] +mov es:[di+120],ax +mov al,ds:[si+113] +mov ah,ds:[si+115] +mov es:[di+122],ax +mov ax,ds:[si+116] +mov es:[di+124],ax +mov al,ds:[si+118] +mov ah,ds:[si+120] +mov es:[di+126],ax +add si,cx +mov ax,ds:[si+121] +mov es:[di+128],ax +mov al,ds:[si+123] +mov ah,ds:[si+125] +mov es:[di+130],ax +mov ax,ds:[si+126] +mov es:[di+132],ax +mov ax,ds:[si+128] +mov es:[di+134],ax +mov ax,ds:[si+131] +mov es:[di+136],ax +mov ax,ds:[si+133] +mov es:[di+138],ax +mov ax,ds:[si+136] +mov es:[di+140],ax +mov ax,ds:[si+138] +mov es:[di+142],ax +mov ax,ds:[si+141] +mov es:[di+144],ax +mov ax,ds:[si+143] +mov es:[di+146],ax +mov ax,ds:[si+146] +mov es:[di+148],ax +mov ax,ds:[si+148] +mov es:[di+150],ax +mov ax,ds:[si+151] +mov es:[di+152],ax +mov ax,ds:[si+153] +mov es:[di+154],ax +mov ax,ds:[si+156] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+162] +mov es:[di+162],ax +mov al,ds:[si+164] +mov ah,ds:[si+166] +mov es:[di+164],ax +mov ax,ds:[si+167] +mov es:[di+166],ax +mov al,ds:[si+169] +mov ah,ds:[si+171] +mov es:[di+168],ax +mov ax,ds:[si+172] +mov es:[di+170],ax +mov al,ds:[si+174] +mov ah,ds:[si+176] +mov es:[di+172],ax +mov ax,ds:[si+177] +mov es:[di+174],ax +mov al,ds:[si+179] +mov ah,ds:[si+181] +mov es:[di+176],ax +mov ax,ds:[si+182] +mov es:[di+178],ax +mov al,ds:[si+184] +mov ah,ds:[si+186] +mov es:[di+180],ax +mov ax,ds:[si+187] +mov es:[di+182],ax +mov al,ds:[si+189] +mov ah,ds:[si+191] +mov es:[di+184],ax +mov ax,ds:[si+192] +mov es:[di+186],ax +mov ax,ds:[si+194] +mov es:[di+188],ax +mov ax,ds:[si+197] +mov es:[di+190],ax +add si,cx +mov ax,ds:[si+199] +mov es:[di+192],ax +mov ax,ds:[si+202] +mov es:[di+194],ax +mov ax,ds:[si+204] +mov es:[di+196],ax +mov ax,ds:[si+207] +mov es:[di+198],ax +mov ax,ds:[si+209] +mov es:[di+200],ax +mov ax,ds:[si+212] +mov es:[di+202],ax +mov ax,ds:[si+214] +mov es:[di+204],ax +mov ax,ds:[si+217] +mov es:[di+206],ax +mov ax,ds:[si+219] +mov es:[di+208],ax +mov ax,ds:[si+222] +mov es:[di+210],ax +mov ax,ds:[si+224] +mov es:[di+212],ax +mov al,ds:[si+226] +mov ah,ds:[si+228] +mov es:[di+214],ax +mov ax,ds:[si+229] +mov es:[di+216],ax +mov al,ds:[si+231] +mov ah,ds:[si+233] +mov es:[di+218],ax +mov ax,ds:[si+234] +mov es:[di+220],ax +mov al,ds:[si+236] +mov ah,ds:[si+238] +mov es:[di+222],ax +add si,cx +mov ax,ds:[si+239] +mov es:[di+224],ax +mov al,ds:[si+241] +mov ah,ds:[si+243] +mov es:[di+226],ax +mov ax,ds:[si+244] +mov es:[di+228],ax +mov al,ds:[si+246] +mov ah,ds:[si+248] +mov es:[di+230],ax +mov ax,ds:[si+249] +mov es:[di+232],ax +mov al,ds:[si+251] +mov ah,ds:[si+253] +mov es:[di+234],ax +mov ax,ds:[si+254] +mov es:[di+236],ax +mov ax,ds:[si+256] +mov es:[di+238],ax +mov ax,ds:[si+259] +mov es:[di+240],ax +mov ax,ds:[si+261] +mov es:[di+242],ax +mov ax,ds:[si+264] +mov es:[di+244],ax +mov ax,ds:[si+266] +mov es:[di+246],ax +mov ax,ds:[si+269] +mov es:[di+248],ax +mov ax,ds:[si+271] +mov es:[di+250],ax +mov ax,ds:[si+274] +mov es:[di+252],ax +mov ax,ds:[si+276] +mov es:[di+254],ax +mov ax,ds:[si+279] +mov es:[di+256],ax +mov ax,ds:[si+281] +mov es:[di+258],ax +mov ax,ds:[si+284] +mov es:[di+260],ax +mov ax,ds:[si+286] +mov es:[di+262],ax +mov al,ds:[si+288] +mov ah,ds:[si+290] +mov es:[di+264],ax +mov ax,ds:[si+291] +mov es:[di+266],ax +mov al,ds:[si+293] +mov ah,ds:[si+295] +mov es:[di+268],ax +mov ax,ds:[si+296] +mov es:[di+270],ax +mov al,ds:[si+298] +mov ah,ds:[si+300] +mov es:[di+272],ax +mov ax,ds:[si+301] +mov es:[di+274],ax +mov al,ds:[si+303] +mov ah,ds:[si+305] +mov es:[di+276],ax +mov ax,ds:[si+306] +mov es:[di+278],ax +mov al,ds:[si+308] +mov ah,ds:[si+310] +mov es:[di+280],ax +mov ax,ds:[si+311] +mov es:[di+282],ax +mov al,ds:[si+313] +mov ah,ds:[si+315] +mov es:[di+284],ax +mov ax,ds:[si+316] +mov es:[di+286],ax +mov al,ds:[si+318] +mov ah,dl +mov es:[di+288],ax +mov es:[di+290],dx +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_264: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],edx +mov al,ds:[si+0] +mov ah,ds:[si+2] +mov es:[di+28],ax +mov ax,ds:[si+3] +mov es:[di+30],ax +mov al,ds:[si+5] +mov ah,ds:[si+7] +mov es:[di+32],ax +mov ax,ds:[si+8] +mov es:[di+34],ax +mov ax,ds:[si+10] +mov es:[di+36],ax +mov ax,ds:[si+13] +mov es:[di+38],ax +mov ax,ds:[si+15] +mov es:[di+40],ax +mov al,ds:[si+17] +mov ah,ds:[si+19] +mov es:[di+42],ax +mov ax,ds:[si+20] +mov es:[di+44],ax +mov al,ds:[si+22] +mov ah,ds:[si+24] +mov es:[di+46],ax +mov ax,ds:[si+25] +mov es:[di+48],ax +mov ax,ds:[si+27] +mov es:[di+50],ax +mov ax,ds:[si+30] +mov es:[di+52],ax +mov ax,ds:[si+32] +mov es:[di+54],ax +mov al,ds:[si+34] +mov ah,ds:[si+36] +mov es:[di+56],ax +mov ax,ds:[si+37] +mov es:[di+58],ax +mov ax,ds:[si+39] +mov es:[di+60],ax +mov ax,ds:[si+42] +mov es:[di+62],ax +mov ax,ds:[si+44] +mov es:[di+64],ax +mov ax,ds:[si+47] +mov es:[di+66],ax +mov ax,ds:[si+49] +mov es:[di+68],ax +mov al,ds:[si+51] +mov ah,ds:[si+53] +mov es:[di+70],ax +mov ax,ds:[si+54] +mov es:[di+72],ax +mov ax,ds:[si+56] +mov es:[di+74],ax +mov ax,ds:[si+59] +mov es:[di+76],ax +mov ax,ds:[si+61] +mov es:[di+78],ax +mov ax,ds:[si+64] +mov es:[di+80],ax +mov ax,ds:[si+66] +mov es:[di+82],ax +mov al,ds:[si+68] +mov ah,ds:[si+70] +mov es:[di+84],ax +mov ax,ds:[si+71] +mov es:[di+86],ax +mov ax,ds:[si+73] +mov es:[di+88],ax +mov ax,ds:[si+76] +mov es:[di+90],ax +add si,cx +mov ax,ds:[si+78] +mov es:[di+92],ax +mov al,ds:[si+80] +mov ah,ds:[si+82] +mov es:[di+94],ax +mov ax,ds:[si+83] +mov es:[di+96],ax +mov al,ds:[si+85] +mov ah,ds:[si+87] +mov es:[di+98],ax +mov ax,ds:[si+88] +mov es:[di+100],ax +mov ax,ds:[si+90] +mov es:[di+102],ax +mov ax,ds:[si+93] +mov es:[di+104],ax +mov ax,ds:[si+95] +mov es:[di+106],ax +mov al,ds:[si+97] +mov ah,ds:[si+99] +mov es:[di+108],ax +mov ax,ds:[si+100] +mov es:[di+110],ax +mov al,ds:[si+102] +mov ah,ds:[si+104] +mov es:[di+112],ax +mov ax,ds:[si+105] +mov es:[di+114],ax +mov ax,ds:[si+107] +mov es:[di+116],ax +mov ax,ds:[si+110] +mov es:[di+118],ax +mov ax,ds:[si+112] +mov es:[di+120],ax +mov al,ds:[si+114] +mov ah,ds:[si+116] +mov es:[di+122],ax +add si,cx +mov ax,ds:[si+117] +mov es:[di+124],ax +mov ax,ds:[si+119] +mov es:[di+126],ax +mov ax,ds:[si+122] +mov es:[di+128],ax +mov ax,ds:[si+124] +mov es:[di+130],ax +mov ax,ds:[si+127] +mov es:[di+132],ax +mov ax,ds:[si+129] +mov es:[di+134],ax +mov al,ds:[si+131] +mov ah,ds:[si+133] +mov es:[di+136],ax +mov ax,ds:[si+134] +mov es:[di+138],ax +mov ax,ds:[si+136] +mov es:[di+140],ax +mov ax,ds:[si+139] +mov es:[di+142],ax +mov ax,ds:[si+141] +mov es:[di+144],ax +mov ax,ds:[si+144] +mov es:[di+146],ax +mov ax,ds:[si+146] +mov es:[di+148],ax +mov al,ds:[si+148] +mov ah,ds:[si+150] +mov es:[di+150],ax +mov ax,ds:[si+151] +mov es:[di+152],ax +mov ax,ds:[si+153] +mov es:[di+154],ax +mov ax,ds:[si+156] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+162] +mov es:[di+162],ax +mov al,ds:[si+164] +mov ah,ds:[si+166] +mov es:[di+164],ax +mov ax,ds:[si+167] +mov es:[di+166],ax +mov ax,ds:[si+169] +mov es:[di+168],ax +mov ax,ds:[si+172] +mov es:[di+170],ax +mov ax,ds:[si+174] +mov es:[di+172],ax +mov al,ds:[si+176] +mov ah,ds:[si+178] +mov es:[di+174],ax +mov ax,ds:[si+179] +mov es:[di+176],ax +mov al,ds:[si+181] +mov ah,ds:[si+183] +mov es:[di+178],ax +mov ax,ds:[si+184] +mov es:[di+180],ax +mov ax,ds:[si+186] +mov es:[di+182],ax +mov ax,ds:[si+189] +mov es:[di+184],ax +mov ax,ds:[si+191] +mov es:[di+186],ax +mov al,ds:[si+193] +mov ah,ds:[si+195] +mov es:[di+188],ax +mov ax,ds:[si+196] +mov es:[di+190],ax +add si,cx +mov al,ds:[si+198] +mov ah,ds:[si+200] +mov es:[di+192],ax +mov ax,ds:[si+201] +mov es:[di+194],ax +mov ax,ds:[si+203] +mov es:[di+196],ax +mov ax,ds:[si+206] +mov es:[di+198],ax +mov ax,ds:[si+208] +mov es:[di+200],ax +mov al,ds:[si+210] +mov ah,ds:[si+212] +mov es:[di+202],ax +mov ax,ds:[si+213] +mov es:[di+204],ax +mov ax,ds:[si+215] +mov es:[di+206],ax +mov ax,ds:[si+218] +mov es:[di+208],ax +mov ax,ds:[si+220] +mov es:[di+210],ax +mov ax,ds:[si+223] +mov es:[di+212],ax +mov ax,ds:[si+225] +mov es:[di+214],ax +mov al,ds:[si+227] +mov ah,ds:[si+229] +mov es:[di+216],ax +mov ax,ds:[si+230] +mov es:[di+218],ax +mov ax,ds:[si+232] +mov es:[di+220],ax +mov ax,ds:[si+235] +mov es:[di+222],ax +add si,cx +mov ax,ds:[si+237] +mov es:[di+224],ax +mov ax,ds:[si+240] +mov es:[di+226],ax +mov ax,ds:[si+242] +mov es:[di+228],ax +mov al,ds:[si+244] +mov ah,ds:[si+246] +mov es:[di+230],ax +mov ax,ds:[si+247] +mov es:[di+232],ax +mov ax,ds:[si+249] +mov es:[di+234],ax +mov ax,ds:[si+252] +mov es:[di+236],ax +mov ax,ds:[si+254] +mov es:[di+238],ax +mov al,ds:[si+256] +mov ah,ds:[si+258] +mov es:[di+240],ax +mov ax,ds:[si+259] +mov es:[di+242],ax +mov al,ds:[si+261] +mov ah,ds:[si+263] +mov es:[di+244],ax +mov ax,ds:[si+264] +mov es:[di+246],ax +mov ax,ds:[si+266] +mov es:[di+248],ax +mov ax,ds:[si+269] +mov es:[di+250],ax +mov ax,ds:[si+271] +mov es:[di+252],ax +mov al,ds:[si+273] +mov ah,ds:[si+275] +mov es:[di+254],ax +mov ax,ds:[si+276] +mov es:[di+256],ax +mov al,ds:[si+278] +mov ah,ds:[si+280] +mov es:[di+258],ax +mov ax,ds:[si+281] +mov es:[di+260],ax +mov ax,ds:[si+283] +mov es:[di+262],ax +mov ax,ds:[si+286] +mov es:[di+264],ax +mov ax,ds:[si+288] +mov es:[di+266],ax +mov al,ds:[si+290] +mov ah,ds:[si+292] +mov es:[di+268],ax +mov ax,ds:[si+293] +mov es:[di+270],ax +mov ax,ds:[si+295] +mov es:[di+272],ax +mov ax,ds:[si+298] +mov es:[di+274],ax +mov ax,ds:[si+300] +mov es:[di+276],ax +mov ax,ds:[si+303] +mov es:[di+278],ax +mov ax,ds:[si+305] +mov es:[di+280],ax +mov al,ds:[si+307] +mov ah,ds:[si+309] +mov es:[di+282],ax +mov ax,ds:[si+310] +mov es:[di+284],ax +mov ax,ds:[si+312] +mov es:[di+286],ax +mov ax,ds:[si+315] +mov es:[di+288],ax +mov ax,ds:[si+317] +mov es:[di+290],ax +mov es:[di+292],edx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_266: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov es:[di+24],dx +mov al,dl +mov ah,ds:[si+0] +mov es:[di+26],ax +mov ax,ds:[si+2] +mov es:[di+28],ax +mov ax,ds:[si+4] +mov es:[di+30],ax +mov ax,ds:[si+7] +mov es:[di+32],ax +mov ax,ds:[si+9] +mov es:[di+34],ax +mov al,ds:[si+11] +mov ah,ds:[si+13] +mov es:[di+36],ax +mov ax,ds:[si+14] +mov es:[di+38],ax +mov ax,ds:[si+16] +mov es:[di+40],ax +mov ax,ds:[si+19] +mov es:[di+42],ax +mov ax,ds:[si+21] +mov es:[di+44],ax +mov al,ds:[si+23] +mov ah,ds:[si+25] +mov es:[di+46],ax +mov ax,ds:[si+26] +mov es:[di+48],ax +mov ax,ds:[si+28] +mov es:[di+50],ax +mov ax,ds:[si+31] +mov es:[di+52],ax +mov ax,ds:[si+33] +mov es:[di+54],ax +mov al,ds:[si+35] +mov ah,ds:[si+37] +mov es:[di+56],ax +mov ax,ds:[si+38] +mov es:[di+58],ax +mov ax,ds:[si+40] +mov es:[di+60],ax +mov ax,ds:[si+43] +mov es:[di+62],ax +mov ax,ds:[si+45] +mov es:[di+64],ax +mov al,ds:[si+47] +mov ah,ds:[si+49] +mov es:[di+66],ax +mov ax,ds:[si+50] +mov es:[di+68],ax +mov ax,ds:[si+52] +mov es:[di+70],ax +mov ax,ds:[si+55] +mov es:[di+72],ax +mov ax,ds:[si+57] +mov es:[di+74],ax +mov al,ds:[si+59] +mov ah,ds:[si+61] +mov es:[di+76],ax +mov ax,ds:[si+62] +mov es:[di+78],ax +mov ax,ds:[si+64] +mov es:[di+80],ax +mov ax,ds:[si+67] +mov es:[di+82],ax +mov ax,ds:[si+69] +mov es:[di+84],ax +mov al,ds:[si+71] +mov ah,ds:[si+73] +mov es:[di+86],ax +mov ax,ds:[si+74] +mov es:[di+88],ax +mov ax,ds:[si+76] +mov es:[di+90],ax +add si,cx +mov ax,ds:[si+79] +mov es:[di+92],ax +mov ax,ds:[si+81] +mov es:[di+94],ax +mov ax,ds:[si+84] +mov es:[di+96],ax +mov ax,ds:[si+86] +mov es:[di+98],ax +mov al,ds:[si+88] +mov ah,ds:[si+90] +mov es:[di+100],ax +mov ax,ds:[si+91] +mov es:[di+102],ax +mov ax,ds:[si+93] +mov es:[di+104],ax +mov ax,ds:[si+96] +mov es:[di+106],ax +mov ax,ds:[si+98] +mov es:[di+108],ax +mov al,ds:[si+100] +mov ah,ds:[si+102] +mov es:[di+110],ax +mov ax,ds:[si+103] +mov es:[di+112],ax +mov ax,ds:[si+105] +mov es:[di+114],ax +mov ax,ds:[si+108] +mov es:[di+116],ax +mov ax,ds:[si+110] +mov es:[di+118],ax +mov al,ds:[si+112] +mov ah,ds:[si+114] +mov es:[di+120],ax +mov ax,ds:[si+115] +mov es:[di+122],ax +add si,cx +mov ax,ds:[si+117] +mov es:[di+124],ax +mov ax,ds:[si+120] +mov es:[di+126],ax +mov ax,ds:[si+122] +mov es:[di+128],ax +mov al,ds:[si+124] +mov ah,ds:[si+126] +mov es:[di+130],ax +mov ax,ds:[si+127] +mov es:[di+132],ax +mov ax,ds:[si+129] +mov es:[di+134],ax +mov ax,ds:[si+132] +mov es:[di+136],ax +mov ax,ds:[si+134] +mov es:[di+138],ax +mov al,ds:[si+136] +mov ah,ds:[si+138] +mov es:[di+140],ax +mov ax,ds:[si+139] +mov es:[di+142],ax +mov ax,ds:[si+141] +mov es:[di+144],ax +mov ax,ds:[si+144] +mov es:[di+146],ax +mov ax,ds:[si+146] +mov es:[di+148],ax +mov al,ds:[si+148] +mov ah,ds:[si+150] +mov es:[di+150],ax +mov ax,ds:[si+151] +mov es:[di+152],ax +mov ax,ds:[si+153] +mov es:[di+154],ax +mov ax,ds:[si+156] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+162] +mov es:[di+162],ax +mov al,ds:[si+164] +mov ah,ds:[si+166] +mov es:[di+164],ax +mov ax,ds:[si+167] +mov es:[di+166],ax +mov ax,ds:[si+169] +mov es:[di+168],ax +mov ax,ds:[si+172] +mov es:[di+170],ax +mov ax,ds:[si+174] +mov es:[di+172],ax +mov al,ds:[si+176] +mov ah,ds:[si+178] +mov es:[di+174],ax +mov ax,ds:[si+179] +mov es:[di+176],ax +mov ax,ds:[si+181] +mov es:[di+178],ax +mov ax,ds:[si+184] +mov es:[di+180],ax +mov ax,ds:[si+186] +mov es:[di+182],ax +mov al,ds:[si+188] +mov ah,ds:[si+190] +mov es:[di+184],ax +mov ax,ds:[si+191] +mov es:[di+186],ax +mov ax,ds:[si+193] +mov es:[di+188],ax +mov ax,ds:[si+196] +mov es:[di+190],ax +add si,cx +mov ax,ds:[si+198] +mov es:[di+192],ax +mov al,ds:[si+200] +mov ah,ds:[si+202] +mov es:[di+194],ax +mov ax,ds:[si+203] +mov es:[di+196],ax +mov ax,ds:[si+205] +mov es:[di+198],ax +mov ax,ds:[si+208] +mov es:[di+200],ax +mov ax,ds:[si+210] +mov es:[di+202],ax +mov al,ds:[si+212] +mov ah,ds:[si+214] +mov es:[di+204],ax +mov ax,ds:[si+215] +mov es:[di+206],ax +mov ax,ds:[si+217] +mov es:[di+208],ax +mov ax,ds:[si+220] +mov es:[di+210],ax +mov ax,ds:[si+222] +mov es:[di+212],ax +mov al,ds:[si+224] +mov ah,ds:[si+226] +mov es:[di+214],ax +mov ax,ds:[si+227] +mov es:[di+216],ax +mov ax,ds:[si+229] +mov es:[di+218],ax +mov ax,ds:[si+232] +mov es:[di+220],ax +mov ax,ds:[si+234] +mov es:[di+222],ax +add si,cx +mov al,ds:[si+236] +mov ah,ds:[si+238] +mov es:[di+224],ax +mov ax,ds:[si+239] +mov es:[di+226],ax +mov al,ds:[si+241] +mov ah,ds:[si+243] +mov es:[di+228],ax +mov ax,ds:[si+244] +mov es:[di+230],ax +mov ax,ds:[si+246] +mov es:[di+232],ax +mov ax,ds:[si+249] +mov es:[di+234],ax +mov ax,ds:[si+251] +mov es:[di+236],ax +mov al,ds:[si+253] +mov ah,ds:[si+255] +mov es:[di+238],ax +mov ax,ds:[si+256] +mov es:[di+240],ax +mov ax,ds:[si+258] +mov es:[di+242],ax +mov ax,ds:[si+261] +mov es:[di+244],ax +mov ax,ds:[si+263] +mov es:[di+246],ax +mov al,ds:[si+265] +mov ah,ds:[si+267] +mov es:[di+248],ax +mov ax,ds:[si+268] +mov es:[di+250],ax +mov ax,ds:[si+270] +mov es:[di+252],ax +mov ax,ds:[si+273] +mov es:[di+254],ax +mov ax,ds:[si+275] +mov es:[di+256],ax +mov al,ds:[si+277] +mov ah,ds:[si+279] +mov es:[di+258],ax +mov ax,ds:[si+280] +mov es:[di+260],ax +mov ax,ds:[si+282] +mov es:[di+262],ax +mov ax,ds:[si+285] +mov es:[di+264],ax +mov ax,ds:[si+287] +mov es:[di+266],ax +mov al,ds:[si+289] +mov ah,ds:[si+291] +mov es:[di+268],ax +mov ax,ds:[si+292] +mov es:[di+270],ax +mov ax,ds:[si+294] +mov es:[di+272],ax +mov ax,ds:[si+297] +mov es:[di+274],ax +mov ax,ds:[si+299] +mov es:[di+276],ax +mov al,ds:[si+301] +mov ah,ds:[si+303] +mov es:[di+278],ax +mov ax,ds:[si+304] +mov es:[di+280],ax +mov ax,ds:[si+306] +mov es:[di+282],ax +mov ax,ds:[si+309] +mov es:[di+284],ax +mov ax,ds:[si+311] +mov es:[di+286],ax +mov al,ds:[si+313] +mov ah,ds:[si+315] +mov es:[di+288],ax +mov ax,ds:[si+316] +mov es:[di+290],ax +mov al,ds:[si+318] +mov ah,dl +mov es:[di+292],ax +mov es:[di+294],dx +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_272: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],edx +mov al,ds:[si+0] +mov ah,ds:[si+2] +mov es:[di+24],ax +mov ax,ds:[si+3] +mov es:[di+26],ax +mov ax,ds:[si+5] +mov es:[di+28],ax +mov ax,ds:[si+8] +mov es:[di+30],ax +mov ax,ds:[si+10] +mov es:[di+32],ax +mov ax,ds:[si+12] +mov es:[di+34],ax +mov ax,ds:[si+15] +mov es:[di+36],ax +mov ax,ds:[si+17] +mov es:[di+38],ax +mov ax,ds:[si+19] +mov es:[di+40],ax +mov ax,ds:[si+22] +mov es:[di+42],ax +mov ax,ds:[si+24] +mov es:[di+44],ax +mov al,ds:[si+26] +mov ah,ds:[si+28] +mov es:[di+46],ax +mov ax,ds:[si+29] +mov es:[di+48],ax +mov ax,ds:[si+31] +mov es:[di+50],ax +mov al,ds:[si+33] +mov ah,ds:[si+35] +mov es:[di+52],ax +mov ax,ds:[si+36] +mov es:[di+54],ax +mov ax,ds:[si+38] +mov es:[di+56],ax +mov al,ds:[si+40] +mov ah,ds:[si+42] +mov es:[di+58],ax +mov ax,ds:[si+43] +mov es:[di+60],ax +mov ax,ds:[si+45] +mov es:[di+62],ax +mov ax,ds:[si+48] +mov es:[di+64],ax +mov ax,ds:[si+50] +mov es:[di+66],ax +mov ax,ds:[si+52] +mov es:[di+68],ax +mov ax,ds:[si+55] +mov es:[di+70],ax +mov ax,ds:[si+57] +mov es:[di+72],ax +mov ax,ds:[si+59] +mov es:[di+74],ax +mov ax,ds:[si+62] +mov es:[di+76],ax +mov ax,ds:[si+64] +mov es:[di+78],ax +mov al,ds:[si+66] +mov ah,ds:[si+68] +mov es:[di+80],ax +mov ax,ds:[si+69] +mov es:[di+82],ax +mov ax,ds:[si+71] +mov es:[di+84],ax +mov al,ds:[si+73] +mov ah,ds:[si+75] +mov es:[di+86],ax +mov ax,ds:[si+76] +mov es:[di+88],ax +mov ax,ds:[si+78] +mov es:[di+90],ax +add si,cx +mov al,ds:[si+80] +mov ah,ds:[si+82] +mov es:[di+92],ax +mov ax,ds:[si+83] +mov es:[di+94],ax +mov ax,ds:[si+85] +mov es:[di+96],ax +mov ax,ds:[si+88] +mov es:[di+98],ax +mov ax,ds:[si+90] +mov es:[di+100],ax +mov ax,ds:[si+92] +mov es:[di+102],ax +mov ax,ds:[si+95] +mov es:[di+104],ax +mov ax,ds:[si+97] +mov es:[di+106],ax +mov ax,ds:[si+99] +mov es:[di+108],ax +mov ax,ds:[si+102] +mov es:[di+110],ax +mov ax,ds:[si+104] +mov es:[di+112],ax +mov al,ds:[si+106] +mov ah,ds:[si+108] +mov es:[di+114],ax +mov ax,ds:[si+109] +mov es:[di+116],ax +mov ax,ds:[si+111] +mov es:[di+118],ax +mov al,ds:[si+113] +mov ah,ds:[si+115] +mov es:[di+120],ax +mov ax,ds:[si+116] +mov es:[di+122],ax +add si,cx +mov ax,ds:[si+118] +mov es:[di+124],ax +mov al,ds:[si+120] +mov ah,ds:[si+122] +mov es:[di+126],ax +mov ax,ds:[si+123] +mov es:[di+128],ax +mov ax,ds:[si+125] +mov es:[di+130],ax +mov ax,ds:[si+128] +mov es:[di+132],ax +mov ax,ds:[si+130] +mov es:[di+134],ax +mov ax,ds:[si+132] +mov es:[di+136],ax +mov ax,ds:[si+135] +mov es:[di+138],ax +mov ax,ds:[si+137] +mov es:[di+140],ax +mov ax,ds:[si+139] +mov es:[di+142],ax +mov ax,ds:[si+142] +mov es:[di+144],ax +mov ax,ds:[si+144] +mov es:[di+146],ax +mov al,ds:[si+146] +mov ah,ds:[si+148] +mov es:[di+148],ax +mov ax,ds:[si+149] +mov es:[di+150],ax +mov ax,ds:[si+151] +mov es:[di+152],ax +mov al,ds:[si+153] +mov ah,ds:[si+155] +mov es:[di+154],ax +mov ax,ds:[si+156] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+162] +mov es:[di+162],ax +mov ax,ds:[si+164] +mov es:[di+164],ax +mov ax,ds:[si+167] +mov es:[di+166],ax +mov ax,ds:[si+169] +mov es:[di+168],ax +mov ax,ds:[si+171] +mov es:[di+170],ax +mov ax,ds:[si+174] +mov es:[di+172],ax +mov ax,ds:[si+176] +mov es:[di+174],ax +mov al,ds:[si+178] +mov ah,ds:[si+180] +mov es:[di+176],ax +mov ax,ds:[si+181] +mov es:[di+178],ax +mov ax,ds:[si+183] +mov es:[di+180],ax +mov al,ds:[si+185] +mov ah,ds:[si+187] +mov es:[di+182],ax +mov ax,ds:[si+188] +mov es:[di+184],ax +mov ax,ds:[si+190] +mov es:[di+186],ax +mov al,ds:[si+192] +mov ah,ds:[si+194] +mov es:[di+188],ax +mov ax,ds:[si+195] +mov es:[di+190],ax +add si,cx +mov ax,ds:[si+197] +mov es:[di+192],ax +mov ax,ds:[si+200] +mov es:[di+194],ax +mov ax,ds:[si+202] +mov es:[di+196],ax +mov ax,ds:[si+204] +mov es:[di+198],ax +mov ax,ds:[si+207] +mov es:[di+200],ax +mov ax,ds:[si+209] +mov es:[di+202],ax +mov ax,ds:[si+211] +mov es:[di+204],ax +mov ax,ds:[si+214] +mov es:[di+206],ax +mov ax,ds:[si+216] +mov es:[di+208],ax +mov al,ds:[si+218] +mov ah,ds:[si+220] +mov es:[di+210],ax +mov ax,ds:[si+221] +mov es:[di+212],ax +mov ax,ds:[si+223] +mov es:[di+214],ax +mov al,ds:[si+225] +mov ah,ds:[si+227] +mov es:[di+216],ax +mov ax,ds:[si+228] +mov es:[di+218],ax +mov ax,ds:[si+230] +mov es:[di+220],ax +mov al,ds:[si+232] +mov ah,ds:[si+234] +mov es:[di+222],ax +mov ax,ds:[si+235] +mov es:[di+224],ax +mov ax,ds:[si+237] +mov es:[di+226],ax +add si,cx +mov ax,ds:[si+240] +mov es:[di+228],ax +mov ax,ds:[si+242] +mov es:[di+230],ax +mov ax,ds:[si+244] +mov es:[di+232],ax +mov ax,ds:[si+247] +mov es:[di+234],ax +mov ax,ds:[si+249] +mov es:[di+236],ax +mov ax,ds:[si+251] +mov es:[di+238],ax +mov ax,ds:[si+254] +mov es:[di+240],ax +mov ax,ds:[si+256] +mov es:[di+242],ax +mov al,ds:[si+258] +mov ah,ds:[si+260] +mov es:[di+244],ax +mov ax,ds:[si+261] +mov es:[di+246],ax +mov ax,ds:[si+263] +mov es:[di+248],ax +mov al,ds:[si+265] +mov ah,ds:[si+267] +mov es:[di+250],ax +mov ax,ds:[si+268] +mov es:[di+252],ax +mov ax,ds:[si+270] +mov es:[di+254],ax +mov al,ds:[si+272] +mov ah,ds:[si+274] +mov es:[di+256],ax +mov ax,ds:[si+275] +mov es:[di+258],ax +mov ax,ds:[si+277] +mov es:[di+260],ax +mov ax,ds:[si+280] +mov es:[di+262],ax +mov ax,ds:[si+282] +mov es:[di+264],ax +mov ax,ds:[si+284] +mov es:[di+266],ax +mov ax,ds:[si+287] +mov es:[di+268],ax +mov ax,ds:[si+289] +mov es:[di+270],ax +mov ax,ds:[si+291] +mov es:[di+272],ax +mov ax,ds:[si+294] +mov es:[di+274],ax +mov ax,ds:[si+296] +mov es:[di+276],ax +mov al,ds:[si+298] +mov ah,ds:[si+300] +mov es:[di+278],ax +mov ax,ds:[si+301] +mov es:[di+280],ax +mov ax,ds:[si+303] +mov es:[di+282],ax +mov al,ds:[si+305] +mov ah,ds:[si+307] +mov es:[di+284],ax +mov ax,ds:[si+308] +mov es:[di+286],ax +mov ax,ds:[si+310] +mov es:[di+288],ax +mov al,ds:[si+312] +mov ah,ds:[si+314] +mov es:[di+290],ax +mov ax,ds:[si+315] +mov es:[di+292],ax +mov ax,ds:[si+317] +mov es:[di+294],ax +mov es:[di+296],edx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_274: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov es:[di+20],dx +mov al,dl +mov ah,ds:[si+0] +mov es:[di+22],ax +mov ax,ds:[si+2] +mov es:[di+24],ax +mov ax,ds:[si+4] +mov es:[di+26],ax +mov al,ds:[si+6] +mov ah,ds:[si+8] +mov es:[di+28],ax +mov ax,ds:[si+9] +mov es:[di+30],ax +mov ax,ds:[si+11] +mov es:[di+32],ax +mov al,ds:[si+13] +mov ah,ds:[si+15] +mov es:[di+34],ax +mov ax,ds:[si+16] +mov es:[di+36],ax +mov ax,ds:[si+18] +mov es:[di+38],ax +mov al,ds:[si+20] +mov ah,ds:[si+22] +mov es:[di+40],ax +mov ax,ds:[si+23] +mov es:[di+42],ax +mov ax,ds:[si+25] +mov es:[di+44],ax +mov al,ds:[si+27] +mov ah,ds:[si+29] +mov es:[di+46],ax +mov ax,ds:[si+30] +mov es:[di+48],ax +mov ax,ds:[si+32] +mov es:[di+50],ax +mov al,ds:[si+34] +mov ah,ds:[si+36] +mov es:[di+52],ax +mov ax,ds:[si+37] +mov es:[di+54],ax +mov ax,ds:[si+39] +mov es:[di+56],ax +mov al,ds:[si+41] +mov ah,ds:[si+43] +mov es:[di+58],ax +mov ax,ds:[si+44] +mov es:[di+60],ax +mov ax,ds:[si+46] +mov es:[di+62],ax +mov al,ds:[si+48] +mov ah,ds:[si+50] +mov es:[di+64],ax +mov ax,ds:[si+51] +mov es:[di+66],ax +mov ax,ds:[si+53] +mov es:[di+68],ax +mov al,ds:[si+55] +mov ah,ds:[si+57] +mov es:[di+70],ax +mov ax,ds:[si+58] +mov es:[di+72],ax +mov ax,ds:[si+60] +mov es:[di+74],ax +mov al,ds:[si+62] +mov ah,ds:[si+64] +mov es:[di+76],ax +mov ax,ds:[si+65] +mov es:[di+78],ax +mov ax,ds:[si+67] +mov es:[di+80],ax +mov al,ds:[si+69] +mov ah,ds:[si+71] +mov es:[di+82],ax +mov ax,ds:[si+72] +mov es:[di+84],ax +mov ax,ds:[si+74] +mov es:[di+86],ax +mov al,ds:[si+76] +mov ah,ds:[si+78] +mov es:[di+88],ax +mov ax,ds:[si+79] +mov es:[di+90],ax +add si,cx +mov ax,ds:[si+81] +mov es:[di+92],ax +mov al,ds:[si+83] +mov ah,ds:[si+85] +mov es:[di+94],ax +mov ax,ds:[si+86] +mov es:[di+96],ax +mov ax,ds:[si+88] +mov es:[di+98],ax +mov al,ds:[si+90] +mov ah,ds:[si+92] +mov es:[di+100],ax +mov ax,ds:[si+93] +mov es:[di+102],ax +mov ax,ds:[si+95] +mov es:[di+104],ax +mov al,ds:[si+97] +mov ah,ds:[si+99] +mov es:[di+106],ax +mov ax,ds:[si+100] +mov es:[di+108],ax +mov ax,ds:[si+102] +mov es:[di+110],ax +mov al,ds:[si+104] +mov ah,ds:[si+106] +mov es:[di+112],ax +mov ax,ds:[si+107] +mov es:[di+114],ax +mov ax,ds:[si+109] +mov es:[di+116],ax +mov al,ds:[si+111] +mov ah,ds:[si+113] +mov es:[di+118],ax +mov ax,ds:[si+114] +mov es:[di+120],ax +mov ax,ds:[si+116] +mov es:[di+122],ax +add si,cx +mov al,ds:[si+118] +mov ah,ds:[si+120] +mov es:[di+124],ax +mov ax,ds:[si+121] +mov es:[di+126],ax +mov ax,ds:[si+123] +mov es:[di+128],ax +mov al,ds:[si+125] +mov ah,ds:[si+127] +mov es:[di+130],ax +mov ax,ds:[si+128] +mov es:[di+132],ax +mov ax,ds:[si+130] +mov es:[di+134],ax +mov al,ds:[si+132] +mov ah,ds:[si+134] +mov es:[di+136],ax +mov ax,ds:[si+135] +mov es:[di+138],ax +mov ax,ds:[si+137] +mov es:[di+140],ax +mov al,ds:[si+139] +mov ah,ds:[si+141] +mov es:[di+142],ax +mov ax,ds:[si+142] +mov es:[di+144],ax +mov ax,ds:[si+144] +mov es:[di+146],ax +mov al,ds:[si+146] +mov ah,ds:[si+148] +mov es:[di+148],ax +mov ax,ds:[si+149] +mov es:[di+150],ax +mov ax,ds:[si+151] +mov es:[di+152],ax +mov al,ds:[si+153] +mov ah,ds:[si+155] +mov es:[di+154],ax +mov ax,ds:[si+156] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+162] +mov es:[di+162],ax +mov ax,ds:[si+164] +mov es:[di+164],ax +mov ax,ds:[si+167] +mov es:[di+166],ax +mov ax,ds:[si+169] +mov es:[di+168],ax +mov ax,ds:[si+171] +mov es:[di+170],ax +mov ax,ds:[si+174] +mov es:[di+172],ax +mov ax,ds:[si+176] +mov es:[di+174],ax +mov ax,ds:[si+178] +mov es:[di+176],ax +mov ax,ds:[si+181] +mov es:[di+178],ax +mov ax,ds:[si+183] +mov es:[di+180],ax +mov ax,ds:[si+185] +mov es:[di+182],ax +mov ax,ds:[si+188] +mov es:[di+184],ax +mov ax,ds:[si+190] +mov es:[di+186],ax +mov ax,ds:[si+192] +mov es:[di+188],ax +mov ax,ds:[si+195] +mov es:[di+190],ax +add si,cx +mov ax,ds:[si+197] +mov es:[di+192],ax +mov ax,ds:[si+199] +mov es:[di+194],ax +mov ax,ds:[si+202] +mov es:[di+196],ax +mov ax,ds:[si+204] +mov es:[di+198],ax +mov ax,ds:[si+206] +mov es:[di+200],ax +mov ax,ds:[si+209] +mov es:[di+202],ax +mov ax,ds:[si+211] +mov es:[di+204],ax +mov ax,ds:[si+213] +mov es:[di+206],ax +mov ax,ds:[si+216] +mov es:[di+208],ax +mov ax,ds:[si+218] +mov es:[di+210],ax +mov ax,ds:[si+220] +mov es:[di+212],ax +mov ax,ds:[si+223] +mov es:[di+214],ax +mov ax,ds:[si+225] +mov es:[di+216],ax +mov ax,ds:[si+227] +mov es:[di+218],ax +mov ax,ds:[si+230] +mov es:[di+220],ax +mov ax,ds:[si+232] +mov es:[di+222],ax +mov ax,ds:[si+234] +mov es:[di+224],ax +mov ax,ds:[si+237] +mov es:[di+226],ax +add si,cx +mov ax,ds:[si+239] +mov es:[di+228],ax +mov ax,ds:[si+241] +mov es:[di+230],ax +mov ax,ds:[si+244] +mov es:[di+232],ax +mov ax,ds:[si+246] +mov es:[di+234],ax +mov ax,ds:[si+248] +mov es:[di+236],ax +mov ax,ds:[si+251] +mov es:[di+238],ax +mov ax,ds:[si+253] +mov es:[di+240],ax +mov ax,ds:[si+255] +mov es:[di+242],ax +mov ax,ds:[si+258] +mov es:[di+244],ax +mov ax,ds:[si+260] +mov es:[di+246],ax +mov ax,ds:[si+262] +mov es:[di+248],ax +mov ax,ds:[si+265] +mov es:[di+250],ax +mov ax,ds:[si+267] +mov es:[di+252],ax +mov ax,ds:[si+269] +mov es:[di+254],ax +mov ax,ds:[si+272] +mov es:[di+256],ax +mov ax,ds:[si+274] +mov es:[di+258],ax +mov ax,ds:[si+276] +mov es:[di+260],ax +mov ax,ds:[si+279] +mov es:[di+262],ax +mov ax,ds:[si+281] +mov es:[di+264],ax +mov ax,ds:[si+283] +mov es:[di+266],ax +mov ax,ds:[si+286] +mov es:[di+268],ax +mov ax,ds:[si+288] +mov es:[di+270],ax +mov ax,ds:[si+290] +mov es:[di+272],ax +mov ax,ds:[si+293] +mov es:[di+274],ax +mov ax,ds:[si+295] +mov es:[di+276],ax +mov ax,ds:[si+297] +mov es:[di+278],ax +mov ax,ds:[si+300] +mov es:[di+280],ax +mov ax,ds:[si+302] +mov es:[di+282],ax +mov ax,ds:[si+304] +mov es:[di+284],ax +mov ax,ds:[si+307] +mov es:[di+286],ax +mov ax,ds:[si+309] +mov es:[di+288],ax +mov ax,ds:[si+311] +mov es:[di+290],ax +mov ax,ds:[si+314] +mov es:[di+292],ax +mov ax,ds:[si+316] +mov es:[di+294],ax +mov al,ds:[si+318] +mov ah,dl +mov es:[di+296],ax +mov es:[di+298],dx +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_280: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],edx +mov al,ds:[si+0] +mov ah,ds:[si+2] +mov es:[di+20],ax +mov ax,ds:[si+3] +mov es:[di+22],ax +mov ax,ds:[si+5] +mov es:[di+24],ax +mov ax,ds:[si+7] +mov es:[di+26],ax +mov ax,ds:[si+10] +mov es:[di+28],ax +mov ax,ds:[si+12] +mov es:[di+30],ax +mov ax,ds:[si+14] +mov es:[di+32],ax +mov al,ds:[si+16] +mov ah,ds:[si+18] +mov es:[di+34],ax +mov ax,ds:[si+19] +mov es:[di+36],ax +mov ax,ds:[si+21] +mov es:[di+38],ax +mov ax,ds:[si+23] +mov es:[di+40],ax +mov ax,ds:[si+26] +mov es:[di+42],ax +mov ax,ds:[si+28] +mov es:[di+44],ax +mov ax,ds:[si+30] +mov es:[di+46],ax +mov al,ds:[si+32] +mov ah,ds:[si+34] +mov es:[di+48],ax +mov ax,ds:[si+35] +mov es:[di+50],ax +mov ax,ds:[si+37] +mov es:[di+52],ax +mov ax,ds:[si+39] +mov es:[di+54],ax +mov ax,ds:[si+42] +mov es:[di+56],ax +mov ax,ds:[si+44] +mov es:[di+58],ax +mov ax,ds:[si+46] +mov es:[di+60],ax +mov al,ds:[si+48] +mov ah,ds:[si+50] +mov es:[di+62],ax +mov ax,ds:[si+51] +mov es:[di+64],ax +mov ax,ds:[si+53] +mov es:[di+66],ax +mov ax,ds:[si+55] +mov es:[di+68],ax +mov ax,ds:[si+58] +mov es:[di+70],ax +mov ax,ds:[si+60] +mov es:[di+72],ax +mov ax,ds:[si+62] +mov es:[di+74],ax +mov al,ds:[si+64] +mov ah,ds:[si+66] +mov es:[di+76],ax +mov ax,ds:[si+67] +mov es:[di+78],ax +mov ax,ds:[si+69] +mov es:[di+80],ax +mov ax,ds:[si+71] +mov es:[di+82],ax +mov ax,ds:[si+74] +mov es:[di+84],ax +mov ax,ds:[si+76] +mov es:[di+86],ax +add si,cx +mov ax,ds:[si+78] +mov es:[di+88],ax +mov al,ds:[si+80] +mov ah,ds:[si+82] +mov es:[di+90],ax +mov ax,ds:[si+83] +mov es:[di+92],ax +mov ax,ds:[si+85] +mov es:[di+94],ax +mov ax,ds:[si+87] +mov es:[di+96],ax +mov ax,ds:[si+90] +mov es:[di+98],ax +mov ax,ds:[si+92] +mov es:[di+100],ax +mov ax,ds:[si+94] +mov es:[di+102],ax +mov al,ds:[si+96] +mov ah,ds:[si+98] +mov es:[di+104],ax +mov ax,ds:[si+99] +mov es:[di+106],ax +mov ax,ds:[si+101] +mov es:[di+108],ax +mov ax,ds:[si+103] +mov es:[di+110],ax +mov ax,ds:[si+106] +mov es:[di+112],ax +mov ax,ds:[si+108] +mov es:[di+114],ax +mov ax,ds:[si+110] +mov es:[di+116],ax +mov al,ds:[si+112] +mov ah,ds:[si+114] +mov es:[di+118],ax +mov ax,ds:[si+115] +mov es:[di+120],ax +mov ax,ds:[si+117] +mov es:[di+122],ax +add si,cx +mov ax,ds:[si+119] +mov es:[di+124],ax +mov ax,ds:[si+122] +mov es:[di+126],ax +mov ax,ds:[si+124] +mov es:[di+128],ax +mov ax,ds:[si+126] +mov es:[di+130],ax +mov al,ds:[si+128] +mov ah,ds:[si+130] +mov es:[di+132],ax +mov ax,ds:[si+131] +mov es:[di+134],ax +mov ax,ds:[si+133] +mov es:[di+136],ax +mov ax,ds:[si+135] +mov es:[di+138],ax +mov ax,ds:[si+138] +mov es:[di+140],ax +mov ax,ds:[si+140] +mov es:[di+142],ax +mov ax,ds:[si+142] +mov es:[di+144],ax +mov al,ds:[si+144] +mov ah,ds:[si+146] +mov es:[di+146],ax +mov ax,ds:[si+147] +mov es:[di+148],ax +mov ax,ds:[si+149] +mov es:[di+150],ax +mov ax,ds:[si+151] +mov es:[di+152],ax +mov ax,ds:[si+154] +mov es:[di+154],ax +mov ax,ds:[si+156] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+162] +mov es:[di+162],ax +mov ax,ds:[si+164] +mov es:[di+164],ax +mov al,ds:[si+166] +mov ah,ds:[si+168] +mov es:[di+166],ax +mov ax,ds:[si+169] +mov es:[di+168],ax +mov ax,ds:[si+171] +mov es:[di+170],ax +mov ax,ds:[si+173] +mov es:[di+172],ax +mov ax,ds:[si+176] +mov es:[di+174],ax +mov ax,ds:[si+178] +mov es:[di+176],ax +mov ax,ds:[si+180] +mov es:[di+178],ax +mov al,ds:[si+182] +mov ah,ds:[si+184] +mov es:[di+180],ax +mov ax,ds:[si+185] +mov es:[di+182],ax +mov ax,ds:[si+187] +mov es:[di+184],ax +mov ax,ds:[si+189] +mov es:[di+186],ax +mov ax,ds:[si+192] +mov es:[di+188],ax +mov ax,ds:[si+194] +mov es:[di+190],ax +add si,cx +mov ax,ds:[si+196] +mov es:[di+192],ax +mov al,ds:[si+198] +mov ah,ds:[si+200] +mov es:[di+194],ax +mov ax,ds:[si+201] +mov es:[di+196],ax +mov ax,ds:[si+203] +mov es:[di+198],ax +mov ax,ds:[si+205] +mov es:[di+200],ax +mov ax,ds:[si+208] +mov es:[di+202],ax +mov ax,ds:[si+210] +mov es:[di+204],ax +mov ax,ds:[si+212] +mov es:[di+206],ax +mov al,ds:[si+214] +mov ah,ds:[si+216] +mov es:[di+208],ax +mov ax,ds:[si+217] +mov es:[di+210],ax +mov ax,ds:[si+219] +mov es:[di+212],ax +mov ax,ds:[si+221] +mov es:[di+214],ax +mov ax,ds:[si+224] +mov es:[di+216],ax +mov ax,ds:[si+226] +mov es:[di+218],ax +mov ax,ds:[si+228] +mov es:[di+220],ax +mov al,ds:[si+230] +mov ah,ds:[si+232] +mov es:[di+222],ax +mov ax,ds:[si+233] +mov es:[di+224],ax +mov ax,ds:[si+235] +mov es:[di+226],ax +add si,cx +mov ax,ds:[si+237] +mov es:[di+228],ax +mov ax,ds:[si+240] +mov es:[di+230],ax +mov ax,ds:[si+242] +mov es:[di+232],ax +mov ax,ds:[si+244] +mov es:[di+234],ax +mov al,ds:[si+246] +mov ah,ds:[si+248] +mov es:[di+236],ax +mov ax,ds:[si+249] +mov es:[di+238],ax +mov ax,ds:[si+251] +mov es:[di+240],ax +mov ax,ds:[si+253] +mov es:[di+242],ax +mov ax,ds:[si+256] +mov es:[di+244],ax +mov ax,ds:[si+258] +mov es:[di+246],ax +mov ax,ds:[si+260] +mov es:[di+248],ax +mov al,ds:[si+262] +mov ah,ds:[si+264] +mov es:[di+250],ax +mov ax,ds:[si+265] +mov es:[di+252],ax +mov ax,ds:[si+267] +mov es:[di+254],ax +mov ax,ds:[si+269] +mov es:[di+256],ax +mov ax,ds:[si+272] +mov es:[di+258],ax +mov ax,ds:[si+274] +mov es:[di+260],ax +mov ax,ds:[si+276] +mov es:[di+262],ax +mov al,ds:[si+278] +mov ah,ds:[si+280] +mov es:[di+264],ax +mov ax,ds:[si+281] +mov es:[di+266],ax +mov ax,ds:[si+283] +mov es:[di+268],ax +mov ax,ds:[si+285] +mov es:[di+270],ax +mov ax,ds:[si+288] +mov es:[di+272],ax +mov ax,ds:[si+290] +mov es:[di+274],ax +mov ax,ds:[si+292] +mov es:[di+276],ax +mov al,ds:[si+294] +mov ah,ds:[si+296] +mov es:[di+278],ax +mov ax,ds:[si+297] +mov es:[di+280],ax +mov ax,ds:[si+299] +mov es:[di+282],ax +mov ax,ds:[si+301] +mov es:[di+284],ax +mov ax,ds:[si+304] +mov es:[di+286],ax +mov ax,ds:[si+306] +mov es:[di+288],ax +mov ax,ds:[si+308] +mov es:[di+290],ax +mov al,ds:[si+310] +mov ah,ds:[si+312] +mov es:[di+292],ax +mov ax,ds:[si+313] +mov es:[di+294],ax +mov ax,ds:[si+315] +mov es:[di+296],ax +mov ax,ds:[si+317] +mov es:[di+298],ax +mov es:[di+300],edx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_282: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov es:[di+16],dx +mov al,dl +mov ah,ds:[si+0] +mov es:[di+18],ax +mov ax,ds:[si+2] +mov es:[di+20],ax +mov ax,ds:[si+4] +mov es:[di+22],ax +mov ax,ds:[si+6] +mov es:[di+24],ax +mov al,ds:[si+8] +mov ah,ds:[si+10] +mov es:[di+26],ax +mov ax,ds:[si+11] +mov es:[di+28],ax +mov ax,ds:[si+13] +mov es:[di+30],ax +mov ax,ds:[si+15] +mov es:[di+32],ax +mov ax,ds:[si+18] +mov es:[di+34],ax +mov ax,ds:[si+20] +mov es:[di+36],ax +mov ax,ds:[si+22] +mov es:[di+38],ax +mov ax,ds:[si+24] +mov es:[di+40],ax +mov ax,ds:[si+27] +mov es:[di+42],ax +mov ax,ds:[si+29] +mov es:[di+44],ax +mov ax,ds:[si+31] +mov es:[di+46],ax +mov al,ds:[si+33] +mov ah,ds:[si+35] +mov es:[di+48],ax +mov ax,ds:[si+36] +mov es:[di+50],ax +mov ax,ds:[si+38] +mov es:[di+52],ax +mov ax,ds:[si+40] +mov es:[di+54],ax +mov al,ds:[si+42] +mov ah,ds:[si+44] +mov es:[di+56],ax +mov ax,ds:[si+45] +mov es:[di+58],ax +mov ax,ds:[si+47] +mov es:[di+60],ax +mov ax,ds:[si+49] +mov es:[di+62],ax +mov ax,ds:[si+52] +mov es:[di+64],ax +mov ax,ds:[si+54] +mov es:[di+66],ax +mov ax,ds:[si+56] +mov es:[di+68],ax +mov al,ds:[si+58] +mov ah,ds:[si+60] +mov es:[di+70],ax +mov ax,ds:[si+61] +mov es:[di+72],ax +mov ax,ds:[si+63] +mov es:[di+74],ax +mov ax,ds:[si+65] +mov es:[di+76],ax +mov al,ds:[si+67] +mov ah,ds:[si+69] +mov es:[di+78],ax +mov ax,ds:[si+70] +mov es:[di+80],ax +mov ax,ds:[si+72] +mov es:[di+82],ax +mov ax,ds:[si+74] +mov es:[di+84],ax +mov ax,ds:[si+77] +mov es:[di+86],ax +add si,cx +mov ax,ds:[si+79] +mov es:[di+88],ax +mov ax,ds:[si+81] +mov es:[di+90],ax +mov ax,ds:[si+83] +mov es:[di+92],ax +mov ax,ds:[si+86] +mov es:[di+94],ax +mov ax,ds:[si+88] +mov es:[di+96],ax +mov ax,ds:[si+90] +mov es:[di+98],ax +mov al,ds:[si+92] +mov ah,ds:[si+94] +mov es:[di+100],ax +mov ax,ds:[si+95] +mov es:[di+102],ax +mov ax,ds:[si+97] +mov es:[di+104],ax +mov ax,ds:[si+99] +mov es:[di+106],ax +mov al,ds:[si+101] +mov ah,ds:[si+103] +mov es:[di+108],ax +mov ax,ds:[si+104] +mov es:[di+110],ax +mov ax,ds:[si+106] +mov es:[di+112],ax +mov ax,ds:[si+108] +mov es:[di+114],ax +mov ax,ds:[si+111] +mov es:[di+116],ax +mov ax,ds:[si+113] +mov es:[di+118],ax +mov ax,ds:[si+115] +mov es:[di+120],ax +mov al,ds:[si+117] +mov ah,ds:[si+119] +mov es:[di+122],ax +add si,cx +mov ax,ds:[si+120] +mov es:[di+124],ax +mov ax,ds:[si+122] +mov es:[di+126],ax +mov ax,ds:[si+124] +mov es:[di+128],ax +mov al,ds:[si+126] +mov ah,ds:[si+128] +mov es:[di+130],ax +mov ax,ds:[si+129] +mov es:[di+132],ax +mov ax,ds:[si+131] +mov es:[di+134],ax +mov ax,ds:[si+133] +mov es:[di+136],ax +mov ax,ds:[si+136] +mov es:[di+138],ax +mov ax,ds:[si+138] +mov es:[di+140],ax +mov ax,ds:[si+140] +mov es:[di+142],ax +mov ax,ds:[si+142] +mov es:[di+144],ax +mov ax,ds:[si+145] +mov es:[di+146],ax +mov ax,ds:[si+147] +mov es:[di+148],ax +mov ax,ds:[si+149] +mov es:[di+150],ax +mov al,ds:[si+151] +mov ah,ds:[si+153] +mov es:[di+152],ax +mov ax,ds:[si+154] +mov es:[di+154],ax +mov ax,ds:[si+156] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+162] +mov es:[di+162],ax +mov ax,ds:[si+164] +mov es:[di+164],ax +mov ax,ds:[si+166] +mov es:[di+166],ax +mov ax,ds:[si+169] +mov es:[di+168],ax +mov ax,ds:[si+171] +mov es:[di+170],ax +mov ax,ds:[si+173] +mov es:[di+172],ax +mov al,ds:[si+175] +mov ah,ds:[si+177] +mov es:[di+174],ax +mov ax,ds:[si+178] +mov es:[di+176],ax +mov ax,ds:[si+180] +mov es:[di+178],ax +mov ax,ds:[si+182] +mov es:[di+180],ax +mov al,ds:[si+184] +mov ah,ds:[si+186] +mov es:[di+182],ax +mov ax,ds:[si+187] +mov es:[di+184],ax +mov ax,ds:[si+189] +mov es:[di+186],ax +mov ax,ds:[si+191] +mov es:[di+188],ax +mov ax,ds:[si+194] +mov es:[di+190],ax +add si,cx +mov ax,ds:[si+196] +mov es:[di+192],ax +mov ax,ds:[si+198] +mov es:[di+194],ax +mov ax,ds:[si+200] +mov es:[di+196],ax +mov ax,ds:[si+203] +mov es:[di+198],ax +mov ax,ds:[si+205] +mov es:[di+200],ax +mov ax,ds:[si+207] +mov es:[di+202],ax +mov al,ds:[si+209] +mov ah,ds:[si+211] +mov es:[di+204],ax +mov ax,ds:[si+212] +mov es:[di+206],ax +mov ax,ds:[si+214] +mov es:[di+208],ax +mov ax,ds:[si+216] +mov es:[di+210],ax +mov ax,ds:[si+219] +mov es:[di+212],ax +mov ax,ds:[si+221] +mov es:[di+214],ax +mov ax,ds:[si+223] +mov es:[di+216],ax +mov ax,ds:[si+225] +mov es:[di+218],ax +mov ax,ds:[si+228] +mov es:[di+220],ax +mov ax,ds:[si+230] +mov es:[di+222],ax +mov ax,ds:[si+232] +mov es:[di+224],ax +mov al,ds:[si+234] +mov ah,ds:[si+236] +mov es:[di+226],ax +add si,cx +mov ax,ds:[si+237] +mov es:[di+228],ax +mov ax,ds:[si+239] +mov es:[di+230],ax +mov ax,ds:[si+241] +mov es:[di+232],ax +mov al,ds:[si+243] +mov ah,ds:[si+245] +mov es:[di+234],ax +mov ax,ds:[si+246] +mov es:[di+236],ax +mov ax,ds:[si+248] +mov es:[di+238],ax +mov ax,ds:[si+250] +mov es:[di+240],ax +mov ax,ds:[si+253] +mov es:[di+242],ax +mov ax,ds:[si+255] +mov es:[di+244],ax +mov ax,ds:[si+257] +mov es:[di+246],ax +mov ax,ds:[si+259] +mov es:[di+248],ax +mov ax,ds:[si+262] +mov es:[di+250],ax +mov ax,ds:[si+264] +mov es:[di+252],ax +mov ax,ds:[si+266] +mov es:[di+254],ax +mov al,ds:[si+268] +mov ah,ds:[si+270] +mov es:[di+256],ax +mov ax,ds:[si+271] +mov es:[di+258],ax +mov ax,ds:[si+273] +mov es:[di+260],ax +mov ax,ds:[si+275] +mov es:[di+262],ax +mov ax,ds:[si+278] +mov es:[di+264],ax +mov ax,ds:[si+280] +mov es:[di+266],ax +mov ax,ds:[si+282] +mov es:[di+268],ax +mov ax,ds:[si+284] +mov es:[di+270],ax +mov ax,ds:[si+287] +mov es:[di+272],ax +mov ax,ds:[si+289] +mov es:[di+274],ax +mov ax,ds:[si+291] +mov es:[di+276],ax +mov al,ds:[si+293] +mov ah,ds:[si+295] +mov es:[di+278],ax +mov ax,ds:[si+296] +mov es:[di+280],ax +mov ax,ds:[si+298] +mov es:[di+282],ax +mov ax,ds:[si+300] +mov es:[di+284],ax +mov al,ds:[si+302] +mov ah,ds:[si+304] +mov es:[di+286],ax +mov ax,ds:[si+305] +mov es:[di+288],ax +mov ax,ds:[si+307] +mov es:[di+290],ax +mov ax,ds:[si+309] +mov es:[di+292],ax +mov ax,ds:[si+312] +mov es:[di+294],ax +mov ax,ds:[si+314] +mov es:[di+296],ax +mov ax,ds:[si+316] +mov es:[di+298],ax +mov al,ds:[si+318] +mov ah,dl +mov es:[di+300],ax +mov es:[di+302],dx +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_288: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],edx +mov al,ds:[si+0] +mov ah,ds:[si+2] +mov es:[di+16],ax +mov ax,ds:[si+3] +mov es:[di+18],ax +mov ax,ds:[si+5] +mov es:[di+20],ax +mov ax,ds:[si+7] +mov es:[di+22],ax +mov ax,ds:[si+9] +mov es:[di+24],ax +mov ax,ds:[si+12] +mov es:[di+26],ax +mov ax,ds:[si+14] +mov es:[di+28],ax +mov ax,ds:[si+16] +mov es:[di+30],ax +mov ax,ds:[si+18] +mov es:[di+32],ax +mov al,ds:[si+20] +mov ah,ds:[si+22] +mov es:[di+34],ax +mov ax,ds:[si+23] +mov es:[di+36],ax +mov ax,ds:[si+25] +mov es:[di+38],ax +mov ax,ds:[si+27] +mov es:[di+40],ax +mov ax,ds:[si+29] +mov es:[di+42],ax +mov ax,ds:[si+32] +mov es:[di+44],ax +mov ax,ds:[si+34] +mov es:[di+46],ax +mov ax,ds:[si+36] +mov es:[di+48],ax +mov ax,ds:[si+38] +mov es:[di+50],ax +mov al,ds:[si+40] +mov ah,ds:[si+42] +mov es:[di+52],ax +mov ax,ds:[si+43] +mov es:[di+54],ax +mov ax,ds:[si+45] +mov es:[di+56],ax +mov ax,ds:[si+47] +mov es:[di+58],ax +mov ax,ds:[si+49] +mov es:[di+60],ax +mov ax,ds:[si+52] +mov es:[di+62],ax +mov ax,ds:[si+54] +mov es:[di+64],ax +mov ax,ds:[si+56] +mov es:[di+66],ax +mov ax,ds:[si+58] +mov es:[di+68],ax +mov al,ds:[si+60] +mov ah,ds:[si+62] +mov es:[di+70],ax +mov ax,ds:[si+63] +mov es:[di+72],ax +mov ax,ds:[si+65] +mov es:[di+74],ax +mov ax,ds:[si+67] +mov es:[di+76],ax +mov ax,ds:[si+69] +mov es:[di+78],ax +mov ax,ds:[si+72] +mov es:[di+80],ax +mov ax,ds:[si+74] +mov es:[di+82],ax +mov ax,ds:[si+76] +mov es:[di+84],ax +mov ax,ds:[si+78] +mov es:[di+86],ax +add si,cx +mov al,ds:[si+80] +mov ah,ds:[si+82] +mov es:[di+88],ax +mov ax,ds:[si+83] +mov es:[di+90],ax +mov ax,ds:[si+85] +mov es:[di+92],ax +mov ax,ds:[si+87] +mov es:[di+94],ax +mov ax,ds:[si+89] +mov es:[di+96],ax +mov ax,ds:[si+92] +mov es:[di+98],ax +mov ax,ds:[si+94] +mov es:[di+100],ax +mov ax,ds:[si+96] +mov es:[di+102],ax +mov ax,ds:[si+98] +mov es:[di+104],ax +mov al,ds:[si+100] +mov ah,ds:[si+102] +mov es:[di+106],ax +mov ax,ds:[si+103] +mov es:[di+108],ax +mov ax,ds:[si+105] +mov es:[di+110],ax +mov ax,ds:[si+107] +mov es:[di+112],ax +mov ax,ds:[si+109] +mov es:[di+114],ax +mov ax,ds:[si+112] +mov es:[di+116],ax +mov ax,ds:[si+114] +mov es:[di+118],ax +mov ax,ds:[si+116] +mov es:[di+120],ax +mov ax,ds:[si+118] +mov es:[di+122],ax +add si,cx +mov al,ds:[si+120] +mov ah,ds:[si+122] +mov es:[di+124],ax +mov ax,ds:[si+123] +mov es:[di+126],ax +mov ax,ds:[si+125] +mov es:[di+128],ax +mov ax,ds:[si+127] +mov es:[di+130],ax +mov ax,ds:[si+129] +mov es:[di+132],ax +mov ax,ds:[si+132] +mov es:[di+134],ax +mov ax,ds:[si+134] +mov es:[di+136],ax +mov ax,ds:[si+136] +mov es:[di+138],ax +mov ax,ds:[si+138] +mov es:[di+140],ax +mov al,ds:[si+140] +mov ah,ds:[si+142] +mov es:[di+142],ax +mov ax,ds:[si+143] +mov es:[di+144],ax +mov ax,ds:[si+145] +mov es:[di+146],ax +mov ax,ds:[si+147] +mov es:[di+148],ax +mov ax,ds:[si+149] +mov es:[di+150],ax +mov ax,ds:[si+152] +mov es:[di+152],ax +mov ax,ds:[si+154] +mov es:[di+154],ax +mov ax,ds:[si+156] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+162] +mov es:[di+162],ax +mov ax,ds:[si+164] +mov es:[di+164],ax +mov ax,ds:[si+166] +mov es:[di+166],ax +mov al,ds:[si+168] +mov ah,ds:[si+170] +mov es:[di+168],ax +mov ax,ds:[si+171] +mov es:[di+170],ax +mov ax,ds:[si+173] +mov es:[di+172],ax +mov ax,ds:[si+175] +mov es:[di+174],ax +mov ax,ds:[si+177] +mov es:[di+176],ax +mov ax,ds:[si+180] +mov es:[di+178],ax +mov ax,ds:[si+182] +mov es:[di+180],ax +mov ax,ds:[si+184] +mov es:[di+182],ax +mov ax,ds:[si+186] +mov es:[di+184],ax +mov al,ds:[si+188] +mov ah,ds:[si+190] +mov es:[di+186],ax +mov ax,ds:[si+191] +mov es:[di+188],ax +mov ax,ds:[si+193] +mov es:[di+190],ax +mov ax,ds:[si+195] +mov es:[di+192],ax +mov ax,ds:[si+197] +mov es:[di+194],ax +add si,cx +mov ax,ds:[si+200] +mov es:[di+196],ax +mov ax,ds:[si+202] +mov es:[di+198],ax +mov ax,ds:[si+204] +mov es:[di+200],ax +mov ax,ds:[si+206] +mov es:[di+202],ax +mov al,ds:[si+208] +mov ah,ds:[si+210] +mov es:[di+204],ax +mov ax,ds:[si+211] +mov es:[di+206],ax +mov ax,ds:[si+213] +mov es:[di+208],ax +mov ax,ds:[si+215] +mov es:[di+210],ax +mov ax,ds:[si+217] +mov es:[di+212],ax +mov ax,ds:[si+220] +mov es:[di+214],ax +mov ax,ds:[si+222] +mov es:[di+216],ax +mov ax,ds:[si+224] +mov es:[di+218],ax +mov ax,ds:[si+226] +mov es:[di+220],ax +mov al,ds:[si+228] +mov ah,ds:[si+230] +mov es:[di+222],ax +mov ax,ds:[si+231] +mov es:[di+224],ax +mov ax,ds:[si+233] +mov es:[di+226],ax +mov ax,ds:[si+235] +mov es:[di+228],ax +mov ax,ds:[si+237] +mov es:[di+230],ax +add si,cx +mov ax,ds:[si+240] +mov es:[di+232],ax +mov ax,ds:[si+242] +mov es:[di+234],ax +mov ax,ds:[si+244] +mov es:[di+236],ax +mov ax,ds:[si+246] +mov es:[di+238],ax +mov al,ds:[si+248] +mov ah,ds:[si+250] +mov es:[di+240],ax +mov ax,ds:[si+251] +mov es:[di+242],ax +mov ax,ds:[si+253] +mov es:[di+244],ax +mov ax,ds:[si+255] +mov es:[di+246],ax +mov ax,ds:[si+257] +mov es:[di+248],ax +mov ax,ds:[si+260] +mov es:[di+250],ax +mov ax,ds:[si+262] +mov es:[di+252],ax +mov ax,ds:[si+264] +mov es:[di+254],ax +mov ax,ds:[si+266] +mov es:[di+256],ax +mov al,ds:[si+268] +mov ah,ds:[si+270] +mov es:[di+258],ax +mov ax,ds:[si+271] +mov es:[di+260],ax +mov ax,ds:[si+273] +mov es:[di+262],ax +mov ax,ds:[si+275] +mov es:[di+264],ax +mov ax,ds:[si+277] +mov es:[di+266],ax +mov ax,ds:[si+280] +mov es:[di+268],ax +mov ax,ds:[si+282] +mov es:[di+270],ax +mov ax,ds:[si+284] +mov es:[di+272],ax +mov ax,ds:[si+286] +mov es:[di+274],ax +mov al,ds:[si+288] +mov ah,ds:[si+290] +mov es:[di+276],ax +mov ax,ds:[si+291] +mov es:[di+278],ax +mov ax,ds:[si+293] +mov es:[di+280],ax +mov ax,ds:[si+295] +mov es:[di+282],ax +mov ax,ds:[si+297] +mov es:[di+284],ax +mov ax,ds:[si+300] +mov es:[di+286],ax +mov ax,ds:[si+302] +mov es:[di+288],ax +mov ax,ds:[si+304] +mov es:[di+290],ax +mov ax,ds:[si+306] +mov es:[di+292],ax +mov al,ds:[si+308] +mov ah,ds:[si+310] +mov es:[di+294],ax +mov ax,ds:[si+311] +mov es:[di+296],ax +mov ax,ds:[si+313] +mov es:[di+298],ax +mov ax,ds:[si+315] +mov es:[di+300],ax +mov ax,ds:[si+317] +mov es:[di+302],ax +mov es:[di+304],edx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_290: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov es:[di+12],dx +mov al,dl +mov ah,ds:[si+0] +mov es:[di+14],ax +mov ax,ds:[si+2] +mov es:[di+16],ax +mov ax,ds:[si+4] +mov es:[di+18],ax +mov ax,ds:[si+6] +mov es:[di+20],ax +mov ax,ds:[si+8] +mov es:[di+22],ax +mov al,ds:[si+10] +mov ah,ds:[si+12] +mov es:[di+24],ax +mov ax,ds:[si+13] +mov es:[di+26],ax +mov ax,ds:[si+15] +mov es:[di+28],ax +mov ax,ds:[si+17] +mov es:[di+30],ax +mov ax,ds:[si+19] +mov es:[di+32],ax +mov al,ds:[si+21] +mov ah,ds:[si+23] +mov es:[di+34],ax +mov ax,ds:[si+24] +mov es:[di+36],ax +mov ax,ds:[si+26] +mov es:[di+38],ax +mov ax,ds:[si+28] +mov es:[di+40],ax +mov ax,ds:[si+30] +mov es:[di+42],ax +mov al,ds:[si+32] +mov ah,ds:[si+34] +mov es:[di+44],ax +mov ax,ds:[si+35] +mov es:[di+46],ax +mov ax,ds:[si+37] +mov es:[di+48],ax +mov ax,ds:[si+39] +mov es:[di+50],ax +mov ax,ds:[si+41] +mov es:[di+52],ax +mov ax,ds:[si+44] +mov es:[di+54],ax +mov ax,ds:[si+46] +mov es:[di+56],ax +mov ax,ds:[si+48] +mov es:[di+58],ax +mov ax,ds:[si+50] +mov es:[di+60],ax +mov ax,ds:[si+52] +mov es:[di+62],ax +mov ax,ds:[si+55] +mov es:[di+64],ax +mov ax,ds:[si+57] +mov es:[di+66],ax +mov ax,ds:[si+59] +mov es:[di+68],ax +mov ax,ds:[si+61] +mov es:[di+70],ax +mov ax,ds:[si+63] +mov es:[di+72],ax +mov ax,ds:[si+66] +mov es:[di+74],ax +mov ax,ds:[si+68] +mov es:[di+76],ax +mov ax,ds:[si+70] +mov es:[di+78],ax +mov ax,ds:[si+72] +mov es:[di+80],ax +mov al,ds:[si+74] +mov ah,ds:[si+76] +mov es:[di+82],ax +mov ax,ds:[si+77] +mov es:[di+84],ax +mov ax,ds:[si+79] +mov es:[di+86],ax +add si,cx +mov ax,ds:[si+81] +mov es:[di+88],ax +mov ax,ds:[si+83] +mov es:[di+90],ax +mov al,ds:[si+85] +mov ah,ds:[si+87] +mov es:[di+92],ax +mov ax,ds:[si+88] +mov es:[di+94],ax +mov ax,ds:[si+90] +mov es:[di+96],ax +mov ax,ds:[si+92] +mov es:[di+98],ax +mov ax,ds:[si+94] +mov es:[di+100],ax +mov al,ds:[si+96] +mov ah,ds:[si+98] +mov es:[di+102],ax +mov ax,ds:[si+99] +mov es:[di+104],ax +mov ax,ds:[si+101] +mov es:[di+106],ax +mov ax,ds:[si+103] +mov es:[di+108],ax +mov ax,ds:[si+105] +mov es:[di+110],ax +mov ax,ds:[si+108] +mov es:[di+112],ax +mov ax,ds:[si+110] +mov es:[di+114],ax +mov ax,ds:[si+112] +mov es:[di+116],ax +mov ax,ds:[si+114] +mov es:[di+118],ax +mov ax,ds:[si+116] +mov es:[di+120],ax +mov ax,ds:[si+119] +mov es:[di+122],ax +add si,cx +mov ax,ds:[si+121] +mov es:[di+124],ax +mov ax,ds:[si+123] +mov es:[di+126],ax +mov ax,ds:[si+125] +mov es:[di+128],ax +mov ax,ds:[si+127] +mov es:[di+130],ax +mov ax,ds:[si+130] +mov es:[di+132],ax +mov ax,ds:[si+132] +mov es:[di+134],ax +mov ax,ds:[si+134] +mov es:[di+136],ax +mov ax,ds:[si+136] +mov es:[di+138],ax +mov al,ds:[si+138] +mov ah,ds:[si+140] +mov es:[di+140],ax +mov ax,ds:[si+141] +mov es:[di+142],ax +mov ax,ds:[si+143] +mov es:[di+144],ax +mov ax,ds:[si+145] +mov es:[di+146],ax +mov ax,ds:[si+147] +mov es:[di+148],ax +mov al,ds:[si+149] +mov ah,ds:[si+151] +mov es:[di+150],ax +mov ax,ds:[si+152] +mov es:[di+152],ax +mov ax,ds:[si+154] +mov es:[di+154],ax +mov ax,ds:[si+156] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+162] +mov es:[di+162],ax +mov ax,ds:[si+164] +mov es:[di+164],ax +mov ax,ds:[si+166] +mov es:[di+166],ax +mov ax,ds:[si+168] +mov es:[di+168],ax +mov ax,ds:[si+171] +mov es:[di+170],ax +mov ax,ds:[si+173] +mov es:[di+172],ax +mov ax,ds:[si+175] +mov es:[di+174],ax +mov ax,ds:[si+177] +mov es:[di+176],ax +mov ax,ds:[si+179] +mov es:[di+178],ax +mov ax,ds:[si+182] +mov es:[di+180],ax +mov ax,ds:[si+184] +mov es:[di+182],ax +mov ax,ds:[si+186] +mov es:[di+184],ax +mov ax,ds:[si+188] +mov es:[di+186],ax +mov al,ds:[si+190] +mov ah,ds:[si+192] +mov es:[di+188],ax +mov ax,ds:[si+193] +mov es:[di+190],ax +mov ax,ds:[si+195] +mov es:[di+192],ax +mov ax,ds:[si+197] +mov es:[di+194],ax +add si,cx +mov ax,ds:[si+199] +mov es:[di+196],ax +mov al,ds:[si+201] +mov ah,ds:[si+203] +mov es:[di+198],ax +mov ax,ds:[si+204] +mov es:[di+200],ax +mov ax,ds:[si+206] +mov es:[di+202],ax +mov ax,ds:[si+208] +mov es:[di+204],ax +mov ax,ds:[si+210] +mov es:[di+206],ax +mov al,ds:[si+212] +mov ah,ds:[si+214] +mov es:[di+208],ax +mov ax,ds:[si+215] +mov es:[di+210],ax +mov ax,ds:[si+217] +mov es:[di+212],ax +mov ax,ds:[si+219] +mov es:[di+214],ax +mov ax,ds:[si+221] +mov es:[di+216],ax +mov ax,ds:[si+224] +mov es:[di+218],ax +mov ax,ds:[si+226] +mov es:[di+220],ax +mov ax,ds:[si+228] +mov es:[di+222],ax +mov ax,ds:[si+230] +mov es:[di+224],ax +mov ax,ds:[si+232] +mov es:[di+226],ax +mov ax,ds:[si+235] +mov es:[di+228],ax +mov ax,ds:[si+237] +mov es:[di+230],ax +add si,cx +mov ax,ds:[si+239] +mov es:[di+232],ax +mov ax,ds:[si+241] +mov es:[di+234],ax +mov ax,ds:[si+243] +mov es:[di+236],ax +mov ax,ds:[si+246] +mov es:[di+238],ax +mov ax,ds:[si+248] +mov es:[di+240],ax +mov ax,ds:[si+250] +mov es:[di+242],ax +mov ax,ds:[si+252] +mov es:[di+244],ax +mov al,ds:[si+254] +mov ah,ds:[si+256] +mov es:[di+246],ax +mov ax,ds:[si+257] +mov es:[di+248],ax +mov ax,ds:[si+259] +mov es:[di+250],ax +mov ax,ds:[si+261] +mov es:[di+252],ax +mov ax,ds:[si+263] +mov es:[di+254],ax +mov al,ds:[si+265] +mov ah,ds:[si+267] +mov es:[di+256],ax +mov ax,ds:[si+268] +mov es:[di+258],ax +mov ax,ds:[si+270] +mov es:[di+260],ax +mov ax,ds:[si+272] +mov es:[di+262],ax +mov ax,ds:[si+274] +mov es:[di+264],ax +mov al,ds:[si+276] +mov ah,ds:[si+278] +mov es:[di+266],ax +mov ax,ds:[si+279] +mov es:[di+268],ax +mov ax,ds:[si+281] +mov es:[di+270],ax +mov ax,ds:[si+283] +mov es:[di+272],ax +mov ax,ds:[si+285] +mov es:[di+274],ax +mov ax,ds:[si+288] +mov es:[di+276],ax +mov ax,ds:[si+290] +mov es:[di+278],ax +mov ax,ds:[si+292] +mov es:[di+280],ax +mov ax,ds:[si+294] +mov es:[di+282],ax +mov ax,ds:[si+296] +mov es:[di+284],ax +mov ax,ds:[si+299] +mov es:[di+286],ax +mov ax,ds:[si+301] +mov es:[di+288],ax +mov ax,ds:[si+303] +mov es:[di+290],ax +mov ax,ds:[si+305] +mov es:[di+292],ax +mov ax,ds:[si+307] +mov es:[di+294],ax +mov ax,ds:[si+310] +mov es:[di+296],ax +mov ax,ds:[si+312] +mov es:[di+298],ax +mov ax,ds:[si+314] +mov es:[di+300],ax +mov ax,ds:[si+316] +mov es:[di+302],ax +mov al,ds:[si+318] +mov ah,dl +mov es:[di+304],ax +mov es:[di+306],dx +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_296: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],edx +mov al,ds:[si+0] +mov ah,ds:[si+2] +mov es:[di+12],ax +mov ax,ds:[si+3] +mov es:[di+14],ax +mov ax,ds:[si+5] +mov es:[di+16],ax +mov ax,ds:[si+7] +mov es:[di+18],ax +mov ax,ds:[si+9] +mov es:[di+20],ax +mov ax,ds:[si+11] +mov es:[di+22],ax +mov al,ds:[si+13] +mov ah,ds:[si+15] +mov es:[di+24],ax +mov ax,ds:[si+16] +mov es:[di+26],ax +mov ax,ds:[si+18] +mov es:[di+28],ax +mov ax,ds:[si+20] +mov es:[di+30],ax +mov ax,ds:[si+22] +mov es:[di+32],ax +mov ax,ds:[si+24] +mov es:[di+34],ax +mov al,ds:[si+26] +mov ah,ds:[si+28] +mov es:[di+36],ax +mov ax,ds:[si+29] +mov es:[di+38],ax +mov ax,ds:[si+31] +mov es:[di+40],ax +mov ax,ds:[si+33] +mov es:[di+42],ax +mov ax,ds:[si+35] +mov es:[di+44],ax +mov ax,ds:[si+37] +mov es:[di+46],ax +mov ax,ds:[si+39] +mov es:[di+48],ax +mov ax,ds:[si+42] +mov es:[di+50],ax +mov ax,ds:[si+44] +mov es:[di+52],ax +mov ax,ds:[si+46] +mov es:[di+54],ax +mov ax,ds:[si+48] +mov es:[di+56],ax +mov ax,ds:[si+50] +mov es:[di+58],ax +mov ax,ds:[si+52] +mov es:[di+60],ax +mov ax,ds:[si+55] +mov es:[di+62],ax +mov ax,ds:[si+57] +mov es:[di+64],ax +mov ax,ds:[si+59] +mov es:[di+66],ax +mov ax,ds:[si+61] +mov es:[di+68],ax +mov ax,ds:[si+63] +mov es:[di+70],ax +mov ax,ds:[si+65] +mov es:[di+72],ax +mov ax,ds:[si+68] +mov es:[di+74],ax +mov ax,ds:[si+70] +mov es:[di+76],ax +mov ax,ds:[si+72] +mov es:[di+78],ax +mov ax,ds:[si+74] +mov es:[di+80],ax +mov ax,ds:[si+76] +mov es:[di+82],ax +add si,cx +mov ax,ds:[si+78] +mov es:[di+84],ax +mov al,ds:[si+80] +mov ah,ds:[si+82] +mov es:[di+86],ax +mov ax,ds:[si+83] +mov es:[di+88],ax +mov ax,ds:[si+85] +mov es:[di+90],ax +mov ax,ds:[si+87] +mov es:[di+92],ax +mov ax,ds:[si+89] +mov es:[di+94],ax +mov ax,ds:[si+91] +mov es:[di+96],ax +mov al,ds:[si+93] +mov ah,ds:[si+95] +mov es:[di+98],ax +mov ax,ds:[si+96] +mov es:[di+100],ax +mov ax,ds:[si+98] +mov es:[di+102],ax +mov ax,ds:[si+100] +mov es:[di+104],ax +mov ax,ds:[si+102] +mov es:[di+106],ax +mov ax,ds:[si+104] +mov es:[di+108],ax +mov al,ds:[si+106] +mov ah,ds:[si+108] +mov es:[di+110],ax +mov ax,ds:[si+109] +mov es:[di+112],ax +mov ax,ds:[si+111] +mov es:[di+114],ax +mov ax,ds:[si+113] +mov es:[di+116],ax +mov ax,ds:[si+115] +mov es:[di+118],ax +add si,cx +mov ax,ds:[si+117] +mov es:[di+120],ax +mov ax,ds:[si+119] +mov es:[di+122],ax +mov ax,ds:[si+122] +mov es:[di+124],ax +mov ax,ds:[si+124] +mov es:[di+126],ax +mov ax,ds:[si+126] +mov es:[di+128],ax +mov ax,ds:[si+128] +mov es:[di+130],ax +mov ax,ds:[si+130] +mov es:[di+132],ax +mov ax,ds:[si+132] +mov es:[di+134],ax +mov ax,ds:[si+135] +mov es:[di+136],ax +mov ax,ds:[si+137] +mov es:[di+138],ax +mov ax,ds:[si+139] +mov es:[di+140],ax +mov ax,ds:[si+141] +mov es:[di+142],ax +mov ax,ds:[si+143] +mov es:[di+144],ax +mov ax,ds:[si+145] +mov es:[di+146],ax +mov ax,ds:[si+148] +mov es:[di+148],ax +mov ax,ds:[si+150] +mov es:[di+150],ax +mov ax,ds:[si+152] +mov es:[di+152],ax +mov ax,ds:[si+154] +mov es:[di+154],ax +mov ax,ds:[si+156] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+162] +mov es:[di+162],ax +mov ax,ds:[si+164] +mov es:[di+164],ax +mov ax,ds:[si+166] +mov es:[di+166],ax +mov ax,ds:[si+168] +mov es:[di+168],ax +mov ax,ds:[si+170] +mov es:[di+170],ax +mov al,ds:[si+172] +mov ah,ds:[si+174] +mov es:[di+172],ax +mov ax,ds:[si+175] +mov es:[di+174],ax +mov ax,ds:[si+177] +mov es:[di+176],ax +mov ax,ds:[si+179] +mov es:[di+178],ax +mov ax,ds:[si+181] +mov es:[di+180],ax +mov ax,ds:[si+183] +mov es:[di+182],ax +mov al,ds:[si+185] +mov ah,ds:[si+187] +mov es:[di+184],ax +mov ax,ds:[si+188] +mov es:[di+186],ax +mov ax,ds:[si+190] +mov es:[di+188],ax +mov ax,ds:[si+192] +mov es:[di+190],ax +mov ax,ds:[si+194] +mov es:[di+192],ax +mov ax,ds:[si+196] +mov es:[di+194],ax +add si,cx +mov al,ds:[si+198] +mov ah,ds:[si+200] +mov es:[di+196],ax +mov ax,ds:[si+201] +mov es:[di+198],ax +mov ax,ds:[si+203] +mov es:[di+200],ax +mov ax,ds:[si+205] +mov es:[di+202],ax +mov ax,ds:[si+207] +mov es:[di+204],ax +mov ax,ds:[si+209] +mov es:[di+206],ax +mov ax,ds:[si+211] +mov es:[di+208],ax +mov ax,ds:[si+214] +mov es:[di+210],ax +mov ax,ds:[si+216] +mov es:[di+212],ax +mov ax,ds:[si+218] +mov es:[di+214],ax +mov ax,ds:[si+220] +mov es:[di+216],ax +mov ax,ds:[si+222] +mov es:[di+218],ax +mov ax,ds:[si+224] +mov es:[di+220],ax +mov ax,ds:[si+227] +mov es:[di+222],ax +mov ax,ds:[si+229] +mov es:[di+224],ax +mov ax,ds:[si+231] +mov es:[di+226],ax +mov ax,ds:[si+233] +mov es:[di+228],ax +mov ax,ds:[si+235] +mov es:[di+230],ax +add si,cx +mov ax,ds:[si+237] +mov es:[di+232],ax +mov ax,ds:[si+240] +mov es:[di+234],ax +mov ax,ds:[si+242] +mov es:[di+236],ax +mov ax,ds:[si+244] +mov es:[di+238],ax +mov ax,ds:[si+246] +mov es:[di+240],ax +mov ax,ds:[si+248] +mov es:[di+242],ax +mov ax,ds:[si+250] +mov es:[di+244],ax +mov al,ds:[si+252] +mov ah,ds:[si+254] +mov es:[di+246],ax +mov ax,ds:[si+255] +mov es:[di+248],ax +mov ax,ds:[si+257] +mov es:[di+250],ax +mov ax,ds:[si+259] +mov es:[di+252],ax +mov ax,ds:[si+261] +mov es:[di+254],ax +mov ax,ds:[si+263] +mov es:[di+256],ax +mov al,ds:[si+265] +mov ah,ds:[si+267] +mov es:[di+258],ax +mov ax,ds:[si+268] +mov es:[di+260],ax +mov ax,ds:[si+270] +mov es:[di+262],ax +mov ax,ds:[si+272] +mov es:[di+264],ax +mov ax,ds:[si+274] +mov es:[di+266],ax +mov ax,ds:[si+276] +mov es:[di+268],ax +mov al,ds:[si+278] +mov ah,ds:[si+280] +mov es:[di+270],ax +mov ax,ds:[si+281] +mov es:[di+272],ax +mov ax,ds:[si+283] +mov es:[di+274],ax +mov ax,ds:[si+285] +mov es:[di+276],ax +mov ax,ds:[si+287] +mov es:[di+278],ax +mov ax,ds:[si+289] +mov es:[di+280],ax +mov ax,ds:[si+291] +mov es:[di+282],ax +mov ax,ds:[si+294] +mov es:[di+284],ax +mov ax,ds:[si+296] +mov es:[di+286],ax +mov ax,ds:[si+298] +mov es:[di+288],ax +mov ax,ds:[si+300] +mov es:[di+290],ax +mov ax,ds:[si+302] +mov es:[di+292],ax +mov ax,ds:[si+304] +mov es:[di+294],ax +mov ax,ds:[si+307] +mov es:[di+296],ax +mov ax,ds:[si+309] +mov es:[di+298],ax +mov ax,ds:[si+311] +mov es:[di+300],ax +mov ax,ds:[si+313] +mov es:[di+302],ax +mov ax,ds:[si+315] +mov es:[di+304],ax +mov ax,ds:[si+317] +mov es:[di+306],ax +mov es:[di+308],edx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_298: +mov es:[di+0],edx +mov es:[di+4],edx +mov es:[di+8],dx +mov al,dl +mov ah,ds:[si+0] +mov es:[di+10],ax +mov ax,ds:[si+2] +mov es:[di+12],ax +mov ax,ds:[si+4] +mov es:[di+14],ax +mov ax,ds:[si+6] +mov es:[di+16],ax +mov ax,ds:[si+8] +mov es:[di+18],ax +mov ax,ds:[si+10] +mov es:[di+20],ax +mov ax,ds:[si+12] +mov es:[di+22],ax +mov al,ds:[si+14] +mov ah,ds:[si+16] +mov es:[di+24],ax +mov ax,ds:[si+17] +mov es:[di+26],ax +mov ax,ds:[si+19] +mov es:[di+28],ax +mov ax,ds:[si+21] +mov es:[di+30],ax +mov ax,ds:[si+23] +mov es:[di+32],ax +mov ax,ds:[si+25] +mov es:[di+34],ax +mov ax,ds:[si+27] +mov es:[di+36],ax +mov al,ds:[si+29] +mov ah,ds:[si+31] +mov es:[di+38],ax +mov ax,ds:[si+32] +mov es:[di+40],ax +mov ax,ds:[si+34] +mov es:[di+42],ax +mov ax,ds:[si+36] +mov es:[di+44],ax +mov ax,ds:[si+38] +mov es:[di+46],ax +mov ax,ds:[si+40] +mov es:[di+48],ax +mov ax,ds:[si+42] +mov es:[di+50],ax +mov ax,ds:[si+45] +mov es:[di+52],ax +mov ax,ds:[si+47] +mov es:[di+54],ax +mov ax,ds:[si+49] +mov es:[di+56],ax +mov ax,ds:[si+51] +mov es:[di+58],ax +mov ax,ds:[si+53] +mov es:[di+60],ax +mov ax,ds:[si+55] +mov es:[di+62],ax +mov ax,ds:[si+57] +mov es:[di+64],ax +mov ax,ds:[si+60] +mov es:[di+66],ax +mov ax,ds:[si+62] +mov es:[di+68],ax +mov ax,ds:[si+64] +mov es:[di+70],ax +mov ax,ds:[si+66] +mov es:[di+72],ax +mov ax,ds:[si+68] +mov es:[di+74],ax +mov ax,ds:[si+70] +mov es:[di+76],ax +mov al,ds:[si+72] +mov ah,ds:[si+74] +mov es:[di+78],ax +mov ax,ds:[si+75] +mov es:[di+80],ax +mov ax,ds:[si+77] +mov es:[di+82],ax +add si,cx +mov ax,ds:[si+79] +mov es:[di+84],ax +mov ax,ds:[si+81] +mov es:[di+86],ax +mov ax,ds:[si+83] +mov es:[di+88],ax +mov ax,ds:[si+85] +mov es:[di+90],ax +mov al,ds:[si+87] +mov ah,ds:[si+89] +mov es:[di+92],ax +mov ax,ds:[si+90] +mov es:[di+94],ax +mov ax,ds:[si+92] +mov es:[di+96],ax +mov ax,ds:[si+94] +mov es:[di+98],ax +mov ax,ds:[si+96] +mov es:[di+100],ax +mov ax,ds:[si+98] +mov es:[di+102],ax +mov ax,ds:[si+100] +mov es:[di+104],ax +mov ax,ds:[si+103] +mov es:[di+106],ax +mov ax,ds:[si+105] +mov es:[di+108],ax +mov ax,ds:[si+107] +mov es:[di+110],ax +mov ax,ds:[si+109] +mov es:[di+112],ax +mov ax,ds:[si+111] +mov es:[di+114],ax +mov ax,ds:[si+113] +mov es:[di+116],ax +mov ax,ds:[si+115] +mov es:[di+118],ax +add si,cx +mov ax,ds:[si+118] +mov es:[di+120],ax +mov ax,ds:[si+120] +mov es:[di+122],ax +mov ax,ds:[si+122] +mov es:[di+124],ax +mov ax,ds:[si+124] +mov es:[di+126],ax +mov ax,ds:[si+126] +mov es:[di+128],ax +mov ax,ds:[si+128] +mov es:[di+130],ax +mov al,ds:[si+130] +mov ah,ds:[si+132] +mov es:[di+132],ax +mov ax,ds:[si+133] +mov es:[di+134],ax +mov ax,ds:[si+135] +mov es:[di+136],ax +mov ax,ds:[si+137] +mov es:[di+138],ax +mov ax,ds:[si+139] +mov es:[di+140],ax +mov ax,ds:[si+141] +mov es:[di+142],ax +mov ax,ds:[si+143] +mov es:[di+144],ax +mov al,ds:[si+145] +mov ah,ds:[si+147] +mov es:[di+146],ax +mov ax,ds:[si+148] +mov es:[di+148],ax +mov ax,ds:[si+150] +mov es:[di+150],ax +mov ax,ds:[si+152] +mov es:[di+152],ax +mov ax,ds:[si+154] +mov es:[di+154],ax +mov ax,ds:[si+156] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+162] +mov es:[di+162],ax +mov ax,ds:[si+164] +mov es:[di+164],ax +mov ax,ds:[si+166] +mov es:[di+166],ax +mov ax,ds:[si+168] +mov es:[di+168],ax +mov ax,ds:[si+170] +mov es:[di+170],ax +mov ax,ds:[si+172] +mov es:[di+172],ax +mov ax,ds:[si+175] +mov es:[di+174],ax +mov ax,ds:[si+177] +mov es:[di+176],ax +mov ax,ds:[si+179] +mov es:[di+178],ax +mov ax,ds:[si+181] +mov es:[di+180],ax +mov ax,ds:[si+183] +mov es:[di+182],ax +mov ax,ds:[si+185] +mov es:[di+184],ax +mov ax,ds:[si+187] +mov es:[di+186],ax +mov ax,ds:[si+190] +mov es:[di+188],ax +mov ax,ds:[si+192] +mov es:[di+190],ax +mov ax,ds:[si+194] +mov es:[di+192],ax +mov ax,ds:[si+196] +mov es:[di+194],ax +add si,cx +mov ax,ds:[si+198] +mov es:[di+196],ax +mov ax,ds:[si+200] +mov es:[di+198],ax +mov al,ds:[si+202] +mov ah,ds:[si+204] +mov es:[di+200],ax +mov ax,ds:[si+205] +mov es:[di+202],ax +mov ax,ds:[si+207] +mov es:[di+204],ax +mov ax,ds:[si+209] +mov es:[di+206],ax +mov ax,ds:[si+211] +mov es:[di+208],ax +mov ax,ds:[si+213] +mov es:[di+210],ax +mov ax,ds:[si+215] +mov es:[di+212],ax +mov al,ds:[si+217] +mov ah,ds:[si+219] +mov es:[di+214],ax +mov ax,ds:[si+220] +mov es:[di+216],ax +mov ax,ds:[si+222] +mov es:[di+218],ax +mov ax,ds:[si+224] +mov es:[di+220],ax +mov ax,ds:[si+226] +mov es:[di+222],ax +mov ax,ds:[si+228] +mov es:[di+224],ax +mov ax,ds:[si+230] +mov es:[di+226],ax +mov ax,ds:[si+233] +mov es:[di+228],ax +mov ax,ds:[si+235] +mov es:[di+230],ax +add si,cx +mov ax,ds:[si+237] +mov es:[di+232],ax +mov ax,ds:[si+239] +mov es:[di+234],ax +mov ax,ds:[si+241] +mov es:[di+236],ax +mov ax,ds:[si+243] +mov es:[di+238],ax +mov ax,ds:[si+245] +mov es:[di+240],ax +mov ax,ds:[si+248] +mov es:[di+242],ax +mov ax,ds:[si+250] +mov es:[di+244],ax +mov ax,ds:[si+252] +mov es:[di+246],ax +mov ax,ds:[si+254] +mov es:[di+248],ax +mov ax,ds:[si+256] +mov es:[di+250],ax +mov ax,ds:[si+258] +mov es:[di+252],ax +mov al,ds:[si+260] +mov ah,ds:[si+262] +mov es:[di+254],ax +mov ax,ds:[si+263] +mov es:[di+256],ax +mov ax,ds:[si+265] +mov es:[di+258],ax +mov ax,ds:[si+267] +mov es:[di+260],ax +mov ax,ds:[si+269] +mov es:[di+262],ax +mov ax,ds:[si+271] +mov es:[di+264],ax +mov ax,ds:[si+273] +mov es:[di+266],ax +mov al,ds:[si+275] +mov ah,ds:[si+277] +mov es:[di+268],ax +mov ax,ds:[si+278] +mov es:[di+270],ax +mov ax,ds:[si+280] +mov es:[di+272],ax +mov ax,ds:[si+282] +mov es:[di+274],ax +mov ax,ds:[si+284] +mov es:[di+276],ax +mov ax,ds:[si+286] +mov es:[di+278],ax +mov ax,ds:[si+288] +mov es:[di+280],ax +mov ax,ds:[si+291] +mov es:[di+282],ax +mov ax,ds:[si+293] +mov es:[di+284],ax +mov ax,ds:[si+295] +mov es:[di+286],ax +mov ax,ds:[si+297] +mov es:[di+288],ax +mov ax,ds:[si+299] +mov es:[di+290],ax +mov ax,ds:[si+301] +mov es:[di+292],ax +mov ax,ds:[si+303] +mov es:[di+294],ax +mov ax,ds:[si+306] +mov es:[di+296],ax +mov ax,ds:[si+308] +mov es:[di+298],ax +mov ax,ds:[si+310] +mov es:[di+300],ax +mov ax,ds:[si+312] +mov es:[di+302],ax +mov ax,ds:[si+314] +mov es:[di+304],ax +mov ax,ds:[si+316] +mov es:[di+306],ax +mov al,ds:[si+318] +mov ah,dl +mov es:[di+308],ax +mov es:[di+310],dx +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_304: +mov es:[di+0],edx +mov es:[di+4],edx +mov al,ds:[si+0] +mov ah,ds:[si+2] +mov es:[di+8],ax +mov ax,ds:[si+3] +mov es:[di+10],ax +mov ax,ds:[si+5] +mov es:[di+12],ax +mov ax,ds:[si+7] +mov es:[di+14],ax +mov ax,ds:[si+9] +mov es:[di+16],ax +mov ax,ds:[si+11] +mov es:[di+18],ax +mov ax,ds:[si+13] +mov es:[di+20],ax +mov ax,ds:[si+15] +mov es:[di+22],ax +mov ax,ds:[si+17] +mov es:[di+24],ax +mov ax,ds:[si+19] +mov es:[di+26],ax +mov ax,ds:[si+22] +mov es:[di+28],ax +mov ax,ds:[si+24] +mov es:[di+30],ax +mov ax,ds:[si+26] +mov es:[di+32],ax +mov ax,ds:[si+28] +mov es:[di+34],ax +mov ax,ds:[si+30] +mov es:[di+36],ax +mov ax,ds:[si+32] +mov es:[di+38],ax +mov ax,ds:[si+34] +mov es:[di+40],ax +mov ax,ds:[si+36] +mov es:[di+42],ax +mov ax,ds:[si+38] +mov es:[di+44],ax +mov al,ds:[si+40] +mov ah,ds:[si+42] +mov es:[di+46],ax +mov ax,ds:[si+43] +mov es:[di+48],ax +mov ax,ds:[si+45] +mov es:[di+50],ax +mov ax,ds:[si+47] +mov es:[di+52],ax +mov ax,ds:[si+49] +mov es:[di+54],ax +mov ax,ds:[si+51] +mov es:[di+56],ax +mov ax,ds:[si+53] +mov es:[di+58],ax +mov ax,ds:[si+55] +mov es:[di+60],ax +mov ax,ds:[si+57] +mov es:[di+62],ax +mov ax,ds:[si+59] +mov es:[di+64],ax +mov ax,ds:[si+62] +mov es:[di+66],ax +mov ax,ds:[si+64] +mov es:[di+68],ax +mov ax,ds:[si+66] +mov es:[di+70],ax +mov ax,ds:[si+68] +mov es:[di+72],ax +mov ax,ds:[si+70] +mov es:[di+74],ax +mov ax,ds:[si+72] +mov es:[di+76],ax +mov ax,ds:[si+74] +mov es:[di+78],ax +mov ax,ds:[si+76] +mov es:[di+80],ax +mov ax,ds:[si+78] +mov es:[di+82],ax +add si,cx +mov al,ds:[si+80] +mov ah,ds:[si+82] +mov es:[di+84],ax +mov ax,ds:[si+83] +mov es:[di+86],ax +mov ax,ds:[si+85] +mov es:[di+88],ax +mov ax,ds:[si+87] +mov es:[di+90],ax +mov ax,ds:[si+89] +mov es:[di+92],ax +mov ax,ds:[si+91] +mov es:[di+94],ax +mov ax,ds:[si+93] +mov es:[di+96],ax +mov ax,ds:[si+95] +mov es:[di+98],ax +mov ax,ds:[si+97] +mov es:[di+100],ax +mov ax,ds:[si+99] +mov es:[di+102],ax +mov ax,ds:[si+102] +mov es:[di+104],ax +mov ax,ds:[si+104] +mov es:[di+106],ax +mov ax,ds:[si+106] +mov es:[di+108],ax +mov ax,ds:[si+108] +mov es:[di+110],ax +mov ax,ds:[si+110] +mov es:[di+112],ax +mov ax,ds:[si+112] +mov es:[di+114],ax +mov ax,ds:[si+114] +mov es:[di+116],ax +mov ax,ds:[si+116] +mov es:[di+118],ax +add si,cx +mov ax,ds:[si+118] +mov es:[di+120],ax +mov al,ds:[si+120] +mov ah,ds:[si+122] +mov es:[di+122],ax +mov ax,ds:[si+123] +mov es:[di+124],ax +mov ax,ds:[si+125] +mov es:[di+126],ax +mov ax,ds:[si+127] +mov es:[di+128],ax +mov ax,ds:[si+129] +mov es:[di+130],ax +mov ax,ds:[si+131] +mov es:[di+132],ax +mov ax,ds:[si+133] +mov es:[di+134],ax +mov ax,ds:[si+135] +mov es:[di+136],ax +mov ax,ds:[si+137] +mov es:[di+138],ax +mov ax,ds:[si+139] +mov es:[di+140],ax +mov ax,ds:[si+142] +mov es:[di+142],ax +mov ax,ds:[si+144] +mov es:[di+144],ax +mov ax,ds:[si+146] +mov es:[di+146],ax +mov ax,ds:[si+148] +mov es:[di+148],ax +mov ax,ds:[si+150] +mov es:[di+150],ax +mov ax,ds:[si+152] +mov es:[di+152],ax +mov ax,ds:[si+154] +mov es:[di+154],ax +mov ax,ds:[si+156] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+162] +mov es:[di+162],ax +mov ax,ds:[si+164] +mov es:[di+164],ax +mov ax,ds:[si+166] +mov es:[di+166],ax +mov ax,ds:[si+168] +mov es:[di+168],ax +mov ax,ds:[si+170] +mov es:[di+170],ax +mov ax,ds:[si+172] +mov es:[di+172],ax +mov ax,ds:[si+174] +mov es:[di+174],ax +mov ax,ds:[si+176] +mov es:[di+176],ax +mov al,ds:[si+178] +mov ah,ds:[si+180] +mov es:[di+178],ax +mov ax,ds:[si+181] +mov es:[di+180],ax +mov ax,ds:[si+183] +mov es:[di+182],ax +mov ax,ds:[si+185] +mov es:[di+184],ax +mov ax,ds:[si+187] +mov es:[di+186],ax +mov ax,ds:[si+189] +mov es:[di+188],ax +mov ax,ds:[si+191] +mov es:[di+190],ax +mov ax,ds:[si+193] +mov es:[di+192],ax +mov ax,ds:[si+195] +mov es:[di+194],ax +add si,cx +mov ax,ds:[si+197] +mov es:[di+196],ax +mov ax,ds:[si+200] +mov es:[di+198],ax +mov ax,ds:[si+202] +mov es:[di+200],ax +mov ax,ds:[si+204] +mov es:[di+202],ax +mov ax,ds:[si+206] +mov es:[di+204],ax +mov ax,ds:[si+208] +mov es:[di+206],ax +mov ax,ds:[si+210] +mov es:[di+208],ax +mov ax,ds:[si+212] +mov es:[di+210],ax +mov ax,ds:[si+214] +mov es:[di+212],ax +mov ax,ds:[si+216] +mov es:[di+214],ax +mov al,ds:[si+218] +mov ah,ds:[si+220] +mov es:[di+216],ax +mov ax,ds:[si+221] +mov es:[di+218],ax +mov ax,ds:[si+223] +mov es:[di+220],ax +mov ax,ds:[si+225] +mov es:[di+222],ax +mov ax,ds:[si+227] +mov es:[di+224],ax +mov ax,ds:[si+229] +mov es:[di+226],ax +mov ax,ds:[si+231] +mov es:[di+228],ax +mov ax,ds:[si+233] +mov es:[di+230],ax +mov ax,ds:[si+235] +mov es:[di+232],ax +mov ax,ds:[si+237] +mov es:[di+234],ax +add si,cx +mov ax,ds:[si+240] +mov es:[di+236],ax +mov ax,ds:[si+242] +mov es:[di+238],ax +mov ax,ds:[si+244] +mov es:[di+240],ax +mov ax,ds:[si+246] +mov es:[di+242],ax +mov ax,ds:[si+248] +mov es:[di+244],ax +mov ax,ds:[si+250] +mov es:[di+246],ax +mov ax,ds:[si+252] +mov es:[di+248],ax +mov ax,ds:[si+254] +mov es:[di+250],ax +mov ax,ds:[si+256] +mov es:[di+252],ax +mov al,ds:[si+258] +mov ah,ds:[si+260] +mov es:[di+254],ax +mov ax,ds:[si+261] +mov es:[di+256],ax +mov ax,ds:[si+263] +mov es:[di+258],ax +mov ax,ds:[si+265] +mov es:[di+260],ax +mov ax,ds:[si+267] +mov es:[di+262],ax +mov ax,ds:[si+269] +mov es:[di+264],ax +mov ax,ds:[si+271] +mov es:[di+266],ax +mov ax,ds:[si+273] +mov es:[di+268],ax +mov ax,ds:[si+275] +mov es:[di+270],ax +mov ax,ds:[si+277] +mov es:[di+272],ax +mov ax,ds:[si+280] +mov es:[di+274],ax +mov ax,ds:[si+282] +mov es:[di+276],ax +mov ax,ds:[si+284] +mov es:[di+278],ax +mov ax,ds:[si+286] +mov es:[di+280],ax +mov ax,ds:[si+288] +mov es:[di+282],ax +mov ax,ds:[si+290] +mov es:[di+284],ax +mov ax,ds:[si+292] +mov es:[di+286],ax +mov ax,ds:[si+294] +mov es:[di+288],ax +mov ax,ds:[si+296] +mov es:[di+290],ax +mov al,ds:[si+298] +mov ah,ds:[si+300] +mov es:[di+292],ax +mov ax,ds:[si+301] +mov es:[di+294],ax +mov ax,ds:[si+303] +mov es:[di+296],ax +mov ax,ds:[si+305] +mov es:[di+298],ax +mov ax,ds:[si+307] +mov es:[di+300],ax +mov ax,ds:[si+309] +mov es:[di+302],ax +mov ax,ds:[si+311] +mov es:[di+304],ax +mov ax,ds:[si+313] +mov es:[di+306],ax +mov ax,ds:[si+315] +mov es:[di+308],ax +mov ax,ds:[si+317] +mov es:[di+310],ax +mov es:[di+312],edx +mov es:[di+316],edx +ret +zoom_306: +mov es:[di+0],edx +mov es:[di+4],dx +mov al,dl +mov ah,ds:[si+0] +mov es:[di+6],ax +mov ax,ds:[si+2] +mov es:[di+8],ax +mov ax,ds:[si+4] +mov es:[di+10],ax +mov ax,ds:[si+6] +mov es:[di+12],ax +mov ax,ds:[si+8] +mov es:[di+14],ax +mov ax,ds:[si+10] +mov es:[di+16],ax +mov ax,ds:[si+12] +mov es:[di+18],ax +mov ax,ds:[si+14] +mov es:[di+20],ax +mov ax,ds:[si+16] +mov es:[di+22],ax +mov ax,ds:[si+18] +mov es:[di+24],ax +mov ax,ds:[si+20] +mov es:[di+26],ax +mov al,ds:[si+22] +mov ah,ds:[si+24] +mov es:[di+28],ax +mov ax,ds:[si+25] +mov es:[di+30],ax +mov ax,ds:[si+27] +mov es:[di+32],ax +mov ax,ds:[si+29] +mov es:[di+34],ax +mov ax,ds:[si+31] +mov es:[di+36],ax +mov ax,ds:[si+33] +mov es:[di+38],ax +mov ax,ds:[si+35] +mov es:[di+40],ax +mov ax,ds:[si+37] +mov es:[di+42],ax +mov ax,ds:[si+39] +mov es:[di+44],ax +mov ax,ds:[si+41] +mov es:[di+46],ax +mov ax,ds:[si+43] +mov es:[di+48],ax +mov al,ds:[si+45] +mov ah,ds:[si+47] +mov es:[di+50],ax +mov ax,ds:[si+48] +mov es:[di+52],ax +mov ax,ds:[si+50] +mov es:[di+54],ax +mov ax,ds:[si+52] +mov es:[di+56],ax +mov ax,ds:[si+54] +mov es:[di+58],ax +mov ax,ds:[si+56] +mov es:[di+60],ax +mov ax,ds:[si+58] +mov es:[di+62],ax +mov ax,ds:[si+60] +mov es:[di+64],ax +mov ax,ds:[si+62] +mov es:[di+66],ax +mov ax,ds:[si+64] +mov es:[di+68],ax +mov ax,ds:[si+66] +mov es:[di+70],ax +mov al,ds:[si+68] +mov ah,ds:[si+70] +mov es:[di+72],ax +mov ax,ds:[si+71] +mov es:[di+74],ax +mov ax,ds:[si+73] +mov es:[di+76],ax +mov ax,ds:[si+75] +mov es:[di+78],ax +mov ax,ds:[si+77] +mov es:[di+80],ax +mov ax,ds:[si+79] +mov es:[di+82],ax +add si,cx +mov ax,ds:[si+81] +mov es:[di+84],ax +mov ax,ds:[si+83] +mov es:[di+86],ax +mov ax,ds:[si+85] +mov es:[di+88],ax +mov ax,ds:[si+87] +mov es:[di+90],ax +mov ax,ds:[si+89] +mov es:[di+92],ax +mov al,ds:[si+91] +mov ah,ds:[si+93] +mov es:[di+94],ax +mov ax,ds:[si+94] +mov es:[di+96],ax +mov ax,ds:[si+96] +mov es:[di+98],ax +mov ax,ds:[si+98] +mov es:[di+100],ax +mov ax,ds:[si+100] +mov es:[di+102],ax +mov ax,ds:[si+102] +mov es:[di+104],ax +mov ax,ds:[si+104] +mov es:[di+106],ax +mov ax,ds:[si+106] +mov es:[di+108],ax +mov ax,ds:[si+108] +mov es:[di+110],ax +mov ax,ds:[si+110] +mov es:[di+112],ax +mov ax,ds:[si+112] +mov es:[di+114],ax +mov al,ds:[si+114] +mov ah,ds:[si+116] +mov es:[di+116],ax +mov ax,ds:[si+117] +mov es:[di+118],ax +add si,cx +mov ax,ds:[si+119] +mov es:[di+120],ax +mov ax,ds:[si+121] +mov es:[di+122],ax +mov ax,ds:[si+123] +mov es:[di+124],ax +mov ax,ds:[si+125] +mov es:[di+126],ax +mov ax,ds:[si+127] +mov es:[di+128],ax +mov ax,ds:[si+129] +mov es:[di+130],ax +mov ax,ds:[si+131] +mov es:[di+132],ax +mov ax,ds:[si+133] +mov es:[di+134],ax +mov ax,ds:[si+135] +mov es:[di+136],ax +mov al,ds:[si+137] +mov ah,ds:[si+139] +mov es:[di+138],ax +mov ax,ds:[si+140] +mov es:[di+140],ax +mov ax,ds:[si+142] +mov es:[di+142],ax +mov ax,ds:[si+144] +mov es:[di+144],ax +mov ax,ds:[si+146] +mov es:[di+146],ax +mov ax,ds:[si+148] +mov es:[di+148],ax +mov ax,ds:[si+150] +mov es:[di+150],ax +mov ax,ds:[si+152] +mov es:[di+152],ax +mov ax,ds:[si+154] +mov es:[di+154],ax +mov ax,ds:[si+156] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+162] +mov es:[di+162],ax +mov ax,ds:[si+164] +mov es:[di+164],ax +mov ax,ds:[si+166] +mov es:[di+166],ax +mov ax,ds:[si+168] +mov es:[di+168],ax +mov ax,ds:[si+170] +mov es:[di+170],ax +mov ax,ds:[si+172] +mov es:[di+172],ax +mov ax,ds:[si+174] +mov es:[di+174],ax +mov ax,ds:[si+176] +mov es:[di+176],ax +mov ax,ds:[si+178] +mov es:[di+178],ax +mov ax,ds:[si+180] +mov es:[di+180],ax +mov ax,ds:[si+183] +mov es:[di+182],ax +mov ax,ds:[si+185] +mov es:[di+184],ax +mov ax,ds:[si+187] +mov es:[di+186],ax +mov ax,ds:[si+189] +mov es:[di+188],ax +mov ax,ds:[si+191] +mov es:[di+190],ax +mov ax,ds:[si+193] +mov es:[di+192],ax +mov ax,ds:[si+195] +mov es:[di+194],ax +add si,cx +mov ax,ds:[si+197] +mov es:[di+196],ax +mov ax,ds:[si+199] +mov es:[di+198],ax +mov ax,ds:[si+201] +mov es:[di+200],ax +mov ax,ds:[si+203] +mov es:[di+202],ax +mov ax,ds:[si+206] +mov es:[di+204],ax +mov ax,ds:[si+208] +mov es:[di+206],ax +mov ax,ds:[si+210] +mov es:[di+208],ax +mov ax,ds:[si+212] +mov es:[di+210],ax +mov ax,ds:[si+214] +mov es:[di+212],ax +mov ax,ds:[si+216] +mov es:[di+214],ax +mov ax,ds:[si+218] +mov es:[di+216],ax +mov ax,ds:[si+220] +mov es:[di+218],ax +mov ax,ds:[si+222] +mov es:[di+220],ax +mov ax,ds:[si+224] +mov es:[di+222],ax +mov ax,ds:[si+226] +mov es:[di+224],ax +mov ax,ds:[si+229] +mov es:[di+226],ax +mov ax,ds:[si+231] +mov es:[di+228],ax +mov ax,ds:[si+233] +mov es:[di+230],ax +mov ax,ds:[si+235] +mov es:[di+232],ax +mov ax,ds:[si+237] +mov es:[di+234],ax +add si,cx +mov ax,ds:[si+239] +mov es:[di+236],ax +mov ax,ds:[si+241] +mov es:[di+238],ax +mov ax,ds:[si+243] +mov es:[di+240],ax +mov ax,ds:[si+245] +mov es:[di+242],ax +mov ax,ds:[si+247] +mov es:[di+244],ax +mov ax,ds:[si+249] +mov es:[di+246],ax +mov ax,ds:[si+252] +mov es:[di+248],ax +mov ax,ds:[si+254] +mov es:[di+250],ax +mov ax,ds:[si+256] +mov es:[di+252],ax +mov ax,ds:[si+258] +mov es:[di+254],ax +mov ax,ds:[si+260] +mov es:[di+256],ax +mov ax,ds:[si+262] +mov es:[di+258],ax +mov ax,ds:[si+264] +mov es:[di+260],ax +mov ax,ds:[si+266] +mov es:[di+262],ax +mov ax,ds:[si+268] +mov es:[di+264],ax +mov ax,ds:[si+270] +mov es:[di+266],ax +mov ax,ds:[si+272] +mov es:[di+268],ax +mov ax,ds:[si+275] +mov es:[di+270],ax +mov ax,ds:[si+277] +mov es:[di+272],ax +mov ax,ds:[si+279] +mov es:[di+274],ax +mov ax,ds:[si+281] +mov es:[di+276],ax +mov ax,ds:[si+283] +mov es:[di+278],ax +mov ax,ds:[si+285] +mov es:[di+280],ax +mov ax,ds:[si+287] +mov es:[di+282],ax +mov ax,ds:[si+289] +mov es:[di+284],ax +mov ax,ds:[si+291] +mov es:[di+286],ax +mov ax,ds:[si+293] +mov es:[di+288],ax +mov ax,ds:[si+295] +mov es:[di+290],ax +mov ax,ds:[si+298] +mov es:[di+292],ax +mov ax,ds:[si+300] +mov es:[di+294],ax +mov ax,ds:[si+302] +mov es:[di+296],ax +mov ax,ds:[si+304] +mov es:[di+298],ax +mov ax,ds:[si+306] +mov es:[di+300],ax +mov ax,ds:[si+308] +mov es:[di+302],ax +mov ax,ds:[si+310] +mov es:[di+304],ax +mov ax,ds:[si+312] +mov es:[di+306],ax +mov ax,ds:[si+314] +mov es:[di+308],ax +mov ax,ds:[si+316] +mov es:[di+310],ax +mov al,ds:[si+318] +mov ah,dl +mov es:[di+312],ax +mov es:[di+314],dx +mov es:[di+316],edx +ret +zoom_312: +mov es:[di+0],edx +mov al,ds:[si+0] +mov ah,ds:[si+2] +mov es:[di+4],ax +mov ax,ds:[si+3] +mov es:[di+6],ax +mov ax,ds:[si+5] +mov es:[di+8],ax +mov ax,ds:[si+7] +mov es:[di+10],ax +mov ax,ds:[si+9] +mov es:[di+12],ax +mov ax,ds:[si+11] +mov es:[di+14],ax +mov ax,ds:[si+13] +mov es:[di+16],ax +mov ax,ds:[si+15] +mov es:[di+18],ax +mov ax,ds:[si+17] +mov es:[di+20],ax +mov ax,ds:[si+19] +mov es:[di+22],ax +mov ax,ds:[si+21] +mov es:[di+24],ax +mov ax,ds:[si+23] +mov es:[di+26],ax +mov ax,ds:[si+25] +mov es:[di+28],ax +mov ax,ds:[si+27] +mov es:[di+30],ax +mov ax,ds:[si+29] +mov es:[di+32],ax +mov ax,ds:[si+31] +mov es:[di+34],ax +mov ax,ds:[si+33] +mov es:[di+36],ax +mov ax,ds:[si+35] +mov es:[di+38],ax +mov ax,ds:[si+37] +mov es:[di+40],ax +mov ax,ds:[si+39] +mov es:[di+42],ax +mov ax,ds:[si+42] +mov es:[di+44],ax +mov ax,ds:[si+44] +mov es:[di+46],ax +mov ax,ds:[si+46] +mov es:[di+48],ax +mov ax,ds:[si+48] +mov es:[di+50],ax +mov ax,ds:[si+50] +mov es:[di+52],ax +mov ax,ds:[si+52] +mov es:[di+54],ax +mov ax,ds:[si+54] +mov es:[di+56],ax +mov ax,ds:[si+56] +mov es:[di+58],ax +mov ax,ds:[si+58] +mov es:[di+60],ax +mov ax,ds:[si+60] +mov es:[di+62],ax +mov ax,ds:[si+62] +mov es:[di+64],ax +mov ax,ds:[si+64] +mov es:[di+66],ax +mov ax,ds:[si+66] +mov es:[di+68],ax +mov ax,ds:[si+68] +mov es:[di+70],ax +mov ax,ds:[si+70] +mov es:[di+72],ax +mov ax,ds:[si+72] +mov es:[di+74],ax +mov ax,ds:[si+74] +mov es:[di+76],ax +mov ax,ds:[si+76] +mov es:[di+78],ax +add si,cx +mov ax,ds:[si+78] +mov es:[di+80],ax +mov al,ds:[si+80] +mov ah,ds:[si+82] +mov es:[di+82],ax +mov ax,ds:[si+83] +mov es:[di+84],ax +mov ax,ds:[si+85] +mov es:[di+86],ax +mov ax,ds:[si+87] +mov es:[di+88],ax +mov ax,ds:[si+89] +mov es:[di+90],ax +mov ax,ds:[si+91] +mov es:[di+92],ax +mov ax,ds:[si+93] +mov es:[di+94],ax +mov ax,ds:[si+95] +mov es:[di+96],ax +mov ax,ds:[si+97] +mov es:[di+98],ax +mov ax,ds:[si+99] +mov es:[di+100],ax +mov ax,ds:[si+101] +mov es:[di+102],ax +mov ax,ds:[si+103] +mov es:[di+104],ax +mov ax,ds:[si+105] +mov es:[di+106],ax +mov ax,ds:[si+107] +mov es:[di+108],ax +mov ax,ds:[si+109] +mov es:[di+110],ax +mov ax,ds:[si+111] +mov es:[di+112],ax +mov ax,ds:[si+113] +mov es:[di+114],ax +mov ax,ds:[si+115] +mov es:[di+116],ax +mov ax,ds:[si+117] +mov es:[di+118],ax +add si,cx +mov ax,ds:[si+119] +mov es:[di+120],ax +mov ax,ds:[si+122] +mov es:[di+122],ax +mov ax,ds:[si+124] +mov es:[di+124],ax +mov ax,ds:[si+126] +mov es:[di+126],ax +mov ax,ds:[si+128] +mov es:[di+128],ax +mov ax,ds:[si+130] +mov es:[di+130],ax +mov ax,ds:[si+132] +mov es:[di+132],ax +mov ax,ds:[si+134] +mov es:[di+134],ax +mov ax,ds:[si+136] +mov es:[di+136],ax +mov ax,ds:[si+138] +mov es:[di+138],ax +mov ax,ds:[si+140] +mov es:[di+140],ax +mov ax,ds:[si+142] +mov es:[di+142],ax +mov ax,ds:[si+144] +mov es:[di+144],ax +mov ax,ds:[si+146] +mov es:[di+146],ax +mov ax,ds:[si+148] +mov es:[di+148],ax +mov ax,ds:[si+150] +mov es:[di+150],ax +mov ax,ds:[si+152] +mov es:[di+152],ax +mov ax,ds:[si+154] +mov es:[di+154],ax +mov ax,ds:[si+156] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+162] +mov es:[di+162],ax +mov ax,ds:[si+164] +mov es:[di+164],ax +mov ax,ds:[si+166] +mov es:[di+166],ax +mov ax,ds:[si+168] +mov es:[di+168],ax +mov ax,ds:[si+170] +mov es:[di+170],ax +mov ax,ds:[si+172] +mov es:[di+172],ax +mov ax,ds:[si+174] +mov es:[di+174],ax +mov ax,ds:[si+176] +mov es:[di+176],ax +mov ax,ds:[si+178] +mov es:[di+178],ax +mov ax,ds:[si+180] +mov es:[di+180],ax +mov ax,ds:[si+182] +mov es:[di+182],ax +mov ax,ds:[si+184] +mov es:[di+184],ax +mov ax,ds:[si+186] +mov es:[di+186],ax +mov ax,ds:[si+188] +mov es:[di+188],ax +mov ax,ds:[si+190] +mov es:[di+190],ax +mov ax,ds:[si+192] +mov es:[di+192],ax +mov ax,ds:[si+194] +mov es:[di+194],ax +add si,cx +mov ax,ds:[si+196] +mov es:[di+196],ax +mov al,ds:[si+198] +mov ah,ds:[si+200] +mov es:[di+198],ax +mov ax,ds:[si+201] +mov es:[di+200],ax +mov ax,ds:[si+203] +mov es:[di+202],ax +mov ax,ds:[si+205] +mov es:[di+204],ax +mov ax,ds:[si+207] +mov es:[di+206],ax +mov ax,ds:[si+209] +mov es:[di+208],ax +mov ax,ds:[si+211] +mov es:[di+210],ax +mov ax,ds:[si+213] +mov es:[di+212],ax +mov ax,ds:[si+215] +mov es:[di+214],ax +mov ax,ds:[si+217] +mov es:[di+216],ax +mov ax,ds:[si+219] +mov es:[di+218],ax +mov ax,ds:[si+221] +mov es:[di+220],ax +mov ax,ds:[si+223] +mov es:[di+222],ax +mov ax,ds:[si+225] +mov es:[di+224],ax +mov ax,ds:[si+227] +mov es:[di+226],ax +mov ax,ds:[si+229] +mov es:[di+228],ax +mov ax,ds:[si+231] +mov es:[di+230],ax +mov ax,ds:[si+233] +mov es:[di+232],ax +mov ax,ds:[si+235] +mov es:[di+234],ax +add si,cx +mov ax,ds:[si+237] +mov es:[di+236],ax +mov ax,ds:[si+240] +mov es:[di+238],ax +mov ax,ds:[si+242] +mov es:[di+240],ax +mov ax,ds:[si+244] +mov es:[di+242],ax +mov ax,ds:[si+246] +mov es:[di+244],ax +mov ax,ds:[si+248] +mov es:[di+246],ax +mov ax,ds:[si+250] +mov es:[di+248],ax +mov ax,ds:[si+252] +mov es:[di+250],ax +mov ax,ds:[si+254] +mov es:[di+252],ax +mov ax,ds:[si+256] +mov es:[di+254],ax +mov ax,ds:[si+258] +mov es:[di+256],ax +mov ax,ds:[si+260] +mov es:[di+258],ax +mov ax,ds:[si+262] +mov es:[di+260],ax +mov ax,ds:[si+264] +mov es:[di+262],ax +mov ax,ds:[si+266] +mov es:[di+264],ax +mov ax,ds:[si+268] +mov es:[di+266],ax +mov ax,ds:[si+270] +mov es:[di+268],ax +mov ax,ds:[si+272] +mov es:[di+270],ax +mov ax,ds:[si+274] +mov es:[di+272],ax +mov ax,ds:[si+276] +mov es:[di+274],ax +mov al,ds:[si+278] +mov ah,ds:[si+280] +mov es:[di+276],ax +mov ax,ds:[si+281] +mov es:[di+278],ax +mov ax,ds:[si+283] +mov es:[di+280],ax +mov ax,ds:[si+285] +mov es:[di+282],ax +mov ax,ds:[si+287] +mov es:[di+284],ax +mov ax,ds:[si+289] +mov es:[di+286],ax +mov ax,ds:[si+291] +mov es:[di+288],ax +mov ax,ds:[si+293] +mov es:[di+290],ax +mov ax,ds:[si+295] +mov es:[di+292],ax +mov ax,ds:[si+297] +mov es:[di+294],ax +mov ax,ds:[si+299] +mov es:[di+296],ax +mov ax,ds:[si+301] +mov es:[di+298],ax +mov ax,ds:[si+303] +mov es:[di+300],ax +mov ax,ds:[si+305] +mov es:[di+302],ax +mov ax,ds:[si+307] +mov es:[di+304],ax +mov ax,ds:[si+309] +mov es:[di+306],ax +mov ax,ds:[si+311] +mov es:[di+308],ax +mov ax,ds:[si+313] +mov es:[di+310],ax +mov ax,ds:[si+315] +mov es:[di+312],ax +mov ax,ds:[si+317] +mov es:[di+314],ax +mov es:[di+316],edx +ret +zoom_314: +mov es:[di+0],dx +mov al,dl +mov ah,ds:[si+0] +mov es:[di+2],ax +mov ax,ds:[si+2] +mov es:[di+4],ax +mov ax,ds:[si+4] +mov es:[di+6],ax +mov ax,ds:[si+6] +mov es:[di+8],ax +mov ax,ds:[si+8] +mov es:[di+10],ax +mov ax,ds:[si+10] +mov es:[di+12],ax +mov ax,ds:[si+12] +mov es:[di+14],ax +mov ax,ds:[si+14] +mov es:[di+16],ax +mov ax,ds:[si+16] +mov es:[di+18],ax +mov ax,ds:[si+18] +mov es:[di+20],ax +mov ax,ds:[si+20] +mov es:[di+22],ax +mov ax,ds:[si+22] +mov es:[di+24],ax +mov ax,ds:[si+24] +mov es:[di+26],ax +mov ax,ds:[si+26] +mov es:[di+28],ax +mov ax,ds:[si+28] +mov es:[di+30],ax +mov ax,ds:[si+30] +mov es:[di+32],ax +mov ax,ds:[si+32] +mov es:[di+34],ax +mov ax,ds:[si+34] +mov es:[di+36],ax +mov ax,ds:[si+36] +mov es:[di+38],ax +mov ax,ds:[si+38] +mov es:[di+40],ax +mov ax,ds:[si+40] +mov es:[di+42],ax +mov ax,ds:[si+42] +mov es:[di+44],ax +mov ax,ds:[si+44] +mov es:[di+46],ax +mov ax,ds:[si+46] +mov es:[di+48],ax +mov ax,ds:[si+48] +mov es:[di+50],ax +mov ax,ds:[si+50] +mov es:[di+52],ax +mov ax,ds:[si+52] +mov es:[di+54],ax +mov ax,ds:[si+55] +mov es:[di+56],ax +mov ax,ds:[si+57] +mov es:[di+58],ax +mov ax,ds:[si+59] +mov es:[di+60],ax +mov ax,ds:[si+61] +mov es:[di+62],ax +mov ax,ds:[si+63] +mov es:[di+64],ax +mov ax,ds:[si+65] +mov es:[di+66],ax +mov ax,ds:[si+67] +mov es:[di+68],ax +mov ax,ds:[si+69] +mov es:[di+70],ax +mov ax,ds:[si+71] +mov es:[di+72],ax +mov ax,ds:[si+73] +mov es:[di+74],ax +mov ax,ds:[si+75] +mov es:[di+76],ax +mov ax,ds:[si+77] +mov es:[di+78],ax +add si,cx +mov ax,ds:[si+79] +mov es:[di+80],ax +mov ax,ds:[si+81] +mov es:[di+82],ax +mov ax,ds:[si+83] +mov es:[di+84],ax +mov ax,ds:[si+85] +mov es:[di+86],ax +mov ax,ds:[si+87] +mov es:[di+88],ax +mov ax,ds:[si+89] +mov es:[di+90],ax +mov ax,ds:[si+91] +mov es:[di+92],ax +mov ax,ds:[si+93] +mov es:[di+94],ax +mov ax,ds:[si+95] +mov es:[di+96],ax +mov ax,ds:[si+97] +mov es:[di+98],ax +mov ax,ds:[si+99] +mov es:[di+100],ax +mov ax,ds:[si+101] +mov es:[di+102],ax +mov ax,ds:[si+103] +mov es:[di+104],ax +mov ax,ds:[si+105] +mov es:[di+106],ax +mov ax,ds:[si+108] +mov es:[di+108],ax +mov ax,ds:[si+110] +mov es:[di+110],ax +mov ax,ds:[si+112] +mov es:[di+112],ax +mov ax,ds:[si+114] +mov es:[di+114],ax +mov ax,ds:[si+116] +mov es:[di+116],ax +mov ax,ds:[si+118] +mov es:[di+118],ax +add si,cx +mov ax,ds:[si+120] +mov es:[di+120],ax +mov ax,ds:[si+122] +mov es:[di+122],ax +mov ax,ds:[si+124] +mov es:[di+124],ax +mov ax,ds:[si+126] +mov es:[di+126],ax +mov ax,ds:[si+128] +mov es:[di+128],ax +mov ax,ds:[si+130] +mov es:[di+130],ax +mov ax,ds:[si+132] +mov es:[di+132],ax +mov ax,ds:[si+134] +mov es:[di+134],ax +mov ax,ds:[si+136] +mov es:[di+136],ax +mov ax,ds:[si+138] +mov es:[di+138],ax +mov ax,ds:[si+140] +mov es:[di+140],ax +mov ax,ds:[si+142] +mov es:[di+142],ax +mov ax,ds:[si+144] +mov es:[di+144],ax +mov ax,ds:[si+146] +mov es:[di+146],ax +mov ax,ds:[si+148] +mov es:[di+148],ax +mov ax,ds:[si+150] +mov es:[di+150],ax +mov ax,ds:[si+152] +mov es:[di+152],ax +mov ax,ds:[si+154] +mov es:[di+154],ax +mov ax,ds:[si+156] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+162] +mov es:[di+162],ax +mov ax,ds:[si+164] +mov es:[di+164],ax +mov ax,ds:[si+166] +mov es:[di+166],ax +mov ax,ds:[si+168] +mov es:[di+168],ax +mov ax,ds:[si+170] +mov es:[di+170],ax +mov ax,ds:[si+172] +mov es:[di+172],ax +mov ax,ds:[si+174] +mov es:[di+174],ax +mov ax,ds:[si+176] +mov es:[di+176],ax +mov ax,ds:[si+178] +mov es:[di+178],ax +mov ax,ds:[si+180] +mov es:[di+180],ax +mov ax,ds:[si+182] +mov es:[di+182],ax +mov ax,ds:[si+184] +mov es:[di+184],ax +mov ax,ds:[si+186] +mov es:[di+186],ax +mov ax,ds:[si+188] +mov es:[di+188],ax +mov ax,ds:[si+190] +mov es:[di+190],ax +mov ax,ds:[si+192] +mov es:[di+192],ax +mov ax,ds:[si+194] +mov es:[di+194],ax +add si,cx +mov ax,ds:[si+196] +mov es:[di+196],ax +mov ax,ds:[si+198] +mov es:[di+198],ax +mov ax,ds:[si+200] +mov es:[di+200],ax +mov ax,ds:[si+202] +mov es:[di+202],ax +mov ax,ds:[si+204] +mov es:[di+204],ax +mov ax,ds:[si+206] +mov es:[di+206],ax +mov ax,ds:[si+208] +mov es:[di+208],ax +mov ax,ds:[si+210] +mov es:[di+210],ax +mov al,ds:[si+212] +mov ah,ds:[si+214] +mov es:[di+212],ax +mov ax,ds:[si+215] +mov es:[di+214],ax +mov ax,ds:[si+217] +mov es:[di+216],ax +mov ax,ds:[si+219] +mov es:[di+218],ax +mov ax,ds:[si+221] +mov es:[di+220],ax +mov ax,ds:[si+223] +mov es:[di+222],ax +mov ax,ds:[si+225] +mov es:[di+224],ax +mov ax,ds:[si+227] +mov es:[di+226],ax +mov ax,ds:[si+229] +mov es:[di+228],ax +mov ax,ds:[si+231] +mov es:[di+230],ax +mov ax,ds:[si+233] +mov es:[di+232],ax +mov ax,ds:[si+235] +mov es:[di+234],ax +add si,cx +mov ax,ds:[si+237] +mov es:[di+236],ax +mov ax,ds:[si+239] +mov es:[di+238],ax +mov ax,ds:[si+241] +mov es:[di+240],ax +mov ax,ds:[si+243] +mov es:[di+242],ax +mov ax,ds:[si+245] +mov es:[di+244],ax +mov ax,ds:[si+247] +mov es:[di+246],ax +mov ax,ds:[si+249] +mov es:[di+248],ax +mov ax,ds:[si+251] +mov es:[di+250],ax +mov ax,ds:[si+253] +mov es:[di+252],ax +mov ax,ds:[si+255] +mov es:[di+254],ax +mov ax,ds:[si+257] +mov es:[di+256],ax +mov ax,ds:[si+259] +mov es:[di+258],ax +mov ax,ds:[si+261] +mov es:[di+260],ax +mov ax,ds:[si+263] +mov es:[di+262],ax +mov al,ds:[si+265] +mov ah,ds:[si+267] +mov es:[di+264],ax +mov ax,ds:[si+268] +mov es:[di+266],ax +mov ax,ds:[si+270] +mov es:[di+268],ax +mov ax,ds:[si+272] +mov es:[di+270],ax +mov ax,ds:[si+274] +mov es:[di+272],ax +mov ax,ds:[si+276] +mov es:[di+274],ax +mov ax,ds:[si+278] +mov es:[di+276],ax +mov ax,ds:[si+280] +mov es:[di+278],ax +mov ax,ds:[si+282] +mov es:[di+280],ax +mov ax,ds:[si+284] +mov es:[di+282],ax +mov ax,ds:[si+286] +mov es:[di+284],ax +mov ax,ds:[si+288] +mov es:[di+286],ax +mov ax,ds:[si+290] +mov es:[di+288],ax +mov ax,ds:[si+292] +mov es:[di+290],ax +mov ax,ds:[si+294] +mov es:[di+292],ax +mov ax,ds:[si+296] +mov es:[di+294],ax +mov ax,ds:[si+298] +mov es:[di+296],ax +mov ax,ds:[si+300] +mov es:[di+298],ax +mov ax,ds:[si+302] +mov es:[di+300],ax +mov ax,ds:[si+304] +mov es:[di+302],ax +mov ax,ds:[si+306] +mov es:[di+304],ax +mov ax,ds:[si+308] +mov es:[di+306],ax +mov ax,ds:[si+310] +mov es:[di+308],ax +mov ax,ds:[si+312] +mov es:[di+310],ax +mov ax,ds:[si+314] +mov es:[di+312],ax +mov ax,ds:[si+316] +mov es:[di+314],ax +mov al,ds:[si+318] +mov ah,dl +mov es:[di+316],ax +mov es:[di+318],dx +ret +zoom_320: +mov ax,ds:[si+0] +mov es:[di+0],ax +mov ax,ds:[si+2] +mov es:[di+2],ax +mov ax,ds:[si+4] +mov es:[di+4],ax +mov ax,ds:[si+6] +mov es:[di+6],ax +mov ax,ds:[si+8] +mov es:[di+8],ax +mov ax,ds:[si+10] +mov es:[di+10],ax +mov ax,ds:[si+12] +mov es:[di+12],ax +mov ax,ds:[si+14] +mov es:[di+14],ax +mov ax,ds:[si+16] +mov es:[di+16],ax +mov ax,ds:[si+18] +mov es:[di+18],ax +mov ax,ds:[si+20] +mov es:[di+20],ax +mov ax,ds:[si+22] +mov es:[di+22],ax +mov ax,ds:[si+24] +mov es:[di+24],ax +mov ax,ds:[si+26] +mov es:[di+26],ax +mov ax,ds:[si+28] +mov es:[di+28],ax +mov ax,ds:[si+30] +mov es:[di+30],ax +mov ax,ds:[si+32] +mov es:[di+32],ax +mov ax,ds:[si+34] +mov es:[di+34],ax +mov ax,ds:[si+36] +mov es:[di+36],ax +mov ax,ds:[si+38] +mov es:[di+38],ax +mov ax,ds:[si+40] +mov es:[di+40],ax +mov ax,ds:[si+42] +mov es:[di+42],ax +mov ax,ds:[si+44] +mov es:[di+44],ax +mov ax,ds:[si+46] +mov es:[di+46],ax +mov ax,ds:[si+48] +mov es:[di+48],ax +mov ax,ds:[si+50] +mov es:[di+50],ax +mov ax,ds:[si+52] +mov es:[di+52],ax +mov ax,ds:[si+54] +mov es:[di+54],ax +mov ax,ds:[si+56] +mov es:[di+56],ax +mov ax,ds:[si+58] +mov es:[di+58],ax +mov ax,ds:[si+60] +mov es:[di+60],ax +mov ax,ds:[si+62] +mov es:[di+62],ax +mov ax,ds:[si+64] +mov es:[di+64],ax +mov ax,ds:[si+66] +mov es:[di+66],ax +mov ax,ds:[si+68] +mov es:[di+68],ax +mov ax,ds:[si+70] +mov es:[di+70],ax +mov ax,ds:[si+72] +mov es:[di+72],ax +mov ax,ds:[si+74] +mov es:[di+74],ax +mov ax,ds:[si+76] +mov es:[di+76],ax +mov ax,ds:[si+78] +mov es:[di+78],ax +add si,cx +mov ax,ds:[si+80] +mov es:[di+80],ax +mov ax,ds:[si+82] +mov es:[di+82],ax +mov ax,ds:[si+84] +mov es:[di+84],ax +mov ax,ds:[si+86] +mov es:[di+86],ax +mov ax,ds:[si+88] +mov es:[di+88],ax +mov ax,ds:[si+90] +mov es:[di+90],ax +mov ax,ds:[si+92] +mov es:[di+92],ax +mov ax,ds:[si+94] +mov es:[di+94],ax +mov ax,ds:[si+96] +mov es:[di+96],ax +mov ax,ds:[si+98] +mov es:[di+98],ax +mov ax,ds:[si+100] +mov es:[di+100],ax +mov ax,ds:[si+102] +mov es:[di+102],ax +mov ax,ds:[si+104] +mov es:[di+104],ax +mov ax,ds:[si+106] +mov es:[di+106],ax +mov ax,ds:[si+108] +mov es:[di+108],ax +mov ax,ds:[si+110] +mov es:[di+110],ax +mov ax,ds:[si+112] +mov es:[di+112],ax +mov ax,ds:[si+114] +mov es:[di+114],ax +mov ax,ds:[si+116] +mov es:[di+116],ax +mov ax,ds:[si+118] +mov es:[di+118],ax +add si,cx +mov ax,ds:[si+120] +mov es:[di+120],ax +mov ax,ds:[si+122] +mov es:[di+122],ax +mov ax,ds:[si+124] +mov es:[di+124],ax +mov ax,ds:[si+126] +mov es:[di+126],ax +mov ax,ds:[si+128] +mov es:[di+128],ax +mov ax,ds:[si+130] +mov es:[di+130],ax +mov ax,ds:[si+132] +mov es:[di+132],ax +mov ax,ds:[si+134] +mov es:[di+134],ax +mov ax,ds:[si+136] +mov es:[di+136],ax +mov ax,ds:[si+138] +mov es:[di+138],ax +mov ax,ds:[si+140] +mov es:[di+140],ax +mov ax,ds:[si+142] +mov es:[di+142],ax +mov ax,ds:[si+144] +mov es:[di+144],ax +mov ax,ds:[si+146] +mov es:[di+146],ax +mov ax,ds:[si+148] +mov es:[di+148],ax +mov ax,ds:[si+150] +mov es:[di+150],ax +mov ax,ds:[si+152] +mov es:[di+152],ax +mov ax,ds:[si+154] +mov es:[di+154],ax +mov ax,ds:[si+156] +mov es:[di+156],ax +mov ax,ds:[si+158] +mov es:[di+158],ax +mov ax,ds:[si+160] +mov es:[di+160],ax +mov ax,ds:[si+162] +mov es:[di+162],ax +mov ax,ds:[si+164] +mov es:[di+164],ax +mov ax,ds:[si+166] +mov es:[di+166],ax +mov ax,ds:[si+168] +mov es:[di+168],ax +mov ax,ds:[si+170] +mov es:[di+170],ax +mov ax,ds:[si+172] +mov es:[di+172],ax +mov ax,ds:[si+174] +mov es:[di+174],ax +mov ax,ds:[si+176] +mov es:[di+176],ax +mov ax,ds:[si+178] +mov es:[di+178],ax +mov ax,ds:[si+180] +mov es:[di+180],ax +mov ax,ds:[si+182] +mov es:[di+182],ax +mov ax,ds:[si+184] +mov es:[di+184],ax +mov ax,ds:[si+186] +mov es:[di+186],ax +mov ax,ds:[si+188] +mov es:[di+188],ax +mov ax,ds:[si+190] +mov es:[di+190],ax +mov ax,ds:[si+192] +mov es:[di+192],ax +mov ax,ds:[si+194] +mov es:[di+194],ax +mov ax,ds:[si+196] +mov es:[di+196],ax +mov ax,ds:[si+198] +mov es:[di+198],ax +add si,cx +mov ax,ds:[si+200] +mov es:[di+200],ax +mov ax,ds:[si+202] +mov es:[di+202],ax +mov ax,ds:[si+204] +mov es:[di+204],ax +mov ax,ds:[si+206] +mov es:[di+206],ax +mov ax,ds:[si+208] +mov es:[di+208],ax +mov ax,ds:[si+210] +mov es:[di+210],ax +mov ax,ds:[si+212] +mov es:[di+212],ax +mov ax,ds:[si+214] +mov es:[di+214],ax +mov ax,ds:[si+216] +mov es:[di+216],ax +mov ax,ds:[si+218] +mov es:[di+218],ax +mov ax,ds:[si+220] +mov es:[di+220],ax +mov ax,ds:[si+222] +mov es:[di+222],ax +mov ax,ds:[si+224] +mov es:[di+224],ax +mov ax,ds:[si+226] +mov es:[di+226],ax +mov ax,ds:[si+228] +mov es:[di+228],ax +mov ax,ds:[si+230] +mov es:[di+230],ax +mov ax,ds:[si+232] +mov es:[di+232],ax +mov ax,ds:[si+234] +mov es:[di+234],ax +mov ax,ds:[si+236] +mov es:[di+236],ax +mov ax,ds:[si+238] +mov es:[di+238],ax +add si,cx +mov ax,ds:[si+240] +mov es:[di+240],ax +mov ax,ds:[si+242] +mov es:[di+242],ax +mov ax,ds:[si+244] +mov es:[di+244],ax +mov ax,ds:[si+246] +mov es:[di+246],ax +mov ax,ds:[si+248] +mov es:[di+248],ax +mov ax,ds:[si+250] +mov es:[di+250],ax +mov ax,ds:[si+252] +mov es:[di+252],ax +mov ax,ds:[si+254] +mov es:[di+254],ax +mov ax,ds:[si+256] +mov es:[di+256],ax +mov ax,ds:[si+258] +mov es:[di+258],ax +mov ax,ds:[si+260] +mov es:[di+260],ax +mov ax,ds:[si+262] +mov es:[di+262],ax +mov ax,ds:[si+264] +mov es:[di+264],ax +mov ax,ds:[si+266] +mov es:[di+266],ax +mov ax,ds:[si+268] +mov es:[di+268],ax +mov ax,ds:[si+270] +mov es:[di+270],ax +mov ax,ds:[si+272] +mov es:[di+272],ax +mov ax,ds:[si+274] +mov es:[di+274],ax +mov ax,ds:[si+276] +mov es:[di+276],ax +mov ax,ds:[si+278] +mov es:[di+278],ax +mov ax,ds:[si+280] +mov es:[di+280],ax +mov ax,ds:[si+282] +mov es:[di+282],ax +mov ax,ds:[si+284] +mov es:[di+284],ax +mov ax,ds:[si+286] +mov es:[di+286],ax +mov ax,ds:[si+288] +mov es:[di+288],ax +mov ax,ds:[si+290] +mov es:[di+290],ax +mov ax,ds:[si+292] +mov es:[di+292],ax +mov ax,ds:[si+294] +mov es:[di+294],ax +mov ax,ds:[si+296] +mov es:[di+296],ax +mov ax,ds:[si+298] +mov es:[di+298],ax +mov ax,ds:[si+300] +mov es:[di+300],ax +mov ax,ds:[si+302] +mov es:[di+302],ax +mov ax,ds:[si+304] +mov es:[di+304],ax +mov ax,ds:[si+306] +mov es:[di+306],ax +mov ax,ds:[si+308] +mov es:[di+308],ax +mov ax,ds:[si+310] +mov es:[di+310],ax +mov ax,ds:[si+312] +mov es:[di+312],ax +mov ax,ds:[si+314] +mov es:[di+314],ax +mov ax,ds:[si+316] +mov es:[di+316],ax +mov ax,ds:[si+318] +mov es:[di+318],ax +ret +zoom_322: +mov ax,ds:[si+1] +mov es:[di+0],ax +mov ax,ds:[si+3] +mov es:[di+2],ax +mov ax,ds:[si+5] +mov es:[di+4],ax +mov ax,ds:[si+7] +mov es:[di+6],ax +mov ax,ds:[si+9] +mov es:[di+8],ax +mov ax,ds:[si+11] +mov es:[di+10],ax +mov ax,ds:[si+13] +mov es:[di+12],ax +mov ax,ds:[si+15] +mov es:[di+14],ax +mov ax,ds:[si+17] +mov es:[di+16],ax +mov ax,ds:[si+19] +mov es:[di+18],ax +mov ax,ds:[si+21] +mov es:[di+20],ax +mov ax,ds:[si+23] +mov es:[di+22],ax +mov ax,ds:[si+25] +mov es:[di+24],ax +mov ax,ds:[si+27] +mov es:[di+26],ax +mov ax,ds:[si+29] +mov es:[di+28],ax +mov ax,ds:[si+31] +mov es:[di+30],ax +mov ax,ds:[si+33] +mov es:[di+32],ax +mov ax,ds:[si+35] +mov es:[di+34],ax +mov ax,ds:[si+37] +mov es:[di+36],ax +mov ax,ds:[si+39] +mov es:[di+38],ax +mov ax,ds:[si+41] +mov es:[di+40],ax +mov ax,ds:[si+43] +mov es:[di+42],ax +mov ax,ds:[si+45] +mov es:[di+44],ax +mov ax,ds:[si+47] +mov es:[di+46],ax +mov ax,ds:[si+49] +mov es:[di+48],ax +mov ax,ds:[si+51] +mov es:[di+50],ax +mov ax,ds:[si+53] +mov es:[di+52],ax +mov ax,ds:[si+55] +mov es:[di+54],ax +mov ax,ds:[si+57] +mov es:[di+56],ax +mov ax,ds:[si+59] +mov es:[di+58],ax +mov ax,ds:[si+61] +mov es:[di+60],ax +mov ax,ds:[si+63] +mov es:[di+62],ax +mov ax,ds:[si+65] +mov es:[di+64],ax +mov ax,ds:[si+67] +mov es:[di+66],ax +mov ax,ds:[si+69] +mov es:[di+68],ax +mov ax,ds:[si+71] +mov es:[di+70],ax +mov ax,ds:[si+73] +mov es:[di+72],ax +mov ax,ds:[si+75] +mov es:[di+74],ax +mov ax,ds:[si+77] +mov es:[di+76],ax +mov ax,ds:[si+79] +mov es:[di+78],ax +add si,cx +mov ax,ds:[si+81] +mov es:[di+80],ax +mov ax,ds:[si+83] +mov es:[di+82],ax +mov ax,ds:[si+85] +mov es:[di+84],ax +mov ax,ds:[si+87] +mov es:[di+86],ax +mov ax,ds:[si+89] +mov es:[di+88],ax +mov ax,ds:[si+91] +mov es:[di+90],ax +mov ax,ds:[si+93] +mov es:[di+92],ax +mov ax,ds:[si+95] +mov es:[di+94],ax +mov ax,ds:[si+97] +mov es:[di+96],ax +mov ax,ds:[si+99] +mov es:[di+98],ax +mov ax,ds:[si+101] +mov es:[di+100],ax +mov ax,ds:[si+103] +mov es:[di+102],ax +mov ax,ds:[si+105] +mov es:[di+104],ax +mov ax,ds:[si+107] +mov es:[di+106],ax +mov ax,ds:[si+109] +mov es:[di+108],ax +mov ax,ds:[si+111] +mov es:[di+110],ax +mov ax,ds:[si+113] +mov es:[di+112],ax +mov ax,ds:[si+115] +mov es:[di+114],ax +mov ax,ds:[si+117] +mov es:[di+116],ax +mov ax,ds:[si+119] +mov es:[di+118],ax +add si,cx +mov ax,ds:[si+121] +mov es:[di+120],ax +mov ax,ds:[si+123] +mov es:[di+122],ax +mov ax,ds:[si+125] +mov es:[di+124],ax +mov ax,ds:[si+127] +mov es:[di+126],ax +mov ax,ds:[si+129] +mov es:[di+128],ax +mov ax,ds:[si+131] +mov es:[di+130],ax +mov ax,ds:[si+133] +mov es:[di+132],ax +mov ax,ds:[si+135] +mov es:[di+134],ax +mov ax,ds:[si+137] +mov es:[di+136],ax +mov ax,ds:[si+139] +mov es:[di+138],ax +mov ax,ds:[si+141] +mov es:[di+140],ax +mov ax,ds:[si+143] +mov es:[di+142],ax +mov ax,ds:[si+145] +mov es:[di+144],ax +mov ax,ds:[si+147] +mov es:[di+146],ax +mov ax,ds:[si+149] +mov es:[di+148],ax +mov ax,ds:[si+151] +mov es:[di+150],ax +mov ax,ds:[si+153] +mov es:[di+152],ax +mov ax,ds:[si+155] +mov es:[di+154],ax +mov ax,ds:[si+157] +mov es:[di+156],ax +mov ax,ds:[si+159] +mov es:[di+158],ax +mov al,ds:[si+160] +mov ah,al +mov es:[di+160],ax +mov ax,ds:[si+161] +mov es:[di+162],ax +mov ax,ds:[si+163] +mov es:[di+164],ax +mov ax,ds:[si+165] +mov es:[di+166],ax +mov ax,ds:[si+167] +mov es:[di+168],ax +mov ax,ds:[si+169] +mov es:[di+170],ax +mov ax,ds:[si+171] +mov es:[di+172],ax +mov ax,ds:[si+173] +mov es:[di+174],ax +mov ax,ds:[si+175] +mov es:[di+176],ax +mov ax,ds:[si+177] +mov es:[di+178],ax +mov ax,ds:[si+179] +mov es:[di+180],ax +mov ax,ds:[si+181] +mov es:[di+182],ax +mov ax,ds:[si+183] +mov es:[di+184],ax +mov ax,ds:[si+185] +mov es:[di+186],ax +mov ax,ds:[si+187] +mov es:[di+188],ax +mov ax,ds:[si+189] +mov es:[di+190],ax +mov ax,ds:[si+191] +mov es:[di+192],ax +mov ax,ds:[si+193] +mov es:[di+194],ax +mov ax,ds:[si+195] +mov es:[di+196],ax +mov ax,ds:[si+197] +mov es:[di+198],ax +add si,cx +mov ax,ds:[si+199] +mov es:[di+200],ax +mov ax,ds:[si+201] +mov es:[di+202],ax +mov ax,ds:[si+203] +mov es:[di+204],ax +mov ax,ds:[si+205] +mov es:[di+206],ax +mov ax,ds:[si+207] +mov es:[di+208],ax +mov ax,ds:[si+209] +mov es:[di+210],ax +mov ax,ds:[si+211] +mov es:[di+212],ax +mov ax,ds:[si+213] +mov es:[di+214],ax +mov ax,ds:[si+215] +mov es:[di+216],ax +mov ax,ds:[si+217] +mov es:[di+218],ax +mov ax,ds:[si+219] +mov es:[di+220],ax +mov ax,ds:[si+221] +mov es:[di+222],ax +mov ax,ds:[si+223] +mov es:[di+224],ax +mov ax,ds:[si+225] +mov es:[di+226],ax +mov ax,ds:[si+227] +mov es:[di+228],ax +mov ax,ds:[si+229] +mov es:[di+230],ax +mov ax,ds:[si+231] +mov es:[di+232],ax +mov ax,ds:[si+233] +mov es:[di+234],ax +mov ax,ds:[si+235] +mov es:[di+236],ax +mov ax,ds:[si+237] +mov es:[di+238],ax +add si,cx +mov ax,ds:[si+239] +mov es:[di+240],ax +mov ax,ds:[si+241] +mov es:[di+242],ax +mov ax,ds:[si+243] +mov es:[di+244],ax +mov ax,ds:[si+245] +mov es:[di+246],ax +mov ax,ds:[si+247] +mov es:[di+248],ax +mov ax,ds:[si+249] +mov es:[di+250],ax +mov ax,ds:[si+251] +mov es:[di+252],ax +mov ax,ds:[si+253] +mov es:[di+254],ax +mov ax,ds:[si+255] +mov es:[di+256],ax +mov ax,ds:[si+257] +mov es:[di+258],ax +mov ax,ds:[si+259] +mov es:[di+260],ax +mov ax,ds:[si+261] +mov es:[di+262],ax +mov ax,ds:[si+263] +mov es:[di+264],ax +mov ax,ds:[si+265] +mov es:[di+266],ax +mov ax,ds:[si+267] +mov es:[di+268],ax +mov ax,ds:[si+269] +mov es:[di+270],ax +mov ax,ds:[si+271] +mov es:[di+272],ax +mov ax,ds:[si+273] +mov es:[di+274],ax +mov ax,ds:[si+275] +mov es:[di+276],ax +mov ax,ds:[si+277] +mov es:[di+278],ax +mov ax,ds:[si+279] +mov es:[di+280],ax +mov ax,ds:[si+281] +mov es:[di+282],ax +mov ax,ds:[si+283] +mov es:[di+284],ax +mov ax,ds:[si+285] +mov es:[di+286],ax +mov ax,ds:[si+287] +mov es:[di+288],ax +mov ax,ds:[si+289] +mov es:[di+290],ax +mov ax,ds:[si+291] +mov es:[di+292],ax +mov ax,ds:[si+293] +mov es:[di+294],ax +mov ax,ds:[si+295] +mov es:[di+296],ax +mov ax,ds:[si+297] +mov es:[di+298],ax +mov ax,ds:[si+299] +mov es:[di+300],ax +mov ax,ds:[si+301] +mov es:[di+302],ax +mov ax,ds:[si+303] +mov es:[di+304],ax +mov ax,ds:[si+305] +mov es:[di+306],ax +mov ax,ds:[si+307] +mov es:[di+308],ax +mov ax,ds:[si+309] +mov es:[di+310],ax +mov ax,ds:[si+311] +mov es:[di+312],ax +mov ax,ds:[si+313] +mov es:[di+314],ax +mov ax,ds:[si+315] +mov es:[di+316],ax +mov ax,ds:[si+317] +mov es:[di+318],ax +ret +zoom_328: +mov ax,ds:[si+4] +mov es:[di+0],ax +mov ax,ds:[si+6] +mov es:[di+2],ax +mov ax,ds:[si+8] +mov es:[di+4],ax +mov ax,ds:[si+10] +mov es:[di+6],ax +mov ax,ds:[si+12] +mov es:[di+8],ax +mov ax,ds:[si+14] +mov es:[di+10],ax +mov ax,ds:[si+16] +mov es:[di+12],ax +mov ax,ds:[si+18] +mov es:[di+14],ax +mov ax,ds:[si+20] +mov es:[di+16],ax +mov ax,ds:[si+22] +mov es:[di+18],ax +mov ax,ds:[si+24] +mov es:[di+20],ax +mov ax,ds:[si+26] +mov es:[di+22],ax +mov ax,ds:[si+28] +mov es:[di+24],ax +mov ax,ds:[si+30] +mov es:[di+26],ax +mov ax,ds:[si+32] +mov es:[di+28],ax +mov ax,ds:[si+34] +mov es:[di+30],ax +mov ax,ds:[si+36] +mov es:[di+32],ax +mov ax,ds:[si+38] +mov es:[di+34],ax +mov al,ds:[si+40] +mov ah,al +mov es:[di+36],ax +mov ax,ds:[si+41] +mov es:[di+38],ax +mov ax,ds:[si+43] +mov es:[di+40],ax +mov ax,ds:[si+45] +mov es:[di+42],ax +mov ax,ds:[si+47] +mov es:[di+44],ax +mov ax,ds:[si+49] +mov es:[di+46],ax +mov ax,ds:[si+51] +mov es:[di+48],ax +mov ax,ds:[si+53] +mov es:[di+50],ax +mov ax,ds:[si+55] +mov es:[di+52],ax +mov ax,ds:[si+57] +mov es:[di+54],ax +mov ax,ds:[si+59] +mov es:[di+56],ax +mov ax,ds:[si+61] +mov es:[di+58],ax +mov ax,ds:[si+63] +mov es:[di+60],ax +mov ax,ds:[si+65] +mov es:[di+62],ax +mov ax,ds:[si+67] +mov es:[di+64],ax +mov ax,ds:[si+69] +mov es:[di+66],ax +mov ax,ds:[si+71] +mov es:[di+68],ax +mov ax,ds:[si+73] +mov es:[di+70],ax +mov ax,ds:[si+75] +mov es:[di+72],ax +mov ax,ds:[si+77] +mov es:[di+74],ax +add si,cx +mov ax,ds:[si+79] +mov es:[di+76],ax +mov ax,ds:[si+80] +mov es:[di+78],ax +mov ax,ds:[si+82] +mov es:[di+80],ax +mov ax,ds:[si+84] +mov es:[di+82],ax +mov ax,ds:[si+86] +mov es:[di+84],ax +mov ax,ds:[si+88] +mov es:[di+86],ax +mov ax,ds:[si+90] +mov es:[di+88],ax +mov ax,ds:[si+92] +mov es:[di+90],ax +mov ax,ds:[si+94] +mov es:[di+92],ax +mov ax,ds:[si+96] +mov es:[di+94],ax +mov ax,ds:[si+98] +mov es:[di+96],ax +mov ax,ds:[si+100] +mov es:[di+98],ax +mov ax,ds:[si+102] +mov es:[di+100],ax +mov ax,ds:[si+104] +mov es:[di+102],ax +mov ax,ds:[si+106] +mov es:[di+104],ax +mov ax,ds:[si+108] +mov es:[di+106],ax +mov ax,ds:[si+110] +mov es:[di+108],ax +mov ax,ds:[si+112] +mov es:[di+110],ax +mov ax,ds:[si+114] +mov es:[di+112],ax +mov ax,ds:[si+116] +mov es:[di+114],ax +add si,cx +mov ax,ds:[si+118] +mov es:[di+116],ax +mov al,ds:[si+120] +mov ah,al +mov es:[di+118],ax +mov ax,ds:[si+121] +mov es:[di+120],ax +mov ax,ds:[si+123] +mov es:[di+122],ax +mov ax,ds:[si+125] +mov es:[di+124],ax +mov ax,ds:[si+127] +mov es:[di+126],ax +mov ax,ds:[si+129] +mov es:[di+128],ax +mov ax,ds:[si+131] +mov es:[di+130],ax +mov ax,ds:[si+133] +mov es:[di+132],ax +mov ax,ds:[si+135] +mov es:[di+134],ax +mov ax,ds:[si+137] +mov es:[di+136],ax +mov ax,ds:[si+139] +mov es:[di+138],ax +mov ax,ds:[si+141] +mov es:[di+140],ax +mov ax,ds:[si+143] +mov es:[di+142],ax +mov ax,ds:[si+145] +mov es:[di+144],ax +mov ax,ds:[si+147] +mov es:[di+146],ax +mov ax,ds:[si+149] +mov es:[di+148],ax +mov ax,ds:[si+151] +mov es:[di+150],ax +mov ax,ds:[si+153] +mov es:[di+152],ax +mov ax,ds:[si+155] +mov es:[di+154],ax +mov ax,ds:[si+157] +mov es:[di+156],ax +mov ax,ds:[si+159] +mov es:[di+158],ax +mov al,ds:[si+160] +mov ah,al +mov es:[di+160],ax +mov ax,ds:[si+161] +mov es:[di+162],ax +mov ax,ds:[si+163] +mov es:[di+164],ax +mov ax,ds:[si+165] +mov es:[di+166],ax +mov ax,ds:[si+167] +mov es:[di+168],ax +mov ax,ds:[si+169] +mov es:[di+170],ax +mov ax,ds:[si+171] +mov es:[di+172],ax +mov ax,ds:[si+173] +mov es:[di+174],ax +mov ax,ds:[si+175] +mov es:[di+176],ax +mov ax,ds:[si+177] +mov es:[di+178],ax +mov ax,ds:[si+179] +mov es:[di+180],ax +mov ax,ds:[si+181] +mov es:[di+182],ax +mov ax,ds:[si+183] +mov es:[di+184],ax +mov ax,ds:[si+185] +mov es:[di+186],ax +mov ax,ds:[si+187] +mov es:[di+188],ax +mov ax,ds:[si+189] +mov es:[di+190],ax +mov ax,ds:[si+191] +mov es:[di+192],ax +mov ax,ds:[si+193] +mov es:[di+194],ax +mov ax,ds:[si+195] +mov es:[di+196],ax +mov ax,ds:[si+197] +mov es:[di+198],ax +add si,cx +mov ax,ds:[si+199] +mov es:[di+200],ax +mov ax,ds:[si+200] +mov es:[di+202],ax +mov ax,ds:[si+202] +mov es:[di+204],ax +mov ax,ds:[si+204] +mov es:[di+206],ax +mov ax,ds:[si+206] +mov es:[di+208],ax +mov ax,ds:[si+208] +mov es:[di+210],ax +mov ax,ds:[si+210] +mov es:[di+212],ax +mov ax,ds:[si+212] +mov es:[di+214],ax +mov ax,ds:[si+214] +mov es:[di+216],ax +mov ax,ds:[si+216] +mov es:[di+218],ax +mov ax,ds:[si+218] +mov es:[di+220],ax +mov ax,ds:[si+220] +mov es:[di+222],ax +mov ax,ds:[si+222] +mov es:[di+224],ax +mov ax,ds:[si+224] +mov es:[di+226],ax +mov ax,ds:[si+226] +mov es:[di+228],ax +mov ax,ds:[si+228] +mov es:[di+230],ax +mov ax,ds:[si+230] +mov es:[di+232],ax +mov ax,ds:[si+232] +mov es:[di+234],ax +mov ax,ds:[si+234] +mov es:[di+236],ax +mov ax,ds:[si+236] +mov es:[di+238],ax +add si,cx +mov ax,ds:[si+238] +mov es:[di+240],ax +mov al,ds:[si+240] +mov ah,al +mov es:[di+242],ax +mov ax,ds:[si+241] +mov es:[di+244],ax +mov ax,ds:[si+243] +mov es:[di+246],ax +mov ax,ds:[si+245] +mov es:[di+248],ax +mov ax,ds:[si+247] +mov es:[di+250],ax +mov ax,ds:[si+249] +mov es:[di+252],ax +mov ax,ds:[si+251] +mov es:[di+254],ax +mov ax,ds:[si+253] +mov es:[di+256],ax +mov ax,ds:[si+255] +mov es:[di+258],ax +mov ax,ds:[si+257] +mov es:[di+260],ax +mov ax,ds:[si+259] +mov es:[di+262],ax +mov ax,ds:[si+261] +mov es:[di+264],ax +mov ax,ds:[si+263] +mov es:[di+266],ax +mov ax,ds:[si+265] +mov es:[di+268],ax +mov ax,ds:[si+267] +mov es:[di+270],ax +mov ax,ds:[si+269] +mov es:[di+272],ax +mov ax,ds:[si+271] +mov es:[di+274],ax +mov ax,ds:[si+273] +mov es:[di+276],ax +mov ax,ds:[si+275] +mov es:[di+278],ax +mov ax,ds:[si+277] +mov es:[di+280],ax +mov ax,ds:[si+279] +mov es:[di+282],ax +mov ax,ds:[si+280] +mov es:[di+284],ax +mov ax,ds:[si+282] +mov es:[di+286],ax +mov ax,ds:[si+284] +mov es:[di+288],ax +mov ax,ds:[si+286] +mov es:[di+290],ax +mov ax,ds:[si+288] +mov es:[di+292],ax +mov ax,ds:[si+290] +mov es:[di+294],ax +mov ax,ds:[si+292] +mov es:[di+296],ax +mov ax,ds:[si+294] +mov es:[di+298],ax +mov ax,ds:[si+296] +mov es:[di+300],ax +mov ax,ds:[si+298] +mov es:[di+302],ax +mov ax,ds:[si+300] +mov es:[di+304],ax +mov ax,ds:[si+302] +mov es:[di+306],ax +mov ax,ds:[si+304] +mov es:[di+308],ax +mov ax,ds:[si+306] +mov es:[di+310],ax +mov ax,ds:[si+308] +mov es:[di+312],ax +mov ax,ds:[si+310] +mov es:[di+314],ax +mov ax,ds:[si+312] +mov es:[di+316],ax +mov ax,ds:[si+314] +mov es:[di+318],ax +ret +zoom_330: +mov ax,ds:[si+5] +mov es:[di+0],ax +mov ax,ds:[si+7] +mov es:[di+2],ax +mov ax,ds:[si+9] +mov es:[di+4],ax +mov ax,ds:[si+11] +mov es:[di+6],ax +mov ax,ds:[si+13] +mov es:[di+8],ax +mov ax,ds:[si+15] +mov es:[di+10],ax +mov ax,ds:[si+17] +mov es:[di+12],ax +mov ax,ds:[si+19] +mov es:[di+14],ax +mov ax,ds:[si+21] +mov es:[di+16],ax +mov ax,ds:[si+23] +mov es:[di+18],ax +mov ax,ds:[si+25] +mov es:[di+20],ax +mov ax,ds:[si+27] +mov es:[di+22],ax +mov ax,ds:[si+29] +mov es:[di+24],ax +mov ax,ds:[si+31] +mov es:[di+26],ax +mov ax,ds:[si+32] +mov es:[di+28],ax +mov ax,ds:[si+34] +mov es:[di+30],ax +mov ax,ds:[si+36] +mov es:[di+32],ax +mov ax,ds:[si+38] +mov es:[di+34],ax +mov ax,ds:[si+40] +mov es:[di+36],ax +mov ax,ds:[si+42] +mov es:[di+38],ax +mov ax,ds:[si+44] +mov es:[di+40],ax +mov ax,ds:[si+46] +mov es:[di+42],ax +mov ax,ds:[si+48] +mov es:[di+44],ax +mov ax,ds:[si+50] +mov es:[di+46],ax +mov ax,ds:[si+52] +mov es:[di+48],ax +mov ax,ds:[si+54] +mov es:[di+50],ax +mov ax,ds:[si+56] +mov es:[di+52],ax +mov ax,ds:[si+58] +mov es:[di+54],ax +mov ax,ds:[si+60] +mov es:[di+56],ax +mov ax,ds:[si+62] +mov es:[di+58],ax +mov al,ds:[si+64] +mov ah,al +mov es:[di+60],ax +mov ax,ds:[si+65] +mov es:[di+62],ax +mov ax,ds:[si+67] +mov es:[di+64],ax +mov ax,ds:[si+69] +mov es:[di+66],ax +mov ax,ds:[si+71] +mov es:[di+68],ax +mov ax,ds:[si+73] +mov es:[di+70],ax +mov ax,ds:[si+75] +mov es:[di+72],ax +mov ax,ds:[si+77] +mov es:[di+74],ax +add si,cx +mov ax,ds:[si+79] +mov es:[di+76],ax +mov ax,ds:[si+81] +mov es:[di+78],ax +mov ax,ds:[si+83] +mov es:[di+80],ax +mov ax,ds:[si+85] +mov es:[di+82],ax +mov ax,ds:[si+87] +mov es:[di+84],ax +mov ax,ds:[si+89] +mov es:[di+86],ax +mov ax,ds:[si+91] +mov es:[di+88],ax +mov ax,ds:[si+93] +mov es:[di+90],ax +mov ax,ds:[si+95] +mov es:[di+92],ax +mov ax,ds:[si+96] +mov es:[di+94],ax +mov ax,ds:[si+98] +mov es:[di+96],ax +mov ax,ds:[si+100] +mov es:[di+98],ax +mov ax,ds:[si+102] +mov es:[di+100],ax +mov ax,ds:[si+104] +mov es:[di+102],ax +mov ax,ds:[si+106] +mov es:[di+104],ax +mov ax,ds:[si+108] +mov es:[di+106],ax +mov ax,ds:[si+110] +mov es:[di+108],ax +mov ax,ds:[si+112] +mov es:[di+110],ax +mov ax,ds:[si+114] +mov es:[di+112],ax +mov ax,ds:[si+116] +mov es:[di+114],ax +add si,cx +mov ax,ds:[si+118] +mov es:[di+116],ax +mov ax,ds:[si+120] +mov es:[di+118],ax +mov ax,ds:[si+122] +mov es:[di+120],ax +mov ax,ds:[si+124] +mov es:[di+122],ax +mov ax,ds:[si+126] +mov es:[di+124],ax +mov al,ds:[si+128] +mov ah,al +mov es:[di+126],ax +mov ax,ds:[si+129] +mov es:[di+128],ax +mov ax,ds:[si+131] +mov es:[di+130],ax +mov ax,ds:[si+133] +mov es:[di+132],ax +mov ax,ds:[si+135] +mov es:[di+134],ax +mov ax,ds:[si+137] +mov es:[di+136],ax +mov ax,ds:[si+139] +mov es:[di+138],ax +mov ax,ds:[si+141] +mov es:[di+140],ax +mov ax,ds:[si+143] +mov es:[di+142],ax +mov ax,ds:[si+145] +mov es:[di+144],ax +mov ax,ds:[si+147] +mov es:[di+146],ax +mov ax,ds:[si+149] +mov es:[di+148],ax +mov ax,ds:[si+151] +mov es:[di+150],ax +mov ax,ds:[si+153] +mov es:[di+152],ax +mov ax,ds:[si+155] +mov es:[di+154],ax +mov ax,ds:[si+157] +mov es:[di+156],ax +mov ax,ds:[si+159] +mov es:[di+158],ax +mov al,ds:[si+160] +mov ah,al +mov es:[di+160],ax +mov ax,ds:[si+161] +mov es:[di+162],ax +mov ax,ds:[si+163] +mov es:[di+164],ax +mov ax,ds:[si+165] +mov es:[di+166],ax +mov ax,ds:[si+167] +mov es:[di+168],ax +mov ax,ds:[si+169] +mov es:[di+170],ax +mov ax,ds:[si+171] +mov es:[di+172],ax +mov ax,ds:[si+173] +mov es:[di+174],ax +mov ax,ds:[si+175] +mov es:[di+176],ax +mov ax,ds:[si+177] +mov es:[di+178],ax +mov ax,ds:[si+179] +mov es:[di+180],ax +mov ax,ds:[si+181] +mov es:[di+182],ax +mov ax,ds:[si+183] +mov es:[di+184],ax +mov ax,ds:[si+185] +mov es:[di+186],ax +mov ax,ds:[si+187] +mov es:[di+188],ax +mov ax,ds:[si+189] +mov es:[di+190],ax +mov ax,ds:[si+191] +mov es:[di+192],ax +mov ax,ds:[si+192] +mov es:[di+194],ax +mov ax,ds:[si+194] +mov es:[di+196],ax +mov ax,ds:[si+196] +mov es:[di+198],ax +add si,cx +mov ax,ds:[si+198] +mov es:[di+200],ax +mov ax,ds:[si+200] +mov es:[di+202],ax +mov ax,ds:[si+202] +mov es:[di+204],ax +mov ax,ds:[si+204] +mov es:[di+206],ax +mov ax,ds:[si+206] +mov es:[di+208],ax +mov ax,ds:[si+208] +mov es:[di+210],ax +mov ax,ds:[si+210] +mov es:[di+212],ax +mov ax,ds:[si+212] +mov es:[di+214],ax +mov ax,ds:[si+214] +mov es:[di+216],ax +mov ax,ds:[si+216] +mov es:[di+218],ax +mov ax,ds:[si+218] +mov es:[di+220],ax +mov ax,ds:[si+220] +mov es:[di+222],ax +mov ax,ds:[si+222] +mov es:[di+224],ax +mov al,ds:[si+224] +mov ah,al +mov es:[di+226],ax +mov ax,ds:[si+225] +mov es:[di+228],ax +mov ax,ds:[si+227] +mov es:[di+230],ax +mov ax,ds:[si+229] +mov es:[di+232],ax +mov ax,ds:[si+231] +mov es:[di+234],ax +mov ax,ds:[si+233] +mov es:[di+236],ax +mov ax,ds:[si+235] +mov es:[di+238],ax +add si,cx +mov ax,ds:[si+237] +mov es:[di+240],ax +mov ax,ds:[si+239] +mov es:[di+242],ax +mov ax,ds:[si+241] +mov es:[di+244],ax +mov ax,ds:[si+243] +mov es:[di+246],ax +mov ax,ds:[si+245] +mov es:[di+248],ax +mov ax,ds:[si+247] +mov es:[di+250],ax +mov ax,ds:[si+249] +mov es:[di+252],ax +mov ax,ds:[si+251] +mov es:[di+254],ax +mov ax,ds:[si+253] +mov es:[di+256],ax +mov ax,ds:[si+255] +mov es:[di+258],ax +mov ax,ds:[si+256] +mov es:[di+260],ax +mov ax,ds:[si+258] +mov es:[di+262],ax +mov ax,ds:[si+260] +mov es:[di+264],ax +mov ax,ds:[si+262] +mov es:[di+266],ax +mov ax,ds:[si+264] +mov es:[di+268],ax +mov ax,ds:[si+266] +mov es:[di+270],ax +mov ax,ds:[si+268] +mov es:[di+272],ax +mov ax,ds:[si+270] +mov es:[di+274],ax +mov ax,ds:[si+272] +mov es:[di+276],ax +mov ax,ds:[si+274] +mov es:[di+278],ax +mov ax,ds:[si+276] +mov es:[di+280],ax +mov ax,ds:[si+278] +mov es:[di+282],ax +mov ax,ds:[si+280] +mov es:[di+284],ax +mov ax,ds:[si+282] +mov es:[di+286],ax +mov ax,ds:[si+284] +mov es:[di+288],ax +mov ax,ds:[si+286] +mov es:[di+290],ax +mov al,ds:[si+288] +mov ah,al +mov es:[di+292],ax +mov ax,ds:[si+289] +mov es:[di+294],ax +mov ax,ds:[si+291] +mov es:[di+296],ax +mov ax,ds:[si+293] +mov es:[di+298],ax +mov ax,ds:[si+295] +mov es:[di+300],ax +mov ax,ds:[si+297] +mov es:[di+302],ax +mov ax,ds:[si+299] +mov es:[di+304],ax +mov ax,ds:[si+301] +mov es:[di+306],ax +mov ax,ds:[si+303] +mov es:[di+308],ax +mov ax,ds:[si+305] +mov es:[di+310],ax +mov ax,ds:[si+307] +mov es:[di+312],ax +mov ax,ds:[si+309] +mov es:[di+314],ax +mov ax,ds:[si+311] +mov es:[di+316],ax +mov ax,ds:[si+313] +mov es:[di+318],ax +ret +zoom_336: +mov ax,ds:[si+8] +mov es:[di+0],ax +mov ax,ds:[si+10] +mov es:[di+2],ax +mov ax,ds:[si+12] +mov es:[di+4],ax +mov ax,ds:[si+14] +mov es:[di+6],ax +mov ax,ds:[si+16] +mov es:[di+8],ax +mov ax,ds:[si+18] +mov es:[di+10],ax +mov al,ds:[si+20] +mov ah,al +mov es:[di+12],ax +mov ax,ds:[si+21] +mov es:[di+14],ax +mov ax,ds:[si+23] +mov es:[di+16],ax +mov ax,ds:[si+25] +mov es:[di+18],ax +mov ax,ds:[si+27] +mov es:[di+20],ax +mov ax,ds:[si+29] +mov es:[di+22],ax +mov ax,ds:[si+31] +mov es:[di+24],ax +mov ax,ds:[si+33] +mov es:[di+26],ax +mov ax,ds:[si+35] +mov es:[di+28],ax +mov ax,ds:[si+37] +mov es:[di+30],ax +mov ax,ds:[si+39] +mov es:[di+32],ax +mov ax,ds:[si+40] +mov es:[di+34],ax +mov ax,ds:[si+42] +mov es:[di+36],ax +mov ax,ds:[si+44] +mov es:[di+38],ax +mov ax,ds:[si+46] +mov es:[di+40],ax +mov ax,ds:[si+48] +mov es:[di+42],ax +mov ax,ds:[si+50] +mov es:[di+44],ax +mov ax,ds:[si+52] +mov es:[di+46],ax +mov ax,ds:[si+54] +mov es:[di+48],ax +mov ax,ds:[si+56] +mov es:[di+50],ax +mov ax,ds:[si+58] +mov es:[di+52],ax +mov al,ds:[si+60] +mov ah,al +mov es:[di+54],ax +mov ax,ds:[si+61] +mov es:[di+56],ax +mov ax,ds:[si+63] +mov es:[di+58],ax +mov ax,ds:[si+65] +mov es:[di+60],ax +mov ax,ds:[si+67] +mov es:[di+62],ax +mov ax,ds:[si+69] +mov es:[di+64],ax +mov ax,ds:[si+71] +mov es:[di+66],ax +mov ax,ds:[si+73] +mov es:[di+68],ax +mov ax,ds:[si+75] +mov es:[di+70],ax +mov ax,ds:[si+77] +mov es:[di+72],ax +mov ax,ds:[si+79] +mov es:[di+74],ax +add si,cx +mov ax,ds:[si+80] +mov es:[di+76],ax +mov ax,ds:[si+82] +mov es:[di+78],ax +mov ax,ds:[si+84] +mov es:[di+80],ax +mov ax,ds:[si+86] +mov es:[di+82],ax +mov ax,ds:[si+88] +mov es:[di+84],ax +mov ax,ds:[si+90] +mov es:[di+86],ax +mov ax,ds:[si+92] +mov es:[di+88],ax +mov ax,ds:[si+94] +mov es:[di+90],ax +mov ax,ds:[si+96] +mov es:[di+92],ax +mov ax,ds:[si+98] +mov es:[di+94],ax +mov al,ds:[si+100] +mov ah,al +mov es:[di+96],ax +mov ax,ds:[si+101] +mov es:[di+98],ax +mov ax,ds:[si+103] +mov es:[di+100],ax +mov ax,ds:[si+105] +mov es:[di+102],ax +mov ax,ds:[si+107] +mov es:[di+104],ax +mov ax,ds:[si+109] +mov es:[di+106],ax +mov ax,ds:[si+111] +mov es:[di+108],ax +mov ax,ds:[si+113] +mov es:[di+110],ax +mov ax,ds:[si+115] +mov es:[di+112],ax +mov ax,ds:[si+117] +mov es:[di+114],ax +add si,cx +mov ax,ds:[si+119] +mov es:[di+116],ax +mov ax,ds:[si+120] +mov es:[di+118],ax +mov ax,ds:[si+122] +mov es:[di+120],ax +mov ax,ds:[si+124] +mov es:[di+122],ax +mov ax,ds:[si+126] +mov es:[di+124],ax +mov ax,ds:[si+128] +mov es:[di+126],ax +mov ax,ds:[si+130] +mov es:[di+128],ax +mov ax,ds:[si+132] +mov es:[di+130],ax +mov ax,ds:[si+134] +mov es:[di+132],ax +mov ax,ds:[si+136] +mov es:[di+134],ax +mov ax,ds:[si+138] +mov es:[di+136],ax +mov al,ds:[si+140] +mov ah,al +mov es:[di+138],ax +mov ax,ds:[si+141] +mov es:[di+140],ax +mov ax,ds:[si+143] +mov es:[di+142],ax +mov ax,ds:[si+145] +mov es:[di+144],ax +mov ax,ds:[si+147] +mov es:[di+146],ax +mov ax,ds:[si+149] +mov es:[di+148],ax +mov ax,ds:[si+151] +mov es:[di+150],ax +mov ax,ds:[si+153] +mov es:[di+152],ax +mov ax,ds:[si+155] +mov es:[di+154],ax +mov ax,ds:[si+157] +mov es:[di+156],ax +mov ax,ds:[si+159] +mov es:[di+158],ax +mov al,ds:[si+160] +mov ah,al +mov es:[di+160],ax +mov ax,ds:[si+161] +mov es:[di+162],ax +mov ax,ds:[si+163] +mov es:[di+164],ax +mov ax,ds:[si+165] +mov es:[di+166],ax +mov ax,ds:[si+167] +mov es:[di+168],ax +mov ax,ds:[si+169] +mov es:[di+170],ax +mov ax,ds:[si+171] +mov es:[di+172],ax +mov ax,ds:[si+173] +mov es:[di+174],ax +mov ax,ds:[si+175] +mov es:[di+176],ax +mov ax,ds:[si+177] +mov es:[di+178],ax +mov ax,ds:[si+179] +mov es:[di+180],ax +mov ax,ds:[si+180] +mov es:[di+182],ax +mov ax,ds:[si+182] +mov es:[di+184],ax +mov ax,ds:[si+184] +mov es:[di+186],ax +mov ax,ds:[si+186] +mov es:[di+188],ax +mov ax,ds:[si+188] +mov es:[di+190],ax +mov ax,ds:[si+190] +mov es:[di+192],ax +mov ax,ds:[si+192] +mov es:[di+194],ax +mov ax,ds:[si+194] +mov es:[di+196],ax +mov ax,ds:[si+196] +mov es:[di+198],ax +add si,cx +mov ax,ds:[si+198] +mov es:[di+200],ax +mov al,ds:[si+200] +mov ah,al +mov es:[di+202],ax +mov ax,ds:[si+201] +mov es:[di+204],ax +mov ax,ds:[si+203] +mov es:[di+206],ax +mov ax,ds:[si+205] +mov es:[di+208],ax +mov ax,ds:[si+207] +mov es:[di+210],ax +mov ax,ds:[si+209] +mov es:[di+212],ax +mov ax,ds:[si+211] +mov es:[di+214],ax +mov ax,ds:[si+213] +mov es:[di+216],ax +mov ax,ds:[si+215] +mov es:[di+218],ax +mov ax,ds:[si+217] +mov es:[di+220],ax +mov ax,ds:[si+219] +mov es:[di+222],ax +mov ax,ds:[si+220] +mov es:[di+224],ax +mov ax,ds:[si+222] +mov es:[di+226],ax +mov ax,ds:[si+224] +mov es:[di+228],ax +mov ax,ds:[si+226] +mov es:[di+230],ax +mov ax,ds:[si+228] +mov es:[di+232],ax +mov ax,ds:[si+230] +mov es:[di+234],ax +mov ax,ds:[si+232] +mov es:[di+236],ax +mov ax,ds:[si+234] +mov es:[di+238],ax +mov ax,ds:[si+236] +mov es:[di+240],ax +mov ax,ds:[si+238] +mov es:[di+242],ax +add si,cx +mov al,ds:[si+240] +mov ah,al +mov es:[di+244],ax +mov ax,ds:[si+241] +mov es:[di+246],ax +mov ax,ds:[si+243] +mov es:[di+248],ax +mov ax,ds:[si+245] +mov es:[di+250],ax +mov ax,ds:[si+247] +mov es:[di+252],ax +mov ax,ds:[si+249] +mov es:[di+254],ax +mov ax,ds:[si+251] +mov es:[di+256],ax +mov ax,ds:[si+253] +mov es:[di+258],ax +mov ax,ds:[si+255] +mov es:[di+260],ax +mov ax,ds:[si+257] +mov es:[di+262],ax +mov ax,ds:[si+259] +mov es:[di+264],ax +mov ax,ds:[si+260] +mov es:[di+266],ax +mov ax,ds:[si+262] +mov es:[di+268],ax +mov ax,ds:[si+264] +mov es:[di+270],ax +mov ax,ds:[si+266] +mov es:[di+272],ax +mov ax,ds:[si+268] +mov es:[di+274],ax +mov ax,ds:[si+270] +mov es:[di+276],ax +mov ax,ds:[si+272] +mov es:[di+278],ax +mov ax,ds:[si+274] +mov es:[di+280],ax +mov ax,ds:[si+276] +mov es:[di+282],ax +mov ax,ds:[si+278] +mov es:[di+284],ax +mov al,ds:[si+280] +mov ah,al +mov es:[di+286],ax +mov ax,ds:[si+281] +mov es:[di+288],ax +mov ax,ds:[si+283] +mov es:[di+290],ax +mov ax,ds:[si+285] +mov es:[di+292],ax +mov ax,ds:[si+287] +mov es:[di+294],ax +mov ax,ds:[si+289] +mov es:[di+296],ax +mov ax,ds:[si+291] +mov es:[di+298],ax +mov ax,ds:[si+293] +mov es:[di+300],ax +mov ax,ds:[si+295] +mov es:[di+302],ax +mov ax,ds:[si+297] +mov es:[di+304],ax +mov ax,ds:[si+299] +mov es:[di+306],ax +mov ax,ds:[si+300] +mov es:[di+308],ax +mov ax,ds:[si+302] +mov es:[di+310],ax +mov ax,ds:[si+304] +mov es:[di+312],ax +mov ax,ds:[si+306] +mov es:[di+314],ax +mov ax,ds:[si+308] +mov es:[di+316],ax +mov ax,ds:[si+310] +mov es:[di+318],ax +ret +zoom_338: +mov ax,ds:[si+9] +mov es:[di+0],ax +mov ax,ds:[si+11] +mov es:[di+2],ax +mov ax,ds:[si+13] +mov es:[di+4],ax +mov ax,ds:[si+15] +mov es:[di+6],ax +mov ax,ds:[si+17] +mov es:[di+8],ax +mov ax,ds:[si+18] +mov es:[di+10],ax +mov ax,ds:[si+20] +mov es:[di+12],ax +mov ax,ds:[si+22] +mov es:[di+14],ax +mov ax,ds:[si+24] +mov es:[di+16],ax +mov ax,ds:[si+26] +mov es:[di+18],ax +mov ax,ds:[si+28] +mov es:[di+20],ax +mov ax,ds:[si+30] +mov es:[di+22],ax +mov ax,ds:[si+32] +mov es:[di+24],ax +mov ax,ds:[si+34] +mov es:[di+26],ax +mov al,ds:[si+36] +mov ah,al +mov es:[di+28],ax +mov ax,ds:[si+37] +mov es:[di+30],ax +mov ax,ds:[si+39] +mov es:[di+32],ax +mov ax,ds:[si+41] +mov es:[di+34],ax +mov ax,ds:[si+43] +mov es:[di+36],ax +mov ax,ds:[si+45] +mov es:[di+38],ax +mov ax,ds:[si+47] +mov es:[di+40],ax +mov ax,ds:[si+49] +mov es:[di+42],ax +mov ax,ds:[si+51] +mov es:[di+44],ax +mov ax,ds:[si+53] +mov es:[di+46],ax +mov ax,ds:[si+54] +mov es:[di+48],ax +mov ax,ds:[si+56] +mov es:[di+50],ax +mov ax,ds:[si+58] +mov es:[di+52],ax +mov ax,ds:[si+60] +mov es:[di+54],ax +mov ax,ds:[si+62] +mov es:[di+56],ax +mov ax,ds:[si+64] +mov es:[di+58],ax +mov ax,ds:[si+66] +mov es:[di+60],ax +mov ax,ds:[si+68] +mov es:[di+62],ax +mov ax,ds:[si+70] +mov es:[di+64],ax +mov al,ds:[si+72] +mov ah,al +mov es:[di+66],ax +mov ax,ds:[si+73] +mov es:[di+68],ax +mov ax,ds:[si+75] +mov es:[di+70],ax +mov ax,ds:[si+77] +mov es:[di+72],ax +mov ax,ds:[si+79] +mov es:[di+74],ax +add si,cx +mov ax,ds:[si+81] +mov es:[di+76],ax +mov ax,ds:[si+83] +mov es:[di+78],ax +mov ax,ds:[si+85] +mov es:[di+80],ax +mov ax,ds:[si+87] +mov es:[di+82],ax +mov al,ds:[si+89] +mov ah,al +mov es:[di+84],ax +mov ax,ds:[si+90] +mov es:[di+86],ax +mov ax,ds:[si+92] +mov es:[di+88],ax +mov ax,ds:[si+94] +mov es:[di+90],ax +mov ax,ds:[si+96] +mov es:[di+92],ax +mov ax,ds:[si+98] +mov es:[di+94],ax +mov ax,ds:[si+100] +mov es:[di+96],ax +mov ax,ds:[si+102] +mov es:[di+98],ax +mov ax,ds:[si+104] +mov es:[di+100],ax +mov ax,ds:[si+106] +mov es:[di+102],ax +mov ax,ds:[si+107] +mov es:[di+104],ax +mov ax,ds:[si+109] +mov es:[di+106],ax +mov ax,ds:[si+111] +mov es:[di+108],ax +mov ax,ds:[si+113] +mov es:[di+110],ax +mov ax,ds:[si+115] +mov es:[di+112],ax +mov ax,ds:[si+117] +mov es:[di+114],ax +add si,cx +mov ax,ds:[si+119] +mov es:[di+116],ax +mov ax,ds:[si+121] +mov es:[di+118],ax +mov ax,ds:[si+123] +mov es:[di+120],ax +mov al,ds:[si+125] +mov ah,al +mov es:[di+122],ax +mov ax,ds:[si+126] +mov es:[di+124],ax +mov ax,ds:[si+128] +mov es:[di+126],ax +mov ax,ds:[si+130] +mov es:[di+128],ax +mov ax,ds:[si+132] +mov es:[di+130],ax +mov ax,ds:[si+134] +mov es:[di+132],ax +mov ax,ds:[si+136] +mov es:[di+134],ax +mov ax,ds:[si+138] +mov es:[di+136],ax +mov ax,ds:[si+140] +mov es:[di+138],ax +mov ax,ds:[si+142] +mov es:[di+140],ax +mov ax,ds:[si+143] +mov es:[di+142],ax +mov ax,ds:[si+145] +mov es:[di+144],ax +mov ax,ds:[si+147] +mov es:[di+146],ax +mov ax,ds:[si+149] +mov es:[di+148],ax +mov ax,ds:[si+151] +mov es:[di+150],ax +mov ax,ds:[si+153] +mov es:[di+152],ax +mov ax,ds:[si+155] +mov es:[di+154],ax +mov ax,ds:[si+157] +mov es:[di+156],ax +mov ax,ds:[si+159] +mov es:[di+158],ax +mov al,ds:[si+160] +mov ah,al +mov es:[di+160],ax +mov ax,ds:[si+161] +mov es:[di+162],ax +mov ax,ds:[si+163] +mov es:[di+164],ax +mov ax,ds:[si+165] +mov es:[di+166],ax +mov ax,ds:[si+167] +mov es:[di+168],ax +mov ax,ds:[si+169] +mov es:[di+170],ax +mov ax,ds:[si+171] +mov es:[di+172],ax +mov ax,ds:[si+173] +mov es:[di+174],ax +mov ax,ds:[si+175] +mov es:[di+176],ax +mov al,ds:[si+177] +mov ah,al +mov es:[di+178],ax +mov ax,ds:[si+178] +mov es:[di+180],ax +mov ax,ds:[si+180] +mov es:[di+182],ax +mov ax,ds:[si+182] +mov es:[di+184],ax +mov ax,ds:[si+184] +mov es:[di+186],ax +mov ax,ds:[si+186] +mov es:[di+188],ax +mov ax,ds:[si+188] +mov es:[di+190],ax +mov ax,ds:[si+190] +mov es:[di+192],ax +mov ax,ds:[si+192] +mov es:[di+194],ax +mov ax,ds:[si+194] +mov es:[di+196],ax +mov ax,ds:[si+195] +mov es:[di+198],ax +add si,cx +mov ax,ds:[si+197] +mov es:[di+200],ax +mov ax,ds:[si+199] +mov es:[di+202],ax +mov ax,ds:[si+201] +mov es:[di+204],ax +mov ax,ds:[si+203] +mov es:[di+206],ax +mov ax,ds:[si+205] +mov es:[di+208],ax +mov ax,ds:[si+207] +mov es:[di+210],ax +mov ax,ds:[si+209] +mov es:[di+212],ax +mov ax,ds:[si+211] +mov es:[di+214],ax +mov al,ds:[si+213] +mov ah,al +mov es:[di+216],ax +mov ax,ds:[si+214] +mov es:[di+218],ax +mov ax,ds:[si+216] +mov es:[di+220],ax +mov ax,ds:[si+218] +mov es:[di+222],ax +mov ax,ds:[si+220] +mov es:[di+224],ax +mov ax,ds:[si+222] +mov es:[di+226],ax +mov ax,ds:[si+224] +mov es:[di+228],ax +mov ax,ds:[si+226] +mov es:[di+230],ax +mov ax,ds:[si+228] +mov es:[di+232],ax +mov ax,ds:[si+230] +mov es:[di+234],ax +mov ax,ds:[si+231] +mov es:[di+236],ax +mov ax,ds:[si+233] +mov es:[di+238],ax +mov ax,ds:[si+235] +mov es:[di+240],ax +mov ax,ds:[si+237] +mov es:[di+242],ax +add si,cx +mov ax,ds:[si+239] +mov es:[di+244],ax +mov ax,ds:[si+241] +mov es:[di+246],ax +mov ax,ds:[si+243] +mov es:[di+248],ax +mov ax,ds:[si+245] +mov es:[di+250],ax +mov ax,ds:[si+247] +mov es:[di+252],ax +mov ax,ds:[si+248] +mov es:[di+254],ax +mov ax,ds:[si+250] +mov es:[di+256],ax +mov ax,ds:[si+252] +mov es:[di+258],ax +mov ax,ds:[si+254] +mov es:[di+260],ax +mov ax,ds:[si+256] +mov es:[di+262],ax +mov ax,ds:[si+258] +mov es:[di+264],ax +mov ax,ds:[si+260] +mov es:[di+266],ax +mov ax,ds:[si+262] +mov es:[di+268],ax +mov ax,ds:[si+264] +mov es:[di+270],ax +mov al,ds:[si+266] +mov ah,al +mov es:[di+272],ax +mov ax,ds:[si+267] +mov es:[di+274],ax +mov ax,ds:[si+269] +mov es:[di+276],ax +mov ax,ds:[si+271] +mov es:[di+278],ax +mov ax,ds:[si+273] +mov es:[di+280],ax +mov ax,ds:[si+275] +mov es:[di+282],ax +mov ax,ds:[si+277] +mov es:[di+284],ax +mov ax,ds:[si+279] +mov es:[di+286],ax +mov ax,ds:[si+281] +mov es:[di+288],ax +mov ax,ds:[si+283] +mov es:[di+290],ax +mov ax,ds:[si+284] +mov es:[di+292],ax +mov ax,ds:[si+286] +mov es:[di+294],ax +mov ax,ds:[si+288] +mov es:[di+296],ax +mov ax,ds:[si+290] +mov es:[di+298],ax +mov ax,ds:[si+292] +mov es:[di+300],ax +mov ax,ds:[si+294] +mov es:[di+302],ax +mov ax,ds:[si+296] +mov es:[di+304],ax +mov ax,ds:[si+298] +mov es:[di+306],ax +mov ax,ds:[si+300] +mov es:[di+308],ax +mov al,ds:[si+302] +mov ah,al +mov es:[di+310],ax +mov ax,ds:[si+303] +mov es:[di+312],ax +mov ax,ds:[si+305] +mov es:[di+314],ax +mov ax,ds:[si+307] +mov es:[di+316],ax +mov ax,ds:[si+309] +mov es:[di+318],ax +ret +zoom ENDP diff --git a/GLENZ/_BGPIC.OBK b/GLENZ/_BGPIC.OBK new file mode 100644 index 0000000..7aa6b91 Binary files /dev/null and b/GLENZ/_BGPIC.OBK differ diff --git a/GLENZ/_FC.OBK b/GLENZ/_FC.OBK new file mode 100644 index 0000000..6cffffb Binary files /dev/null and b/GLENZ/_FC.OBK differ diff --git a/GRAB/AO.C b/GRAB/AO.C new file mode 100644 index 0000000..de9a6b9 --- /dev/null +++ b/GRAB/AO.C @@ -0,0 +1,324 @@ + +#include +#include +#include +#include +#include +#include +#include + +int xit=0; +int showonly=0; +int greycol,blackcol; +int fcp4plane=0; +int fcptransp=1; +int fcporigo=0; +int fcpsavepal=1; +int fcpstyle=15; /* wing commander style */ +int setback255=0; + +char filename[64]; +char showname[16][64]; +int shownum=0; +int paletteset=0; + +int bx1,by1,bx2,by2; + +int pass; +int picnum=0,picwrt=0; + +FILE *f1; +FILE *f2; /* out */ + +union REGS reg; +unsigned char far *vram=(char far *)0xa0000000; + +char apubuf[512]; + +unsigned char pal[768]; +unsigned char pic[64000]; +unsigned char pic2[64000]; +unsigned char picorg[64000]; +int backcol=0; + +#define SUBMAX 384 +long picpos[SUBMAX],pics; /* for loading FCP:s */ +long wpicpos[SUBMAX],wpics; /* for loading FCP:s */ + +#define pxor(xx,yy) *(vram+(xx)+(yy)*320)=255-*(vram+(xx)+(yy)*320) +#define pset(xx,yy,zz) *(vram+(xx)+(yy)*320)=(zz) +#define pget(xx,yy) *(vram+(xx)+(yy)*320) + +#define AOLOAD + +#include "lfcp.c" +#include "sfcp.c" + +main(int argc,char *argv[]) +{ + int a,b,c; + *filename=0; + for(a=1;a Switches:\n" + "-h help\n" + "-o0 set backg. color to 0\n" + ); return(0); + } + else printf("FCP Animation Optimizer V2.0\n"); + + /* do some real stuff */ + reg.x.ax=0x13; + int86(0x10,®,®); + { + pass=0; + bx1=by1=bx2=by2=0; + memset(pic,backcol,64000); + memset(picorg,backcol,64000); + viewpic(); + for(b=0;b +#include +#include +#include + +int colsreserved=1; + +int setback255=0; +int filetype; /* 1=LBM */ +int backcol=255; + +unsigned char far *vram=(char far *)0xa0000000; +union REGS reg; +unsigned char far pic[64000]; +unsigned char far pic1[64000]; +unsigned char far pic2[64000]; +unsigned char far bigpal[8192*3]; +unsigned char far bigpalhsv[8192*3]; +unsigned int bigcnt[8192]; +unsigned int bigcntbak[8192]; +int bigpalpnt,bigpalnum; +unsigned char palmap[256]; +unsigned char far pal1[768]; +unsigned char far pal2[768]; +unsigned char far palhsv[768]; +unsigned char far tmphsv[768]; +unsigned char far pal[768]; +unsigned char far defpal[16*3]={ +00,00,00, +00,00,40, +00,40,00, +00,40,40, +40,00,00, +40,00,40, +40,20,00, +40,40,40, +20,20,20, +20,20,60, +20,60,20, +20,60,60, +60,20,20, +60,20,60, +60,60,20, +60,60,60, +}; + +int eschit(void) +{ + return(kbhit()); +} + +#include "loadlbm.c" + +main(int argc,char *argv[]) +{ + int a,b,c,d,x,y; + printf("\nColorMixer V1.0 (C) 1991 Sami Tammilehto \n\n"); + if(argc==1) + { + printf("usage: col [?###] \n" + "when picture is in screen, press space to\n" + "toggle pics/palette, ESC to exit.\n" + "!### means reserve ### first colors for other\n" + "purposes (leave empty/to default pal)\n"); + return(0); + } + if(*argv[1]=='?') + { + colsreserved=atoi(argv[1]+1); + argv[1]=argv[2]; + argv[2]=argv[3]; + } + bigpalpnt=0; + printf("Processing, please wait...\n"); + printf("File: %s",argv[1]); + memset(pic,0,64000); + memset(pal,0,768); + loadlbm(argv[1]); printf("100%%\n"); + memcpy(pic1,pic,64000); + memcpy(pal1,pal,768); + analyze(pic1,pal1); + printf("File: %s",argv[2]); + memset(pic,0,64000); + memset(pal,0,768); + loadlbm(argv[2]); printf("100%%\n"); + memcpy(pic2,pic,64000); + memcpy(pal2,pal,768); + analyze(pic2,pal2); + bigpalnum=bigpalpnt; + printf("Colors in big palette: %i\n",bigpalnum); + printf("Combining and optimizing palettes...\n"); + memset(pal,0,768); + memcpy(pal,defpal,16*3); + createpal(); + printf("Remapping first picture... \n"); + remap(pic1,pal1,pal); + printf("Remapping second picture... \n"); + remap(pic2,pal2,pal); + reg.x.ax=0x13; + int86(0x10,®,®); + { + outp(0x3c8,0); + for(a=0;a<768;a++) outp(0x3c9,pal[a]); + } + for(;;) + { + memset(vram,0,64000); + for(a=0;a<16;a++) for(b=0;b<16;b++) + { + x=a*12; y=b*10; + for(c=0;c<11;c++) for(d=0;d<9;d++) + { + *(vram+x+c+(y+d)*320)=b+a*16; + } + } + a=getch(); + if(a==13 || a==27) break; + memcpy(vram,pic1,64000); + a=getch(); + if(a==13 || a==27) break; + memcpy(vram,pic2,64000); + a=getch(); + if(a==13 || a==27) break; + } + reg.x.ax=0x3; + int86(0x10,®,®); +} + +unsigned colcnt[256]; + +int analyze(unsigned char *pic,unsigned char *pal) +{ + int a,b,c,x,y; + printf("Generating big palette and calculating relative color importances...\n"); + memset(colcnt,0,256*2); + for(y=0;y<200;y++) for(x=0;x<320;x++) + { + colcnt[pic[x+y*320]]++; + } + for(a=0;a<256;a++) + { + if(colcnt[a]!=0) + { + bigpal[bigpalpnt*3+0]=pal[a*3+0]; + bigpal[bigpalpnt*3+1]=pal[a*3+1]; + bigpal[bigpalpnt*3+2]=pal[a*3+2]; + bigcnt[bigpalpnt++]=colcnt[a]; + } + } +} + + +int createpal(void) +{ + int testval,testcnt; + int colors=256-colsreserved,firstcol=colsreserved; + int xr,xb,xg,xh,xs,xv; + int a,b,c,d,e,f,g,h; + int x,y; + int s; + + rgb2hsv(bigpalhsv,bigpal,bigpalnum); + + for(testcnt=0;testcnt<5;testcnt++) + { + switch(testcnt) + { + case 0 : testval=0; break; + case 1 : testval=1; break; + case 2 : testval=3; break; + case 3 : testval=5; break; + case 4 : testval=8; break; + } + memset(pal+firstcol*3,0,colors*3); + memcpy(bigcntbak,bigcnt,bigpalnum*2); + for(a=0;ac) { c=bigcnt[b]; d=b; } + } + if(c==0) { testcnt=999; break; } + s=d; bigcnt[d]=0; + } + + { + xr=bigpal[s*3+0]; + xg=bigpal[s*3+1]; + xb=bigpal[s*3+2]; + xh=bigpalhsv[s*3+0]; + xs=bigpalhsv[s*3+1]; + xv=bigpalhsv[s*3+2]; + c=999; /* difference */ + for(b=firstcol;btestval) + { + d=a+firstcol; + pal[d*3]=bigpal[s*3]; + pal[d*3+1]=bigpal[s*3+1]; + pal[d*3+2]=bigpal[s*3+2]; + rgb2hsv(palhsv+d*3,pal+d*3,1); + a++; + } + } + memcpy(bigcnt,bigcntbak,bigpalnum*2); + } + rgb2hsv(palhsv,pal,256); +} + +int remap(unsigned char *pic,unsigned char *spal,unsigned char *pal) +{ + int xr,xb,xg,xh,xs,xv; + int a,b,c,d,e,f,g,h; + memset(palmap,0,256); + rgb2hsv(tmphsv,spal,256); + for(a=0;a<256;a++) + { + printf("Processing: %i%% complete \r",100*a/256/2); + xr=spal[a*3+0]; + xg=spal[a*3+1]; + xb=spal[a*3+2]; + xh=tmphsv[a*3+0]; + xs=tmphsv[a*3+1]; + xv=tmphsv[a*3+2]; + h=0; c=999; /* difference */ + for(b=colsreserved;b<256;b++) + { + f=b*3; + /*g=(xh-(unsigned int)palhsv[f+0]); + e=(g<0?-g:g)*2; + g=(xs-(unsigned int)palhsv[f+1]); + e+=(g<0?-g:g); + g=(xv-(unsigned int)palhsv[f+2]); + e+=(g<0?-g:g)*2;*/ + g=((xr-(unsigned int)pal[f+0])); + e=(g<0?-g:g); + g=((xg-(unsigned int)pal[f+1])); + e+=(g<0?-g:g); + g=((xb-(unsigned int)pal[f+2])); + e+=(g<0?-g:g); + if(ev2 && v1>v3) return(v1); + if(v2>v1 && v2>v3) return(v2); + if(v3>v1 && v3>v2) return(v3); + return(v1); +} + +int rgb2hsv(unsigned char *dst,unsigned char *src,int num) +{ + int cr,cg,cb; + int tmp,i; + int xr,xg,xb,zh,zs,zv; + for(i=0;i + cmp bx,1+2 + je zsavemem ;LEFT+RIGHT+MIDDLE pressed, + cmp bx,2 + je zrunmenu ;RIGHT+MIDDLE pressed, + cmp bx,1 + je zscroll ;LEFT+MIDDLE pressed, + jmp nope +zsavelbm: mov cs:whattodo,1 + jmp trytodoit +zsavemem: mov cs:whattodo,2 + jmp trytodoit +zrunmenu: mov cs:whattodo,3 + jmp trytodoit +zscroll: mov cs:whattodo,4 + jmp trytodoit +trytodoit: + mov cs:pleasedoit,1 +nope: pop es + pop ds + pop bp + pop di + pop si + pop dx + pop cx + pop bx + pop ax + or cs:lastbuttonstate,bx + test bx,2 + jne nope20 ;if MIDDLE button pressed, no call mask emulation + mov cs:lastbuttonstate,0 + and ax,cs:callmask + je nope20 + call cs:callpnt +nope20: dec cs:insideint + ret +intti ENDP + +dosomething PROC NEAR + cli + mov ax,0 + mov es,ax + mov ax,es:[INTER3*4] + mov WORD PTR cs:[newint7+0],ax + mov ax,es:[INTER3*4+2] + mov WORD PTR cs:[newint7+2],ax + mov ax,OFFSET intti7 + mov es:[INTER3*4],ax + mov es:[INTER3*4+2],cs + sti + + call getpal + sti + mov al,cs:whattodo + mov cs:whattodo,0 + mov cs:lastbuttonstate,0 + cmp al,1 + jne dos1 + call savelbm + jmp dos0 +dos1: cmp al,2 + jne dos2 + call savemem + jmp dos0 +dos2: cmp al,3 + jne dos3 + call runmenu + jmp dos0 +dos3: cmp al,4 + jne dos4 + call scrollscrn + jmp dos0 +dos4: +dos0: cli + mov ax,0 + mov es,ax + mov ax,word ptr cs:[newint7+0] + mov dx,word ptr cs:[newint7+2] + mov es:[INTER3*4],ax + mov es:[INTER3*4+2],dx + sti + ret +dosomething ENDP + +memname db 'MEMORY.DAT',0 +destpal db 786 dup(0) +handle dw 0 +filename db 'PIC000.LBM',0 + +deflbm1 LABEL BYTE ;main header + db 70,79,82,77, 0,0,0,0 ,73,76,66,77,66,77,72,68 + ; ^filelength-8 + db 0,0,0,20,1,64,0,200,0,0,0,0,8,0,1,0 + db 0,255,1,1,1,64,0,200,67,77,65,80,0,0,3,0 +deflbm2 LABEL BYTE ;BODY header + db 66,79,68,89, 0,0,0,0 + ; ^bodylength + +savelbm PROC NEAR + mov al,1 + call setpal + + ;determine screen statistics + ;get screen width + mov dx,3d4h + mov al,13h + out dx,al + inc dx + in al,dx + dec dx + mov cl,3 + xor ah,ah + shl ax,cl + mov cs:rowlength,ax + ;get split row + mov dx,3d4h + mov al,7 + out dx,al + inc dx + in al,dx + dec dx + mov ah,al + mov al,18h + out dx,al + inc dx + in al,dx + shr ah,1 + shr ah,1 + shr ah,1 + shr ah,1 + and ah,1 + shr ax,1 + mov cs:splitrow,ax + ;get screen start + mov dx,3d4h + mov al,0ch + out dx,al + inc dx + in al,dx + mov ah,al + dec dx + mov al,0dh + out dx,al + inc dx + in al,dx + dec dx + mov cs:screenstart,ax + ;tweaked? + mov cs:tweaked,0 + mov dx,3c4h + mov al,4 + out dx,al + inc dx + in al,dx + test al,8 + jnz notwe + test al,4 + jz notwe + shr cs:rowlength,1 + shr cs:rowlength,1 + mov cs:tweaked,1 + jmp istwe +notwe: shl cs:screenstart,1 + shl cs:screenstart,1 + shl cs:screenstart,1 + shl cs:screenstart,1 +istwe: sti + mov cs:filename[3],'0' + mov cs:filename[4],'0' + mov cs:filename[5],'1' + mov ah,0fh + int 10h + cmp al,19 + je dispok + jmp sdispfail +dispok: mov ax,cs + mov ds,ax +sp2: mov ax,3d01h + mov dx,OFFSET filename + int 21h + jc sp1 ;not exists + mov bx,ax + mov ah,3eh + int 21h + inc cs:filename[5] + cmp cs:filename[5],'9' + jna spn1 + mov cs:filename[5],'0' + inc cs:filename[4] + cmp cs:filename[4],'9' + jna spn1 + mov cs:filename[4],'0' + inc cs:filename[3] +spn1: jmp sp2 +sp1: ;create + mov ax,3c01h + mov cx,0 + mov dx,OFFSET filename + int 21h + jc spfail + ;opened ok + mov cs:handle,ax + + call savelbmdata + + mov bx,cs:handle + mov ah,3eh + int 21h + + mov al,0 + call setpal + ret +spfail: mov al,2 + call errorpal + ret +sdispfail: + mov al,1 + call errorpal + ret +savelbm ENDP + +getpal PROC NEAR + cli + mov ax,cs + mov ds,ax + mov dx,03dah +rws1: in al,dx + test al,8 + jz rws1 +rws2: in al,dx + test al,8 + jnz rws2 + + xor ax,ax + mov dx,3c7h + out dx,al + + mov si,OFFSET destpal + mov cx,768 + mov dx,3c9h +rwag: in al,dx + shl al,1 + shl al,1 + mov ds:[si],al + inc si + loop rwag + sti + ret +getpal ENDP + +waitborder PROC NEAR + mov dx,03dah +rrws1: in al,dx + test al,8 + jz rrws1 +rrws2: in al,dx + test al,8 + jnz rrws2 + ret +waitborder ENDP + +errorpal PROC NEAR + cli + mov cs:apu,al + mov si,ax + and si,127 + shl si,1 + shl si,1 + add si,OFFSET errorcols + call waitborder + mov ax,cs + mov ds,ax + xor al,al + mov dx,3c8h + out dx,al + inc dx + mov cx,256 +epal1: mov al,ds:[si+1] + out dx,al + mov al,ds:[si+2] + out dx,al + mov al,ds:[si+3] + out dx,al + loop epal1 + test cs:apu,128 + jz epal3 + sti + ret +epal3: mov cx,30 +epal2: call waitborder + loop epal2 + mov al,0 + call setpal + sti + ret +errorpal ENDP + +greypal PROC NEAR + push cx + push dx + push ax + xor al,al + mov dx,3c8h + out dx,al + inc dx + pop ax + mov cx,256*3 +gpal1: out dx,al + loop gpal1 + pop dx + pop cx + ret +greypal ENDP + +setpal PROC NEAR + cli + mov cs:apu,al + mov ax,cs + mov ds,ax + call waitborder + + xor ax,ax + mov dx,3c8h + out dx,al + + mov si,OFFSET destpal + mov cx,768 + mov dx,3c9h + mov ah,cs:apu +rrwag: mov al,ds:[si] + shr al,1 + shr al,1 + cmp ah,0 + je rrwag2 + xor al,31 ;to create the flashing +rrwag2: out dx,al + inc si + loop rrwag + sti + ret +setpal ENDP + + ALIGN 2 +prow db 330 dup(0) ;packed row/screen row +row db 8*40 dup(0) ;bitmapped row + +datalen dw 0,0 +hilolen db 0,0,0,0 + +getsirow PROC NEAR + mov bp,cs:screenstart + cmp si,cs:splitrow + jb gsr0 + sub si,cs:splitrow + xor bp,bp +gsr0: ;row si => es:prow (†††) + cmp cs:tweaked,0 + jne gsr1 + mov ax,si + mul cs:rowlength + mov si,ax + add si,bp + mov di,OFFSET prow + mov cx,160 + rep movsw + ret +gsr1: mov di,OFFSET prow + mov ax,si + mul cs:rowlength + mov si,ax + add si,bp + mov dx,3ceh + mov al,4 + out dx,al + inc dx + in al,dx + push ax + mov ax,0004h +gsr3: mov dx,3ceh + out dx,ax + push ax + push di + push si + mov cx,80 +gsr2: mov al,ds:[si] + mov es:[di],al + add di,4 + inc si + loop gsr2 + pop si + pop di + pop ax + inc di + inc ah + cmp ah,4 + jb gsr3 + mov dx,3ceh + mov al,4 + out dx,al + inc dx + pop ax + out dx,al + ret +getsirow ENDP + +savelbmdata PROC NEAR + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET deflbm1 + mov cx,30h + int 21h + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET destpal + mov cx,768 + int 21h + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET deflbm2 + mov cx,8 + int 21h + + mov ax,cs + mov es,ax + mov ax,0a000h + mov ds,ax + mov cx,200 + ;mov si,cs:screenstart + xor si,si + mov cs:datalen,si + mov cs:datalen[2],si +nextrow: push cx + push si + call getsirow + ;bit prow to bits + + push ds + mov ax,cs + mov ds,ax + mov di,OFFSET row+7*40 + mov cx,8 ;8 bits +nr1: push cx + push di + + mov si,OFFSET prow + mov cx,40 +rn2: shl byte ptr ds:[si],1 + rcl ah,1 + shl byte ptr ds:[si+1],1 + rcl ah,1 + shl byte ptr ds:[si+2],1 + rcl ah,1 + shl byte ptr ds:[si+3],1 + rcl ah,1 + shl byte ptr ds:[si+4],1 + rcl ah,1 + shl byte ptr ds:[si+5],1 + rcl ah,1 + shl byte ptr ds:[si+6],1 + rcl ah,1 + shl byte ptr ds:[si+7],1 + rcl ah,1 + add si,8 + mov al,ah + stosb + loop rn2 + + pop di + pop cx + sub di,40 + loop nr1 + + ;pack row[] to prow[] + mov si,OFFSET row + mov di,OFFSET prow + mov cx,8 +pr1: push si + push cx + xor bl,bl + mov dx,si + xor cl,cl ;40 bytes in a row +pr5: mov al,ds:[si] + cmp al,ds:[si+1] + jne pr2 + cmp al,ds:[si+2] + jne pr2 + ;three bytes same, more maybe? + cmp bl,0 + je pr6 + ;some nonsame stuff gathered, sort it out + push si + push cx + mov cl,bl + xor ch,ch + mov al,bl + dec al + stosb + mov si,dx + rep movsb + pop cx + pop si +pr6: xor bl,bl +pr3: dec bl + inc si + inc cl + mov al,ds:[si] + cmp al,ds:[si+1] + jne pr4 + cmp cl,39 + jl pr3 +pr4: mov al,bl + stosb + mov al,ds:[si] + stosb +pr11: inc si + inc cl + xor bl,bl + mov dx,si + cmp cl,38 + jl pr5 + cmp cl,38 + je pr10 + cmp cl,39 + je pr9 + jmp pr8 +pr1x: jmp pr1 +nextrowx: jmp nextrow + +pr2: inc cl + inc bl + inc si + cmp cl,38 + jl pr5 +pr10: inc bl +pr9: inc bl +pr8: push si + push cx + mov cl,bl + xor ch,ch + jcxz pr7 + mov al,bl + dec al + stosb + mov si,dx + rep movsb +pr7: pop cx + pop si + + pop cx + pop si + add si,40 + loop pr1x + + ;save row to file + sub di,OFFSET prow + mov cx,di + add cs:datalen,cx + adc cs:datalen[2],0 + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET prow + int 21h + + pop ds + pop si + pop cx + inc si + loop nextrowx ;<<<<<< + + test cs:datalen,1 + jz sizeok + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET prow + mov cx,1 + add cs:datalen,cx + adc cs:datalen[2],0 + int 21h ;add a byte +sizeok: mov ax,cs + mov ds,ax + ;write datalen + mov bx,ds:handle + mov ax,4200h + mov cx,0 + mov dx,4+768+48 + int 21h + mov ax,ds:datalen[2] + mov ds:hilolen[0],ah + mov ds:hilolen[1],al + mov ax,ds:datalen[0] + mov ds:hilolen[2],ah + mov ds:hilolen[3],al + mov bx,ds:handle + mov ah,40h + mov dx,OFFSET hilolen + mov cx,4 + int 21h + ;write filelen + mov bx,ds:handle + mov ax,4200h + mov cx,0 + mov dx,4 + int 21h + add ds:datalen,768+48 + adc ds:datalen[2],0 + mov ax,ds:datalen[2] + mov ds:hilolen[0],ah + mov ds:hilolen[1],al + mov ax,ds:datalen[0] + mov ds:hilolen[2],ah + mov ds:hilolen[3],al + mov bx,ds:handle + mov ah,40h + mov dx,OFFSET hilolen + mov cx,4 + int 21h + ret +savelbmdata ENDP + +savemem PROC NEAR + mov al,3+128 + call errorpal + mov dx,cs + mov ds,dx + mov dx,OFFSET memname + mov cx,32 + dosint 3ch + jc error + mov cs:[handle],ax + + mov cx,20 + mov bx,0 + +maga: mov ds,bx + mov dx,0 + push cx + push bx + mov cx,32768 + mov bx,cs:[handle] + dosint 40h + cmp ax,32768 + jne error3 + jc error3 + pop bx + pop cx + add bx,2048 + mov al,bh + rol al,1 + rol al,1 + xor al,bh + call greypal + loop maga + + mov bx,cs:[handle] + dosint 3eh + jc error + + jmp iover + +error3: pop bx + pop cx +error: mov al,2 + call errorpal + ret + +iover: mov al,0 + call setpal + ret +savemem ENDP + +;************************************ +;************************************ +; RUNMENU +;************************************ +;************************************ + +codseg dw 0 +exitmenu db 0 +vram dw 0b800h +rows dw 25 dup(0) + +keymode dw 0 +keymodes dw OFFSET keyboard1,OFFSET keyboard2,OFFSET keyboard3,OFFSET keyboard3 + +strmaxlen equ 70 +strpnt dw 0 +string db 80 dup(0) + +memseg dw 0 +mempos dw 0 ;cursors position inside window + +runmenu PROC NEAR + sti + mov ax,cs + mov ds:codseg,ax + mov cs:insidemenu,1 + mov cs:exitmenu,0 + call initmenu + call redraw + jmp rm2 + ;MAIN LOOP +rmaga: mov ax,cs:mousex + mov cs:omousex,ax + mov ax,cs:mousey + mov cs:omousey,ax + mov ax,cs:mouseb + mov cs:omouseb,ax +rm2: call drawmcur ;cursor on + call waitfor + call drawmcur ;cursor off + call checkkeyb + call checkmouse + cmp cs:exitmenu,1 + jne rmaga +rm1: call waitrelease + call resetmenu + mov cs:insidemenu,0 + ret +runmenu ENDP + +waitrelease PROC NEAR +wrm1: cmp cs:mouseb,0 + jne wrm1 ;wait for button release + ret +waitrelease ENDP + +waitfor PROC NEAR + mov ax,cs:vram + mov es,ax + mov bx,cs:mouseb + mov cx,cs:mousex + mov dx,cs:mousey +wm1: inc byte ptr es:[156] ;we're alive + test keymode,2 + jz wm3 + mov ah,1 + int 16h + jnz wm2 +wm3: cmp cs:mousex,cx + jne wm2 + cmp cs:mousey,dx + jne wm2 + cmp cs:mouseb,bx + jne wm2 + jmp wm1 +wm2: inc byte ptr es:[154] ;we're alive 2 + ret +waitfor ENDP + +initmenu PROC NEAR + call storevideo + call initvideo + mov cx,25 + mov bx,0 + mov ax,0 +im1: mov cs:rows[bx],ax + add bx,2 + add ax,160 + loop im1 + ;set mouseparameters + mov ax,7 + mov cx,0 + mov dx,639 + int33 + mov ax,8 + mov cx,0 + mov dx,199 + int33 + mov ax,4 + mov cx,324 + mov dx,104 + int33 + mov cx,320/8 + mov dx,100/8 + mov cs:mousex,cx + mov cs:mousey,dx + mov cs:omousex,cx + mov cs:omousey,dx + mov cs:mouseb,0 + mov cs:omouseb,0 + ret +initmenu ENDP + +resetmenu PROC NEAR + call restorevideo + ;restore mouseparameters + mov ax,7 + mov cx,cs:mxmin + mov dx,cs:mxmax + int33 + mov ax,8 + mov cx,cs:mymin + mov dx,cs:mymax + int33 + ret +resetmenu ENDP + +drawmcur PROC NEAR + mov ax,cs:vram + mov es,ax + mov di,cs:omousey + shl di,1 + mov di,cs:rows[di] + add di,cs:omousex + add di,cs:omousex + xor byte ptr es:[di+1],255 + ret +drawmcur ENDP + +oldvmode db 0 +oldscrn db 4000 dup(0) +oldcurpos dw 0 +oldcurtype dw 0 +oldregs db 256 dup(0) ;stored VGA regs +old3c0 db 16 dup(0) + +storevideo PROC NEAR + mov cx,16 + xor bx,bx +sw3: push bx + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,bl + out dx,al + inc dx + in al,dx + mov cs:old3c0[bx],al + pop bx + inc bx + loop sw3 + mov ah,0fh + int 10h + mov cs:oldvmode,al + mov ah,03h + int 10h + mov cs:oldcurpos,dx + mov cs:oldcurtype,cx + mov ax,cs:vram + mov ds,ax + mov ax,cs + mov es,ax + mov di,OFFSET oldscrn + mov si,0 + cld + mov cx,4000/2 + rep movsw + mov ax,cs + mov es,ax + mov di,OFFSET oldregs + call fromvgaregs + ret +storevideo ENDP + +restorevideo PROC NEAR + mov ax,cs:vram + mov es,ax + mov ax,cs + mov ds,ax + mov si,OFFSET oldscrn + mov di,0 + cld + mov cx,4000/2 + rep movsw + xor ah,ah + mov ah,0 + mov al,cs:oldvmode + or al,128 + int 10h + mov ax,cs + mov ds,ax + mov si,OFFSET oldregs + call tovgaregs + mov ah,1 + mov cx,cs:oldcurtype + int 10h + mov ah,2 + mov dx,cs:oldcurpos + int 10h + mov al,0 + call setpal + mov cx,16 + xor bx,bx +rw3: push bx + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,bl + out dx,al + mov al,cs:old3c0[bx] + out dx,al + pop bx + inc bx + loop rw3 + mov al,32 + out dx,al + ret +restorevideo ENDP + +initvideo PROC NEAR + mov ax,3+128 + int 10h + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,0 + mov cx,16 +iv1: out dx,al + out dx,al + inc al + loop iv1 + mov al,32 + out dx,al + mov dx,3c8h + mov al,0 + out dx,al + inc dx + mov bx,0 + mov cx,16*3 +iv2: mov al,cs:defpal[bx] + inc bx + out dx,al + loop iv2 + + mov ax,cs:vram + mov es,ax + cld + mov di,0 + mov ax,0720h + mov cx,4000/2 + rep stosw + ;no flash + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,10h + out dx,al + mov al,0+0+4+0+0+0+0+0 + out dx,al + mov al,32 + out dx,al + ret +initvideo ENDP + +fromvgaregs PROC NEAR + cld + mov cx,19h + mov ah,0 + mov dx,3d4h +fvr1: mov al,ah + out dx,al + inc dx + in al,dx + stosb + dec dx + inc ah + loop fvr1 + + mov cx,15h + mov ah,0 +fvr2: mov dx,3dah + in al,dx + mov dx,3c0h + mov al,ah + out dx,al + inc dx + in al,dx + dec dx + stosb + inc ah + loop fvr2 + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,32 + out dx,al + + mov cx,9h + mov ah,0 + mov dx,3ceh +fvr3: mov al,ah + out dx,al + inc dx + in al,dx + stosb + dec dx + inc ah + loop fvr3 + + mov cx,4h + mov ah,1 ;0/bit 1=syncr. clear (0=halt) + mov dx,3c4h +fvr4: mov al,ah + out dx,al + inc dx + in al,dx + stosb + dec dx + inc ah + loop fvr4 + + ;Misc output 1: outp:3C2h inp:3CCh + mov dx,3cch + in al,dx + stosb + + ret +fromvgaregs ENDP + +tovgaregs PROC NEAR + cld + mov dx,3c4h + mov ax,1*256+0 + out dx,ax + + mov dx,3d4h + mov al,11h + mov ah,ds:[si+11h] + and ah,127 + out dx,ax + + mov cx,19h + mov ah,0 + mov dx,3d4h +tvr1: mov al,ah + out dx,al + inc dx + lodsb + out dx,al + dec dx + inc ah + loop tvr1 + + mov cx,15h + mov ah,0 +tvr2: mov dx,3dah + in al,dx + mov dx,3c0h + mov al,ah + out dx,al + lodsb + out dx,al + inc ah + loop tvr2 + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,32 + out dx,al + + mov cx,9h + mov ah,0 + mov dx,3ceh +tvr3: mov al,ah + out dx,al + inc dx + lodsb + out dx,al + dec dx + inc ah + loop tvr3 + + mov cx,4h + mov ah,1 ;0/bit 1=syncr. clear (0=halt) + mov dx,3c4h +tvr4: mov al,ah + out dx,al + inc dx + lodsb + out dx,al + dec dx + inc ah + loop tvr4 + + ;Misc output 1: outp:3C2h inp:3CCh + lodsb + mov dx,3c2h + out dx,al + + mov dx,3c4h + mov ax,3*256+0 + out dx,ax + ret +tovgaregs ENDP + +printl PROC NEAR + push ax + push bx + push cx + push ds + push es + push di + push si + push cs + pop ds + mov es,cs:vram + mov di,bx + and di,255 + shl di,1 + mov bl,bh + xor bh,bh + shl bx,1 + add di,cs:rows[bx] + cld + mov ah,al +prl2: lodsb + stosw + loop prl2 +prl1: pop si + pop di + pop es + pop ds + pop cx + pop bx + pop ax + ret +printl ENDP + +print PROC NEAR + push ax + push bx + push ds + push es + push di + push si + push cs + pop ds + mov es,cs:vram + mov di,bx + and di,255 + shl di,1 + mov bl,bh + xor bh,bh + shl bx,1 + add di,cs:rows[bx] + cld + mov ah,al +prn2: lodsb + cmp al,0 + je prn1 + stosw + jmp prn2 +prn1: pop si + pop di + pop es + pop ds + pop bx + pop ax + ret +print ENDP + +print2 PROC NEAR + push ax + push bx + push dx + push ds + push es + push di + push si + push cs + pop ds + mov dx,ax + mov es,cs:vram + mov di,bx + and di,255 + shl di,1 + mov bl,bh + xor bh,bh + shl bx,1 + add di,cs:rows[bx] + cld +prn22: mov ah,dh + lodsb + cmp al,0 + je prn21 + jl prn23 + mov ah,dl +prn23: stosw + jmp prn22 +prn21: pop si + pop di + pop es + pop ds + pop dx + pop bx + pop ax + ret +print2 ENDP + +print3 PROC NEAR + push ax + push bx + push dx + push ds + push es + push di + push si + push cs + pop ds + mov dx,ax + mov es,cs:vram + mov di,bx + and di,255 + shl di,1 + mov bl,bh + xor bh,bh + shl bx,1 + add di,cs:rows[bx] + cld +prnr22: mov ah,dl + lodsb + cmp al,0 + je prnr21 + cmp al,32 + jne prnr23 + mov ah,dh +prnr23: stosw + jmp prnr22 +prnr21: pop si + pop di + pop es + pop ds + pop dx + pop bx + pop ax + ret +print3 ENDP + +printhex16 PROC NEAR + push ax + mov al,ah + call printhex + pop ax + call printhex + ret +printhex16 ENDP + +hextxt db '0123456789ABCDEFabcdef' +hexnum db 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,10,11,12,13,14,15 + +printhex PROC NEAR + push ax + push cx + push dx + push es + mov es,cs:vram + push ax + mov cl,4 + shr al,cl + mov ah,dl + mov bl,al + xor bh,bh + mov al,cs:hextxt[bx] + stosw + pop ax + and al,15 + mov ah,dl + mov bl,al + xor bh,bh + mov al,cs:hextxt[bx] + stosw + pop es + pop dx + pop cx + pop ax + ret +printhex ENDP + +getmousepnt PROC NEAR + ;returns ES:DI to mouse position + mov es,cs:vram + mov di,cs:mousey + shl di,1 + mov di,cs:rows[di] + add di,cs:mousex + add di,cs:mousex + ret +getmousepnt ENDP + + ;0 1 2 3 4 5 6 7 + ;01234567890123456789012345678901234567890123456789012345678901234567890123456789 +titlebar db " Future-Multi-Grabber-Menu V1.0 Copyright (C) 1991 ÀÅÙ/FC I'm alive: ",0 +hexdump1 LABEL BYTE + db "ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß",0 +hexdump2 LABEL BYTE + db " Ú",24,24,"¿ " + db " ÀÄÄÙ " + db " ÚGO¿ " + db " ÀTOÙ " + db " ÚFI¿ " + db " ÀNDÙ " + db " ÚÄÄ¿ " + db " À",25,25,"Ù " + db 0 +keyboard0 LABEL BYTE + db "ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ",0 +editstr LABEL BYTE + db " String: ",0 +keyboard1 LABEL BYTE + db " ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ " + db " ³ 7 ³ 8 ³ 9 ³ 0 ³³ Q ³ W ³ E ³ R ³ T ³ Y ³ U ³ I ³ O ³ P ³ ³*1 Exit FMGM ³ " + db " ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ÀÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÂÄÁÄ¿ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ " + db " ³ 4 ³ 5 ³ 6 ³ + cmp bx,1+2 + je zsavemem ;LEFT+RIGHT+MIDDLE pressed, + cmp bx,2 + je zrunmenu ;RIGHT+MIDDLE pressed, + cmp bx,1 + je zscroll ;LEFT+MIDDLE pressed, + jmp nope +zsavelbm: mov cs:whattodo,1 + jmp trytodoit +zsavemem: mov cs:whattodo,2 + jmp trytodoit +zrunmenu: mov cs:whattodo,3 + jmp trytodoit +zscroll: mov cs:whattodo,4 + jmp trytodoit +trytodoit: + mov cs:pleasedoit,1 +nope: pop es + pop ds + pop bp + pop di + pop si + pop dx + pop cx + pop bx + pop ax + or cs:lastbuttonstate,bx + test bx,4 + jne nope20 ;if MIDDLE button pressed, no call mask emulation + mov cs:lastbuttonstate,0 + and ax,cs:callmask + je nope20 + call cs:callpnt +nope20: dec cs:insideint + ret +intti ENDP + +dosomething PROC NEAR + cli + mov ax,0 + mov es,ax + mov ax,es:[INTER3*4] + mov WORD PTR cs:[newint7+0],ax + mov ax,es:[INTER3*4+2] + mov WORD PTR cs:[newint7+2],ax + mov ax,OFFSET intti7 + mov es:[INTER3*4],ax + mov es:[INTER3*4+2],cs + sti + + call getpal + sti + mov al,cs:whattodo + mov cs:whattodo,0 + mov cs:lastbuttonstate,0 + cmp al,1 + jne dos1 + call savelbm + jmp dos0 +dos1: cmp al,2 + jne dos2 + call savemem + jmp dos0 +dos2: cmp al,3 + jne dos3 + call runmenu + jmp dos0 +dos3: cmp al,4 + jne dos4 + call scrollscrn + jmp dos0 +dos4: +dos0: cli + mov ax,0 + mov es,ax + mov ax,word ptr cs:[newint7+0] + mov dx,word ptr cs:[newint7+2] + mov es:[INTER3*4],ax + mov es:[INTER3*4+2],dx + sti + ret +dosomething ENDP + +memname db 'MEMORY.DAT',0 +destpal db 786 dup(0) +handle dw 0 +filename db 'PIC000.LBM',0 +mode400 db 0 + +deflbm1 LABEL BYTE ;main header + db 70,79,82,77, 0,0,0,0 ,73,76,66,77,66,77,72,68 + ; ^filelength-8 + db 0,0,0,20,1,64,0,200,0,0,0,0,8,0,1,0 + db 0,255,1,1,1,64,0,200,67,77,65,80,0,0,3,0 +deflbm4 LABEL BYTE ;main header for 320x400 + db 70,79,82,77, 0,0,0,0 ,73,76,66,77,66,77,72,68 + ; ^filelength-8 + db 0,0,0,20,1,64,1,144,0,0,0,0,8,0,1,0 + db 0,255,1,1,1,64,0,200,67,77,65,80,0,0,3,0 +deflbm2 LABEL BYTE ;BODY header + db 66,79,68,89, 0,0,0,0 + ; ^bodylength + +savelbm PROC NEAR + mov al,1 + call setpal + + ;determine screen statistics + ;get screen width + mov dx,3d4h + mov al,13h + out dx,al + inc dx + in al,dx + dec dx + mov cl,3 + xor ah,ah + shl ax,cl + mov cs:rowlength,ax + ;400 mode? + int 3 + mov dx,3d4h + mov al,9 + out dx,al + inc dx + in al,dx + mov ah,al + and ah,31 + mov cs:mode400,0 + cmp ah,0 + jne @@m7 + test al,80h + jnz @@m7 + mov cs:mode400,1 +@@m7: ;get split row + mov dx,3d4h + mov al,9 + out dx,al + inc dx + in al,dx + dec dx + mov bl,al + mov al,7 + out dx,al + inc dx + in al,dx + dec dx + mov ah,al + mov al,18h + out dx,al + inc dx + in al,dx + shr bl,1 + shr bl,1 + shr bl,1 + shr bl,1 + shr bl,1 + and bl,2 + shr ah,1 + shr ah,1 + shr ah,1 + shr ah,1 + and ah,1 + or ah,bl + cmp cs:mode400,0 + jnz @@umj + shr ax,1 +@@umj: mov cs:splitrow,ax + ;get screen start + mov dx,3d4h + mov al,0ch + out dx,al + inc dx + in al,dx + mov ah,al + dec dx + mov al,0dh + out dx,al + inc dx + in al,dx + dec dx + mov cs:screenstart,ax + ;tweaked? + mov cs:tweaked,0 + mov dx,3c4h + mov al,4 + out dx,al + inc dx + in al,dx + test al,8 + jnz notwe + test al,4 + jz notwe + shr cs:rowlength,1 + shr cs:rowlength,1 + mov cs:tweaked,1 + jmp istwe +notwe: shl cs:screenstart,1 + shl cs:screenstart,1 + shl cs:screenstart,1 + shl cs:screenstart,1 +istwe: sti + mov cs:filename[3],'0' + mov cs:filename[4],'0' + mov cs:filename[5],'1' + cmp cs:forcegrab,0 + jnz dispok + mov ah,0fh + int 10h + cmp al,19 + je dispok + jmp sdispfail +dispok: mov ax,cs + mov ds,ax +sp2: mov ax,3d01h + mov dx,OFFSET filename + int 21h + jc sp1 ;not exists + mov bx,ax + mov ah,3eh + int 21h + inc cs:filename[5] + cmp cs:filename[5],'9' + jna spn1 + mov cs:filename[5],'0' + inc cs:filename[4] + cmp cs:filename[4],'9' + jna spn1 + mov cs:filename[4],'0' + inc cs:filename[3] +spn1: jmp sp2 +sp1: ;create + mov ax,3c01h + mov cx,0 + mov dx,OFFSET filename + int 21h + jc spfail + ;opened ok + mov cs:handle,ax + + cmp cs:mode400,0 + jnz @@m5 + call savelbmdata + jmp @@m6 +@@m5: call savelbmdata4 +@@m6: + mov bx,cs:handle + mov ah,3eh + int 21h + + mov al,0 + call setpal + ret +spfail: mov al,2 + call errorpal + ret +sdispfail: + mov al,1 + call errorpal + ret +savelbm ENDP + +getpal PROC NEAR + cli + mov ax,cs + mov ds,ax + mov dx,03dah +rws1: in al,dx + test al,8 + jz rws1 +rws2: in al,dx + test al,8 + jnz rws2 + + xor ax,ax + mov dx,3c7h + out dx,al + + mov si,OFFSET destpal + mov cx,768 + mov dx,3c9h +rwag: in al,dx + shl al,1 + shl al,1 + mov ds:[si],al + inc si + loop rwag + sti + ret +getpal ENDP + +waitborder PROC NEAR + mov dx,03dah +rrws1: in al,dx + test al,8 + jz rrws1 +rrws2: in al,dx + test al,8 + jnz rrws2 + ret +waitborder ENDP + +errorpal PROC NEAR + cli + mov cs:apu,al + mov si,ax + and si,127 + shl si,1 + shl si,1 + add si,OFFSET errorcols + call waitborder + mov ax,cs + mov ds,ax + xor al,al + mov dx,3c8h + out dx,al + inc dx + mov cx,256 +epal1: mov al,ds:[si+1] + out dx,al + mov al,ds:[si+2] + out dx,al + mov al,ds:[si+3] + out dx,al + loop epal1 + test cs:apu,128 + jz epal3 + sti + ret +epal3: mov cx,30 +epal2: call waitborder + loop epal2 + mov al,0 + call setpal + sti + ret +errorpal ENDP + +greypal PROC NEAR + push cx + push dx + push ax + xor al,al + mov dx,3c8h + out dx,al + inc dx + pop ax + mov cx,256*3 +gpal1: out dx,al + loop gpal1 + pop dx + pop cx + ret +greypal ENDP + +setpal PROC NEAR + cli + mov cs:apu,al + mov ax,cs + mov ds,ax + call waitborder + + xor ax,ax + mov dx,3c8h + out dx,al + + mov si,OFFSET destpal + mov cx,768 + mov dx,3c9h + mov ah,cs:apu +rrwag: mov al,ds:[si] + shr al,1 + shr al,1 + cmp ah,0 + je rrwag2 + xor al,31 ;to create the flashing +rrwag2: out dx,al + inc si + loop rrwag + sti + ret +setpal ENDP + + ALIGN 2 +prow db 330 dup(0) ;packed row/screen row +row db 8*40 dup(0) ;bitmapped row + +datalen dw 0,0 +hilolen db 0,0,0,0 + +getsirow PROC NEAR + mov bp,cs:screenstart + cmp si,cs:splitrow + jb gsr0 + sub si,cs:splitrow + xor bp,bp +gsr0: ;row si => es:prow (†††) + cmp cs:forcegrab,2 + je esr2 + cmp cs:tweaked,0 + jz gsr1x + jmp gsr1 +gsr1x: mov ax,si + mul cs:rowlength + mov si,ax + add si,bp + mov di,OFFSET prow + mov cx,160 + rep movsw + ret +esr2: ;EGA + mov di,OFFSET prow + mov cx,160 + xor ax,ax + rep stosw + mov di,OFFSET prow + mov ax,si + mul cs:rowlength + mov si,ax + add si,bp + mov dx,3ceh + mov al,4 + out dx,al + inc dx + in al,dx + push ax + mov ax,0004h +@@3: mov dx,3ceh + out dx,ax + push ax + push di + push si + mov cl,ah + mov ah,1 + shl ah,cl + mov cx,40 +@@2: mov al,ds:[si] + test al,128 + jz @@b0 + or es:[di],ah +@@b0: test al,64 + jz @@b1 + or es:[di+1],ah +@@b1: test al,32 + jz @@b2 + or es:[di+2],ah +@@b2: test al,16 + jz @@b3 + or es:[di+3],ah +@@b3: test al,8 + jz @@b4 + or es:[di+4],ah +@@b4: test al,4 + jz @@b5 + or es:[di+5],ah +@@b5: test al,2 + jz @@b6 + or es:[di+6],ah +@@b6: test al,1 + jz @@b7 + or es:[di+7],ah +@@b7: add di,8 + inc si + loop @@2 + pop si + pop di + pop ax + inc ah + cmp ah,4 + jb @@3 + mov dx,3ceh + mov al,4 + out dx,al + inc dx + pop ax + out dx,al + ret +gsr1: ;TWEAK + mov di,OFFSET prow + mov ax,si + mul cs:rowlength + mov si,ax + add si,bp + mov dx,3ceh + mov al,4 + out dx,al + inc dx + in al,dx + push ax + mov ax,0004h +gsr3: mov dx,3ceh + out dx,ax + push ax + push di + push si + mov cx,80 +gsr2: mov al,ds:[si] + mov es:[di],al + add di,4 + inc si + loop gsr2 + pop si + pop di + pop ax + inc di + inc ah + cmp ah,4 + jb gsr3 + mov dx,3ceh + mov al,4 + out dx,al + inc dx + pop ax + out dx,al + ret +getsirow ENDP + +savelbmdata PROC NEAR + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET deflbm1 + mov cx,30h + int 21h + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET destpal + mov cx,768 + int 21h + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET deflbm2 + mov cx,8 + int 21h + + mov ax,cs + mov es,ax + mov ax,0a000h + mov ds,ax + mov cx,200 + ;mov si,cs:screenstart + xor si,si + mov cs:datalen,si + mov cs:datalen[2],si +nextrow: push cx + push si + call getsirow + ;bit prow to bits + + push ds + mov ax,cs + mov ds,ax + mov di,OFFSET row+7*40 + mov cx,8 ;8 bits +nr1: push cx + push di + + mov si,OFFSET prow + mov cx,40 +rn2: shl byte ptr ds:[si],1 + rcl ah,1 + shl byte ptr ds:[si+1],1 + rcl ah,1 + shl byte ptr ds:[si+2],1 + rcl ah,1 + shl byte ptr ds:[si+3],1 + rcl ah,1 + shl byte ptr ds:[si+4],1 + rcl ah,1 + shl byte ptr ds:[si+5],1 + rcl ah,1 + shl byte ptr ds:[si+6],1 + rcl ah,1 + shl byte ptr ds:[si+7],1 + rcl ah,1 + add si,8 + mov al,ah + stosb + loop rn2 + + pop di + pop cx + sub di,40 + loop nr1 + + ;pack row[] to prow[] + mov si,OFFSET row + mov di,OFFSET prow + mov cx,8 +pr1: push si + push cx + xor bl,bl + mov dx,si + xor cl,cl ;40 bytes in a row +pr5: mov al,ds:[si] + cmp al,ds:[si+1] + jne pr2 + cmp al,ds:[si+2] + jne pr2 + ;three bytes same, more maybe? + cmp bl,0 + je pr6 + ;some nonsame stuff gathered, sort it out + push si + push cx + mov cl,bl + xor ch,ch + mov al,bl + dec al + stosb + mov si,dx + rep movsb + pop cx + pop si +pr6: xor bl,bl +pr3: dec bl + inc si + inc cl + mov al,ds:[si] + cmp al,ds:[si+1] + jne pr4 + cmp cl,39 + jl pr3 +pr4: mov al,bl + stosb + mov al,ds:[si] + stosb +pr11: inc si + inc cl + xor bl,bl + mov dx,si + cmp cl,38 + jl pr5 + cmp cl,38 + je pr10 + cmp cl,39 + je pr9 + jmp pr8 +pr1x: jmp pr1 +nextrowx: jmp nextrow + +pr2: inc cl + inc bl + inc si + cmp cl,38 + jl pr5 +pr10: inc bl +pr9: inc bl +pr8: push si + push cx + mov cl,bl + xor ch,ch + jcxz pr7 + mov al,bl + dec al + stosb + mov si,dx + rep movsb +pr7: pop cx + pop si + + pop cx + pop si + add si,40 + loop pr1x + + ;save row to file + sub di,OFFSET prow + mov cx,di + add cs:datalen,cx + adc cs:datalen[2],0 + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET prow + int 21h + + pop ds + pop si + pop cx + inc si + loop nextrowx ;<<<<<< + + test cs:datalen,1 + jz sizeok + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET prow + mov cx,1 + add cs:datalen,cx + adc cs:datalen[2],0 + int 21h ;add a byte +sizeok: mov ax,cs + mov ds,ax + ;write datalen + mov bx,ds:handle + mov ax,4200h + mov cx,0 + mov dx,4+768+48 + int 21h + mov ax,ds:datalen[2] + mov ds:hilolen[0],ah + mov ds:hilolen[1],al + mov ax,ds:datalen[0] + mov ds:hilolen[2],ah + mov ds:hilolen[3],al + mov bx,ds:handle + mov ah,40h + mov dx,OFFSET hilolen + mov cx,4 + int 21h + ;write filelen + mov bx,ds:handle + mov ax,4200h + mov cx,0 + mov dx,4 + int 21h + add ds:datalen,768+48 + adc ds:datalen[2],0 + mov ax,ds:datalen[2] + mov ds:hilolen[0],ah + mov ds:hilolen[1],al + mov ax,ds:datalen[0] + mov ds:hilolen[2],ah + mov ds:hilolen[3],al + mov bx,ds:handle + mov ah,40h + mov dx,OFFSET hilolen + mov cx,4 + int 21h + ret +savelbmdata ENDP + +savelbmdata4 PROC NEAR + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET deflbm4 + mov cx,30h + int 21h + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET destpal + mov cx,768 + int 21h + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET deflbm2 + mov cx,8 + int 21h + + mov ax,cs + mov es,ax + mov ax,0a000h + mov ds,ax + mov cx,400 + ;mov si,cs:screenstart + xor si,si + mov cs:datalen,si + mov cs:datalen[2],si +nextrow4: push cx + push si + call getsirow + ;bit p4row to bits + + push ds + mov ax,cs + mov ds,ax + mov di,OFFSET row+7*40 + mov cx,8 ;8 bits +n4r1: push cx + push di + + mov si,OFFSET prow + mov cx,40 +r4n2: shl byte ptr ds:[si],1 + rcl ah,1 + shl byte ptr ds:[si+1],1 + rcl ah,1 + shl byte ptr ds:[si+2],1 + rcl ah,1 + shl byte ptr ds:[si+3],1 + rcl ah,1 + shl byte ptr ds:[si+4],1 + rcl ah,1 + shl byte ptr ds:[si+5],1 + rcl ah,1 + shl byte ptr ds:[si+6],1 + rcl ah,1 + shl byte ptr ds:[si+7],1 + rcl ah,1 + add si,8 + mov al,ah + stosb + loop r4n2 + + pop di + pop cx + sub di,40 + loop n4r1 + + ;pack row[] to prow[] + mov si,OFFSET row + mov di,OFFSET prow + mov cx,8 +p4r1: push si + push cx + xor bl,bl + mov dx,si + xor cl,cl ;40 bytes in a row +p4r5: mov al,ds:[si] + cmp al,ds:[si+1] + jne p4r2 + cmp al,ds:[si+2] + jne p4r2 + ;three bytes same, more maybe? + cmp bl,0 + je p4r6 + ;some nonsame stuff gathered, sort it out + push si + push cx + mov cl,bl + xor ch,ch + mov al,bl + dec al + stosb + mov si,dx + rep movsb + pop cx + pop si +p4r6: xor bl,bl +p4r3: dec bl + inc si + inc cl + mov al,ds:[si] + cmp al,ds:[si+1] + jne p4r4 + cmp cl,39 + jl p4r3 +p4r4: mov al,bl + stosb + mov al,ds:[si] + stosb +p4r11: inc si + inc cl + xor bl,bl + mov dx,si + cmp cl,38 + jl p4r5 + cmp cl,38 + je p4r10 + cmp cl,39 + je p4r9 + jmp p4r8 +p4r1x: jmp p4r1 +nextrow4x: jmp nextrow4 + +p4r2: inc cl + inc bl + inc si + cmp cl,38 + jl p4r5 +p4r10: inc bl +p4r9: inc bl +p4r8: push si + push cx + mov cl,bl + xor ch,ch + jcxz p4r7 + mov al,bl + dec al + stosb + mov si,dx + rep movsb +p4r7: pop cx + pop si + + pop cx + pop si + add si,40 + loop p4r1x + + ;save row to file + sub di,OFFSET prow + mov cx,di + add cs:datalen,cx + adc cs:datalen[2],0 + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET prow + int 21h + + pop ds + pop si + pop cx + inc si + loop nextrow4x ;<<<<<< + + test cs:datalen,1 + jz sizeok4 + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET prow + mov cx,1 + add cs:datalen,cx + adc cs:datalen[2],0 + int 21h ;add a byte +sizeok4: mov ax,cs + mov ds,ax + ;write datalen + mov bx,ds:handle + mov ax,4200h + mov cx,0 + mov dx,4+768+48 + int 21h + mov ax,ds:datalen[2] + mov ds:hilolen[0],ah + mov ds:hilolen[1],al + mov ax,ds:datalen[0] + mov ds:hilolen[2],ah + mov ds:hilolen[3],al + mov bx,ds:handle + mov ah,40h + mov dx,OFFSET hilolen + mov cx,4 + int 21h + ;write filelen + mov bx,ds:handle + mov ax,4200h + mov cx,0 + mov dx,4 + int 21h + add ds:datalen,768+48 + adc ds:datalen[2],0 + mov ax,ds:datalen[2] + mov ds:hilolen[0],ah + mov ds:hilolen[1],al + mov ax,ds:datalen[0] + mov ds:hilolen[2],ah + mov ds:hilolen[3],al + mov bx,ds:handle + mov ah,40h + mov dx,OFFSET hilolen + mov cx,4 + int 21h + ret +savelbmdata4 ENDP + +savemem PROC NEAR + mov al,3+128 + call errorpal + mov dx,cs + mov ds,dx + mov dx,OFFSET memname + mov cx,32 + dosint 3ch + jc error + mov cs:[handle],ax + + mov cx,20 + mov bx,0 + +maga: mov ds,bx + mov dx,0 + push cx + push bx + mov cx,32768 + mov bx,cs:[handle] + dosint 40h + cmp ax,32768 + jne error3 + jc error3 + pop bx + pop cx + add bx,2048 + mov al,bh + rol al,1 + rol al,1 + xor al,bh + call greypal + loop maga + + mov bx,cs:[handle] + dosint 3eh + jc error + + jmp iover + +error3: pop bx + pop cx +error: mov al,2 + call errorpal + ret + +iover: mov al,0 + call setpal + ret +savemem ENDP + +;************************************ +;************************************ +; RUNMENU +;************************************ +;************************************ + +codseg dw 0 +exitmenu db 0 +vram dw 0b800h +rows dw 25 dup(0) + +keymode dw 0 +keymodes dw OFFSET keyboard1,OFFSET keyboard2,OFFSET keyboard3,OFFSET keyboard3 + +strmaxlen equ 70 +strpnt dw 0 +string db 80 dup(0) + +memseg dw 0 +mempos dw 0 ;cursors position inside window + +runmenu PROC NEAR + sti + mov ax,cs + mov ds:codseg,ax + mov cs:insidemenu,1 + mov cs:exitmenu,0 + call initmenu + call redraw + jmp rm2 + ;MAIN LOOP +rmaga: mov ax,cs:mousex + mov cs:omousex,ax + mov ax,cs:mousey + mov cs:omousey,ax + mov ax,cs:mouseb + mov cs:omouseb,ax +rm2: call drawmcur ;cursor on + call waitfor + call drawmcur ;cursor off + call checkkeyb + call checkmouse + cmp cs:exitmenu,1 + jne rmaga +rm1: call waitrelease + call resetmenu + mov cs:insidemenu,0 + ret +runmenu ENDP + +waitrelease PROC NEAR +wrm1: cmp cs:mouseb,0 + jne wrm1 ;wait for button release + ret +waitrelease ENDP + +waitfor PROC NEAR + mov ax,cs:vram + mov es,ax + mov bx,cs:mouseb + mov cx,cs:mousex + mov dx,cs:mousey +wm1: inc byte ptr es:[156] ;we're alive + test keymode,2 + jz wm3 + mov ah,1 + int 16h + jnz wm2 +wm3: cmp cs:mousex,cx + jne wm2 + cmp cs:mousey,dx + jne wm2 + cmp cs:mouseb,bx + jne wm2 + jmp wm1 +wm2: inc byte ptr es:[154] ;we're alive 2 + ret +waitfor ENDP + +initmenu PROC NEAR + call storevideo + call initvideo + mov cx,25 + mov bx,0 + mov ax,0 +im1: mov cs:rows[bx],ax + add bx,2 + add ax,160 + loop im1 + ;set mouseparameters + mov ax,7 + mov cx,0 + mov dx,639 + int33 + mov ax,8 + mov cx,0 + mov dx,199 + int33 + mov ax,4 + mov cx,324 + mov dx,104 + int33 + mov cx,320/8 + mov dx,100/8 + mov cs:mousex,cx + mov cs:mousey,dx + mov cs:omousex,cx + mov cs:omousey,dx + mov cs:mouseb,0 + mov cs:omouseb,0 + ret +initmenu ENDP + +resetmenu PROC NEAR + call restorevideo + ;restore mouseparameters + mov ax,7 + mov cx,cs:mxmin + mov dx,cs:mxmax + int33 + mov ax,8 + mov cx,cs:mymin + mov dx,cs:mymax + int33 + ret +resetmenu ENDP + +drawmcur PROC NEAR + mov ax,cs:vram + mov es,ax + mov di,cs:omousey + shl di,1 + mov di,cs:rows[di] + add di,cs:omousex + add di,cs:omousex + xor byte ptr es:[di+1],255 + ret +drawmcur ENDP + +oldvmode db 0 +oldscrn db 4000 dup(0) +oldcurpos dw 0 +oldcurtype dw 0 +oldregs db 256 dup(0) ;stored VGA regs +old3c0 db 16 dup(0) + +storevideo PROC NEAR + mov cx,16 + xor bx,bx +sw3: push bx + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,bl + out dx,al + inc dx + in al,dx + mov cs:old3c0[bx],al + pop bx + inc bx + loop sw3 + mov ah,0fh + int 10h + mov cs:oldvmode,al + mov ah,03h + int 10h + mov cs:oldcurpos,dx + mov cs:oldcurtype,cx + mov ax,cs:vram + mov ds,ax + mov ax,cs + mov es,ax + mov di,OFFSET oldscrn + mov si,0 + cld + mov cx,4000/2 + rep movsw + mov ax,cs + mov es,ax + mov di,OFFSET oldregs + call fromvgaregs + ret +storevideo ENDP + +restorevideo PROC NEAR + mov ax,cs:vram + mov es,ax + mov ax,cs + mov ds,ax + mov si,OFFSET oldscrn + mov di,0 + cld + mov cx,4000/2 + rep movsw + xor ah,ah + mov ah,0 + mov al,cs:oldvmode + or al,128 + int 10h + mov ax,cs + mov ds,ax + mov si,OFFSET oldregs + call tovgaregs + mov ah,1 + mov cx,cs:oldcurtype + int 10h + mov ah,2 + mov dx,cs:oldcurpos + int 10h + mov al,0 + call setpal + mov cx,16 + xor bx,bx +rw3: push bx + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,bl + out dx,al + mov al,cs:old3c0[bx] + out dx,al + pop bx + inc bx + loop rw3 + mov al,32 + out dx,al + ret +restorevideo ENDP + +initvideo PROC NEAR + mov ax,3+128 + int 10h + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,0 + mov cx,16 +iv1: out dx,al + out dx,al + inc al + loop iv1 + mov al,32 + out dx,al + mov dx,3c8h + mov al,0 + out dx,al + inc dx + mov bx,0 + mov cx,16*3 +iv2: mov al,cs:defpal[bx] + inc bx + out dx,al + loop iv2 + + mov ax,cs:vram + mov es,ax + cld + mov di,0 + mov ax,0720h + mov cx,4000/2 + rep stosw + ;no flash + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,10h + out dx,al + mov al,0+0+4+0+0+0+0+0 + out dx,al + mov al,32 + out dx,al + ret +initvideo ENDP + +fromvgaregs PROC NEAR + cld + mov cx,19h + mov ah,0 + mov dx,3d4h +fvr1: mov al,ah + out dx,al + inc dx + in al,dx + stosb + dec dx + inc ah + loop fvr1 + + mov cx,15h + mov ah,0 +fvr2: mov dx,3dah + in al,dx + mov dx,3c0h + mov al,ah + out dx,al + inc dx + in al,dx + dec dx + stosb + inc ah + loop fvr2 + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,32 + out dx,al + + mov cx,9h + mov ah,0 + mov dx,3ceh +fvr3: mov al,ah + out dx,al + inc dx + in al,dx + stosb + dec dx + inc ah + loop fvr3 + + mov cx,4h + mov ah,1 ;0/bit 1=syncr. clear (0=halt) + mov dx,3c4h +fvr4: mov al,ah + out dx,al + inc dx + in al,dx + stosb + dec dx + inc ah + loop fvr4 + + ;Misc output 1: outp:3C2h inp:3CCh + mov dx,3cch + in al,dx + stosb + + ret +fromvgaregs ENDP + +tovgaregs PROC NEAR + cld + mov dx,3c4h + mov ax,1*256+0 + out dx,ax + + mov dx,3d4h + mov al,11h + mov ah,ds:[si+11h] + and ah,127 + out dx,ax + + mov cx,19h + mov ah,0 + mov dx,3d4h +tvr1: mov al,ah + out dx,al + inc dx + lodsb + out dx,al + dec dx + inc ah + loop tvr1 + + mov cx,15h + mov ah,0 +tvr2: mov dx,3dah + in al,dx + mov dx,3c0h + mov al,ah + out dx,al + lodsb + out dx,al + inc ah + loop tvr2 + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,32 + out dx,al + + mov cx,9h + mov ah,0 + mov dx,3ceh +tvr3: mov al,ah + out dx,al + inc dx + lodsb + out dx,al + dec dx + inc ah + loop tvr3 + + mov cx,4h + mov ah,1 ;0/bit 1=syncr. clear (0=halt) + mov dx,3c4h +tvr4: mov al,ah + out dx,al + inc dx + lodsb + out dx,al + dec dx + inc ah + loop tvr4 + + ;Misc output 1: outp:3C2h inp:3CCh + lodsb + mov dx,3c2h + out dx,al + + mov dx,3c4h + mov ax,3*256+0 + out dx,ax + ret +tovgaregs ENDP + +printl PROC NEAR + push ax + push bx + push cx + push ds + push es + push di + push si + push cs + pop ds + mov es,cs:vram + mov di,bx + and di,255 + shl di,1 + mov bl,bh + xor bh,bh + shl bx,1 + add di,cs:rows[bx] + cld + mov ah,al +prl2: lodsb + stosw + loop prl2 +prl1: pop si + pop di + pop es + pop ds + pop cx + pop bx + pop ax + ret +printl ENDP + +print PROC NEAR + push ax + push bx + push ds + push es + push di + push si + push cs + pop ds + mov es,cs:vram + mov di,bx + and di,255 + shl di,1 + mov bl,bh + xor bh,bh + shl bx,1 + add di,cs:rows[bx] + cld + mov ah,al +prn2: lodsb + cmp al,0 + je prn1 + stosw + jmp prn2 +prn1: pop si + pop di + pop es + pop ds + pop bx + pop ax + ret +print ENDP + +print2 PROC NEAR + push ax + push bx + push dx + push ds + push es + push di + push si + push cs + pop ds + mov dx,ax + mov es,cs:vram + mov di,bx + and di,255 + shl di,1 + mov bl,bh + xor bh,bh + shl bx,1 + add di,cs:rows[bx] + cld +prn22: mov ah,dh + lodsb + cmp al,0 + je prn21 + jl prn23 + mov ah,dl +prn23: stosw + jmp prn22 +prn21: pop si + pop di + pop es + pop ds + pop dx + pop bx + pop ax + ret +print2 ENDP + +print3 PROC NEAR + push ax + push bx + push dx + push ds + push es + push di + push si + push cs + pop ds + mov dx,ax + mov es,cs:vram + mov di,bx + and di,255 + shl di,1 + mov bl,bh + xor bh,bh + shl bx,1 + add di,cs:rows[bx] + cld +prnr22: mov ah,dl + lodsb + cmp al,0 + je prnr21 + cmp al,32 + jne prnr23 + mov ah,dh +prnr23: stosw + jmp prnr22 +prnr21: pop si + pop di + pop es + pop ds + pop dx + pop bx + pop ax + ret +print3 ENDP + +printhex16 PROC NEAR + push ax + mov al,ah + call printhex + pop ax + call printhex + ret +printhex16 ENDP + +hextxt db '0123456789ABCDEFabcdef' +hexnum db 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,10,11,12,13,14,15 + +printhex PROC NEAR + push ax + push cx + push dx + push es + mov es,cs:vram + push ax + mov cl,4 + shr al,cl + mov ah,dl + mov bl,al + xor bh,bh + mov al,cs:hextxt[bx] + stosw + pop ax + and al,15 + mov ah,dl + mov bl,al + xor bh,bh + mov al,cs:hextxt[bx] + stosw + pop es + pop dx + pop cx + pop ax + ret +printhex ENDP + +getmousepnt PROC NEAR + ;returns ES:DI to mouse position + mov es,cs:vram + mov di,cs:mousey + shl di,1 + mov di,cs:rows[di] + add di,cs:mousex + add di,cs:mousex + ret +getmousepnt ENDP + + ;0 1 2 3 4 5 6 7 + ;01234567890123456789012345678901234567890123456789012345678901234567890123456789 +titlebar db " Future-Multi-Grabber-Menu V1.0 Copyright (C) 1991 ÀÅÙ/FC I'm alive: ",0 +hexdump1 LABEL BYTE + db "ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß",0 +hexdump2 LABEL BYTE + db " Ú",24,24,"¿ " + db " ÀÄÄÙ " + db " ÚGO¿ " + db " ÀTOÙ " + db " ÚFI¿ " + db " ÀNDÙ " + db " ÚÄÄ¿ " + db " À",25,25,"Ù " + db 0 +keyboard0 LABEL BYTE + db "ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ",0 +editstr LABEL BYTE + db " String: ",0 +keyboard1 LABEL BYTE + db " ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ " + db " ³ 7 ³ 8 ³ 9 ³ 0 ³³ Q ³ W ³ E ³ R ³ T ³ Y ³ U ³ I ³ O ³ P ³ ³*1 Exit FMGM ³ " + db " ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ÀÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÂÄÁÄ¿ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ " + db " ³ 4 ³ 5 ³ 6 ³ + cmp bx,1+2 + je zsavemem ;LEFT+RIGHT+MIDDLE pressed, + cmp bx,2 + je zrunmenu ;RIGHT+MIDDLE pressed, + cmp bx,1 + je zscroll ;LEFT+MIDDLE pressed, + jmp nope +zsavelbm: mov cs:whattodo,1 + jmp trytodoit +zsavemem: mov cs:whattodo,1 + jmp trytodoit +zrunmenu: mov cs:whattodo,1 + jmp trytodoit +zscroll: mov cs:whattodo,1 + jmp trytodoit +trytodoit: + mov cs:pleasedoit,1 +nope: pop es + pop ds + pop bp + pop di + pop si + pop dx + pop cx + pop bx + pop ax + or cs:lastbuttonstate,bx + test bx,2 + jne nope20 ;if MIDDLE button pressed, no call mask emulation + mov cs:lastbuttonstate,0 + and ax,cs:callmask + je nope20 + call cs:callpnt +nope20: dec cs:insideint + ret +intti ENDP + +dosomething PROC NEAR + cli + mov ax,0 + mov es,ax + mov ax,es:[INTER3*4] + mov WORD PTR cs:[newint7+0],ax + mov ax,es:[INTER3*4+2] + mov WORD PTR cs:[newint7+2],ax + mov ax,OFFSET intti7 + mov es:[INTER3*4],ax + mov es:[INTER3*4+2],cs + sti + + call getpal + sti + mov al,cs:whattodo + mov cs:whattodo,0 + mov cs:lastbuttonstate,0 + cmp al,1 + jne dos1 + call savelbm + jmp dos0 +dos1: cmp al,2 + jne dos2 + call savemem + jmp dos0 +dos2: cmp al,3 + jne dos3 + ;call runmenu + jmp dos0 +dos3: cmp al,4 + jne dos4 + ;call scrollscrn + jmp dos0 +dos4: +dos0: cli + mov ax,0 + mov es,ax + mov ax,word ptr cs:[newint7+0] + mov dx,word ptr cs:[newint7+2] + mov es:[INTER3*4],ax + mov es:[INTER3*4+2],dx + sti + ret +dosomething ENDP + +memname db 'MEMORY.DAT',0 +destpal db 786 dup(0) +handle dw 0 +filename db 'PIC000.BIN',0 + +deflbm1 LABEL BYTE ;main header + db 70,79,82,77, 0,0,0,0 ,73,76,66,77,66,77,72,68 + ; ^filelength-8 + db 0,0,0,20,1,64,0,200,0,0,0,0,8,0,1,0 + db 0,255,1,1,1,64,0,200,67,77,65,80,0,0,3,0 +deflbm2 LABEL BYTE ;BODY header + db 66,79,68,89, 0,0,0,0 + ; ^bodylength + +savelbm PROC NEAR + mov al,1 + call setpal + + sti + mov cs:filename[3],'0' + mov cs:filename[4],'0' + mov cs:filename[5],'1' + mov ah,0fh + int 10h + cmp al,4 + jb dispok + jmp sdispfail +dispok: mov ax,cs + mov ds,ax +sp2: mov ax,3d01h + mov dx,OFFSET filename + int 21h + jc sp1 ;not exists + mov bx,ax + mov ah,3eh + int 21h + inc cs:filename[5] + cmp cs:filename[5],'9' + jna spn1 + mov cs:filename[5],'0' + inc cs:filename[4] + cmp cs:filename[4],'9' + jna spn1 + mov cs:filename[4],'0' + inc cs:filename[3] +spn1: jmp sp2 +sp1: ;create + mov ax,3c01h + mov cx,0 + mov dx,OFFSET filename + int 21h + jc spfail + ;opened ok + mov cs:handle,ax + + call savelbmdata + + mov bx,cs:handle + mov ah,3eh + int 21h + + mov al,0 + call setpal + ret +spfail: mov al,2 + call errorpal + ret +sdispfail: + mov al,1 + call errorpal + ret +savelbm ENDP + +getpal PROC NEAR + cli + mov ax,cs + mov ds,ax + mov dx,03dah +rws1: in al,dx + test al,8 + jz rws1 +rws2: in al,dx + test al,8 + jnz rws2 + + xor ax,ax + mov dx,3c7h + out dx,al + + mov si,OFFSET destpal + mov cx,768 + mov dx,3c9h +rwag: in al,dx + shl al,1 + shl al,1 + mov ds:[si],al + inc si + loop rwag + sti + ret +getpal ENDP + +waitborder PROC NEAR + mov dx,03dah +rrws1: in al,dx + test al,8 + jz rrws1 +rrws2: in al,dx + test al,8 + jnz rrws2 + ret +waitborder ENDP + +errorpal PROC NEAR + cli + mov cs:apu,al + mov si,ax + and si,127 + shl si,1 + shl si,1 + add si,OFFSET errorcols + call waitborder + mov ax,cs + mov ds,ax + xor al,al + mov dx,3c8h + out dx,al + inc dx + mov cx,256 +epal1: mov al,ds:[si+1] + out dx,al + mov al,ds:[si+2] + out dx,al + mov al,ds:[si+3] + out dx,al + loop epal1 + test cs:apu,128 + jz epal3 + sti + ret +epal3: mov cx,30 +epal2: call waitborder + loop epal2 + mov al,0 + call setpal + sti + ret +errorpal ENDP + +greypal PROC NEAR + push cx + push dx + push ax + xor al,al + mov dx,3c8h + out dx,al + inc dx + pop ax + mov cx,256*3 +gpal1: out dx,al + loop gpal1 + pop dx + pop cx + ret +greypal ENDP + +setpal PROC NEAR + cli + mov cs:apu,al + mov ax,cs + mov ds,ax + call waitborder + + xor ax,ax + mov dx,3c8h + out dx,al + + mov si,OFFSET destpal + mov cx,768 + mov dx,3c9h + mov ah,cs:apu +rrwag: mov al,ds:[si] + shr al,1 + shr al,1 + cmp ah,0 + je rrwag2 + xor al,31 ;to create the flashing +rrwag2: out dx,al + inc si + loop rrwag + sti + ret +setpal ENDP + + ALIGN 2 +prow db 330 dup(0) ;packed row/screen row +row db 8*40 dup(0) ;bitmapped row + +datalen dw 0,0 +hilolen db 0,0,0,0 + +getsirow PROC NEAR + mov bp,cs:screenstart + cmp si,cs:splitrow + jb gsr0 + sub si,cs:splitrow + xor bp,bp +gsr0: ;row si => es:prow (†††) + cmp cs:tweaked,0 + jne gsr1 + mov ax,si + mul cs:rowlength + mov si,ax + add si,bp + mov di,OFFSET prow + mov cx,160 + rep movsw + ret +gsr1: mov di,OFFSET prow + mov ax,si + mul cs:rowlength + mov si,ax + add si,bp + mov dx,3ceh + mov al,4 + out dx,al + inc dx + in al,dx + push ax + mov ax,0004h +gsr3: mov dx,3ceh + out dx,ax + push ax + push di + push si + mov cx,80 +gsr2: mov al,ds:[si] + mov es:[di],al + add di,4 + inc si + loop gsr2 + pop si + pop di + pop ax + inc di + inc ah + cmp ah,4 + jb gsr3 + mov dx,3ceh + mov al,4 + out dx,al + inc dx + pop ax + out dx,al + ret +getsirow ENDP + +savelbmdata PROC NEAR + mov ax,cs + mov ds,ax + mov ax,0b800h + mov es,ax + xor si,si + mov cx,25 +slb2: push cx + + mov cx,80 + xor bx,bx +slb1: mov ax,es:[si] + mov word ptr ds:prow[bx],ax + add si,2 + add bx,2 + loop slb1 + + ;save row to file + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET prow + mov cx,160 + int 21h + + pop cx + loop slb2 + ret +savelbmdata ENDP + +savemem PROC NEAR + mov al,3+128 + call errorpal + mov dx,cs + mov ds,dx + mov dx,OFFSET memname + mov cx,32 + dosint 3ch + jc error + mov cs:[handle],ax + + mov cx,20 + mov bx,0 + +maga: mov ds,bx + mov dx,0 + push cx + push bx + mov cx,32768 + mov bx,cs:[handle] + dosint 40h + cmp ax,32768 + jne error3 + jc error3 + pop bx + pop cx + add bx,2048 + mov al,bh + rol al,1 + rol al,1 + xor al,bh + call greypal + loop maga + + mov bx,cs:[handle] + dosint 3eh + jc error + + jmp iover + +error3: pop bx + pop cx +error: mov al,2 + call errorpal + ret + +iover: mov al,0 + call setpal + ret +savemem ENDP + +code ENDS + END + diff --git a/GRAB/FGOK.ASM b/GRAB/FGOK.ASM new file mode 100644 index 0000000..0611481 --- /dev/null +++ b/GRAB/FGOK.ASM @@ -0,0 +1,2276 @@ +debuginc MACRO xpos + push ax + push es + mov ax,0b800h + mov es,ax + inc byte ptr es:[xpos*2] + mov byte ptr es:[xpos*2+1],17h + pop es + pop ax + ENDM + +dosint MACRO fn + mov ah,fn + int 21h + ENDM + +int33 MACRO + pushf + call cs:oldint8 + ENDM + +code SEGMENT word public 'code' + ASSUME cs:code + +start: jmp main + +txt db 13,10 + db "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»",13,10 + db "º Future-Multi-Grabber V1.0 Copyright (C) 1991 ÀÅÙ / The Future Crew º",13,10 + db "ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ",13,10 + db "º Press the mouse MIDDLE-button to grab a Deluxepaint LBM (PIC?.LBM). º",13,10 + db "º Hold MIDDLEb and press all others to save memory dump (MEMORY.DAT). º",13,10 + db "º Hold MIDDLEb and click the LEFTb to enter the scroll mode. º",13,10 + db "º Hold MIDDLEb and click the RIGHTb to enter menu mode. º",13,10 + db "ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ",13,10 + db "º MOV AX,FCFCh ; MOV BX,1 ; INT 33h ; save LBM with FutureGrabber º",13,10 + db "ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ",13,10 + db "º In error conditions the screen (border) color is flashed: º",13,10 + db "º BLUE: Disk(full) error GREEN: Invalid videomode RED: Unknown problems :-) º",13,10 + db "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ",13,10 + db '$' +txt2 db 13,10,'Future-Multi-Grabber already installed!',13,10,'$' +txt3 db 13,10,'MouseDriver (3 button mouse required) not found!',13,10,'$' +INTER equ 33h +INTER2 equ 28h +INTER3 equ 8h +INTER4 equ 10h +INTER5 equ 9h +oldint6 dd ? ;int 10h +oldint7 dd ? ;timer +oldint8 dd ? ;mouse int +oldint9 dd ? ;int 28h +oldint5 dd ? ;keyb +oldint dd ? ;mouse CALL +critoff dw ? +critseg dw ? +newint7 dd ? ;newtimer + +whattodo db 0 ;1=savepic,2=savemem,3=menu +counter dw 0 +insideint db 0 +insidemenu db 0 + +rowlength dw 0 +screenstart dw 0 +splitrow dw 0 +tweaked dw 0 + +pleasedoit db 0 +lastbuttonstate dw 0 + +errorcols LABEL BYTE + db -1,63,0,0 ;red/unknown 0 + db -1,0,28,0 ;green/videomode 1 + db -1,0,0,32 ;blue/disk 2 + db -1,8,8,16 ;INFO: saving mem 3 + db -1,32,32,0 ;INFO: testtest 4 + +apu db 0 + +callmask dw 0 +callpnt LABEL DWORD +calloff dw 0 +callseg dw 0 + +mousex dw 0 +mousey dw 0 +mousegx dw 0 +mousegy dw 0 +mouseb dw 0 +omousex dw 0 +omousey dw 0 +omouseb dw 0 + +mymin dw 0 +mymax dw 0 +mxmin dw 0 +mxmax dw 0 + +defpal LABEL BYTE + db 00,00,00 + db 00,00,40 + db 00,40,00 + db 00,40,40 + db 40,00,00 + db 40,00,40 + db 40,20,00 + db 40,40,40 + db 20,20,20 + db 20,20,60 + db 20,60,20 + db 20,60,60 + db 60,20,20 + db 60,20,60 + db 60,60,20 + db 60,60,60 +normalregs db 256 dup(0) ;text mode VGA regs + +main: ;DO-IT!! + mov ax,cs + mov es,ax + mov di,OFFSET normalregs + ;call fromvgaregs + mov ax,cs + mov ds,ax + mov si,OFFSET normalregs + ;call tovgaregs + mov ax,0 + mov dx,0 + int 33h + cmp dx,100h + jne notins + mov ax,cs + mov ds,ax + mov dx,OFFSET txt2 + mov ah,9 + int 21h + mov ah,4ch + int 21h +notins: ;chk mousedrv + mov ax,0 + int 33h + cmp ax,0 + jne notmouseis + mov ax,cs + mov ds,ax + mov dx,OFFSET txt3 + mov ah,9 + int 21h + mov ah,4ch + int 21h +notmouseis: + mov ah,34h + int 21h + mov cs:critoff,bx + mov cs:critseg,es + mov ax,cs + mov es,ax + mov ax,0ch + mov cx,0ffffh + mov dx,OFFSET intti + int 33h + cli + mov ax,0 + mov es,ax + mov ax,es:[INTER*4] + mov WORD PTR cs:[oldint8+0],ax + mov ax,es:[INTER*4+2] + mov WORD PTR cs:[oldint8+0+2],ax + mov ax,OFFSET intti33 + mov es:[INTER*4],ax + mov es:[INTER*4+2],cs + + mov ax,es:[INTER2*4] + mov WORD PTR cs:[oldint9+0],ax + mov ax,es:[INTER2*4+2] + mov WORD PTR cs:[oldint9+0+2],ax + mov ax,OFFSET intti9 + mov es:[INTER2*4],ax + mov es:[INTER2*4+2],cs + + mov ax,es:[INTER5*4] + mov WORD PTR cs:[oldint5+0],ax + mov ax,es:[INTER5*4+2] + mov WORD PTR cs:[oldint5+0+2],ax + mov ax,OFFSET intti5 + mov es:[INTER5*4],ax + mov es:[INTER5*4+2],cs + + mov ax,es:[INTER3*4] + mov WORD PTR cs:[oldint7+0],ax + mov ax,es:[INTER3*4+2] + mov WORD PTR cs:[oldint7+0+2],ax + mov ax,OFFSET intti7 + mov es:[INTER3*4],ax + mov es:[INTER3*4+2],cs + + mov ax,es:[INTER4*4] + mov WORD PTR cs:[oldint6+0],ax + mov ax,es:[INTER4*4+2] + mov WORD PTR cs:[oldint6+0+2],ax + mov ax,OFFSET intti6 + mov es:[INTER4*4],ax + mov es:[INTER4*4+2],cs + sti + mov ax,cs + mov ds,ax + mov ah,9 + mov dx,OFFSET txt + int 21h + mov dx,16000/16 + mov ah,31h + int 21h + +intti33 PROC FAR + cmp ax,0 + je mousecheck + cmp ax,03h + je mouseand + cmp ax,0ch + je mousesubr + cmp ax,07h + je mousexrange + cmp ax,08h + je mouseyrange + cmp ax,0fcfch + je callfgc + jmp cs:oldint8 +callfgc: + call fgfunctions + iret +mousexrange: + mov cs:mxmin,cx + mov cs:mxmax,dx + int33 + iret +mouseyrange: + mov cs:mymin,cx + mov cs:mymax,dx + int33 + iret +mouseand: + int33 + test bx,4 + jz mad2 + xor bx,bx ;if middlebutton pressed, lie all others are up +mad2: and bx,3 + iret +mousesubr: + mov cs:callmask,cx + mov cs:callseg,es + mov cs:calloff,dx + iret +mousecheck: + push es + push cx + push dx + mov ax,cs + mov es,ax + mov ax,0ch + mov cx,-1 + mov dx,OFFSET intti + int33 + pop dx + pop cx + pop es + mov ax,-1 + mov bx,2 ;say it's a microsoft mouse + mov dx,0100h + iret +intti33 ENDP + +intti5 PROC FAR + ;revive mouse + in al,21h + and al,255-16 + out 21h,al + jmp cs:oldint5 +intti5 ENDP + +fgfunctions PROC NEAR + push bx + push cx + push dx + push ds + push es + push si + push di + push bp + cmp bx,1 + jne fgf1 + mov cs:whattodo,1 + cli + mov ax,0 + mov es,ax + mov ax,es:[INTER3*4] + mov WORD PTR cs:[newint7+0],ax + mov ax,es:[INTER3*4+2] + mov WORD PTR cs:[newint7+0+2],ax + mov ax,OFFSET intti7 + mov es:[INTER3*4],ax + mov es:[INTER3*4+2],cs + sti + call dosomething + xor ax,ax +fgf1: pop bp + pop di + pop si + pop es + pop ds + pop dx + pop cx + pop bx + ret +fgfunctions ENDP + +intti6 PROC NEAR + cmp ah,15 + jne i6j1 + pushf + call cs:oldint6 + and al,127 + iret +i6j1: jmp cs:oldint6 +intti6 ENDP + +intti7 PROC NEAR ;timer + push ds + push bx + cmp cs:insideint,0 + jne gnope + cmp cs:pleasedoit,0 + je gnope + mov bx,cs:critoff + mov ds,cs:critseg + cmp byte ptr ds:[bx],0 + jne gnope + push ax + push cx + push dx + push si + push di + push bp + push es + mov cs:pleasedoit,0 + mov al,20h + out 20h,al + call dosomething + pop es + pop bp + pop di + pop si + pop dx + pop cx + pop ax +gnope: pop bx + pop ds + jmp cs:oldint7 + ENDP + +intti9 PROC FAR + cmp cs:insideint,0 + jne nope9 + cmp cs:pleasedoit,0 + je nope9 + inc cs:insideint + push ax + push bx + push cx + push dx + push si + push di + push bp + push ds + push es + mov cs:pleasedoit,0 + call dosomething + pop es + pop ds + pop bp + pop di + pop si + pop dx + pop cx + pop bx + pop ax + dec cs:insideint +nope9: jmp cs:oldint9 +intti9 ENDP + +intti PROC FAR ;FINDME + cmp cs:insidemenu,0 + je notim1 + mov cs:mouseb,bx + mov cs:mousegx,cx + mov cs:mousegy,dx + shr cx,1 + shr cx,1 + shr cx,1 + mov cs:mousex,cx + shr dx,1 + shr dx,1 + shr dx,1 + mov cs:mousey,dx + ret +notim1: cmp cs:insideint,0 + je nope10x + ret +x2nope: jmp nope +nope10x: inc cs:insideint + push ax + push bx + push cx + push dx + push si + push di + push bp + push ds + push es + mov al,20h + out 20h,al + test bx,4 + jnz x2nope ;MIDDLE must be released + test cs:lastbuttonstate,4 + jz x2nope ;MIDDLE had to be pressed + ;middle now released, check for what was pressed + mov bx,cs:lastbuttonstate + and bx,3 + cmp bx,0 + je zsavelbm ;only MIDDLE pressed, + cmp bx,1+2 + je zsavemem ;LEFT+RIGHT+MIDDLE pressed, + cmp bx,2 + je zrunmenu ;RIGHT+MIDDLE pressed, + cmp bx,1 + je zscroll ;LEFT+MIDDLE pressed, + jmp nope +zsavelbm: mov cs:whattodo,1 + jmp trytodoit +zsavemem: mov cs:whattodo,2 + jmp trytodoit +zrunmenu: mov cs:whattodo,3 + jmp trytodoit +zscroll: mov cs:whattodo,4 + jmp trytodoit +trytodoit: + cli + mov ax,0 + mov es,ax + mov ax,es:[INTER3*4] + mov WORD PTR cs:[newint7+0],ax + mov ax,es:[INTER3*4+2] + mov WORD PTR cs:[newint7+0+2],ax + mov ax,OFFSET intti7 + mov es:[INTER3*4],ax + mov es:[INTER3*4+2],cs + sti + mov cs:pleasedoit,1 +nope: pop es + pop ds + pop bp + pop di + pop si + pop dx + pop cx + pop bx + pop ax + or cs:lastbuttonstate,bx + test bx,4 + jne nope20 ;if MIDDLE button pressed, no call mask emulation + mov cs:lastbuttonstate,0 + and ax,cs:callmask + je nope20 + call cs:callpnt +nope20: dec cs:insideint + ret +intti ENDP + +dosomething PROC NEAR + call getpal + sti + mov al,cs:whattodo + mov cs:whattodo,0 + mov cs:lastbuttonstate,0 + cmp al,1 + jne dos1 + call savelbm + jmp dos0 +dos1: cmp al,2 + jne dos2 + call savemem + jmp dos0 +dos2: cmp al,3 + jne dos3 + call runmenu + jmp dos0 +dos3: cmp al,4 + jne dos4 + call scrollscrn + jmp dos0 +dos4: +dos0: cli + mov ax,0 + mov es,ax + mov ax,word ptr cs:[newint7+0] + mov dx,word ptr cs:[newint7+0+2] + mov es:[INTER3*4],ax + mov es:[INTER3*4+2],dx + sti + ret +dosomething ENDP + +memname db 'MEMORY.DAT',0 +destpal db 786 dup(0) +handle dw 0 +filename db 'PIC000.LBM',0 + +deflbm1 LABEL BYTE ;main header + db 70,79,82,77, 0,0,0,0 ,73,76,66,77,66,77,72,68 + ; ^filelength-8 + db 0,0,0,20,1,64,0,200,0,0,0,0,8,0,1,0 + db 0,255,1,1,1,64,0,200,67,77,65,80,0,0,3,0 +deflbm2 LABEL BYTE ;BODY header + db 66,79,68,89, 0,0,0,0 + ; ^bodylength + +savelbm PROC NEAR + mov al,1 + call setpal + + ;determine screen statistics + ;get screen width + mov dx,3d4h + mov al,13h + out dx,al + inc dx + in al,dx + dec dx + mov cl,3 + xor ah,ah + shl ax,cl + mov cs:rowlength,ax + ;get split row + mov dx,3d4h + mov al,7 + out dx,al + inc dx + in al,dx + dec dx + mov ah,al + mov al,18h + out dx,al + inc dx + in al,dx + shr ah,1 + shr ah,1 + shr ah,1 + shr ah,1 + and ah,1 + shr ax,1 + mov cs:splitrow,ax + ;get screen start + mov dx,3d4h + mov al,0ch + out dx,al + inc dx + in al,dx + mov ah,al + dec dx + mov al,0dh + out dx,al + inc dx + in al,dx + dec dx + mov cs:screenstart,ax + ;tweaked? + mov cs:tweaked,0 + mov dx,3c4h + mov al,4 + out dx,al + inc dx + in al,dx + test al,8 + jnz notwe + test al,4 + jz notwe + shr cs:rowlength,1 + shr cs:rowlength,1 + mov cs:tweaked,1 + jmp istwe +notwe: shl cs:screenstart,1 + shl cs:screenstart,1 + shl cs:screenstart,1 + shl cs:screenstart,1 +istwe: sti + mov cs:filename[3],'0' + mov cs:filename[4],'0' + mov cs:filename[5],'1' + mov ah,0fh + int 10h + cmp al,19 + je dispok + jmp sdispfail +dispok: mov ax,cs + mov ds,ax +sp2: mov ax,3d01h + mov dx,OFFSET filename + int 21h + jc sp1 ;not exists + mov bx,ax + mov ah,3eh + int 21h + inc cs:filename[5] + cmp cs:filename[5],'9' + jna spn1 + mov cs:filename[5],'0' + inc cs:filename[4] + cmp cs:filename[4],'9' + jna spn1 + mov cs:filename[4],'0' + inc cs:filename[3] +spn1: jmp sp2 +sp1: ;create + mov ax,3c01h + mov cx,0 + mov dx,OFFSET filename + int 21h + jc spfail + ;opened ok + mov cs:handle,ax + + call savelbmdata + + mov bx,cs:handle + mov ah,3eh + int 21h + + mov al,0 + call setpal + ret +spfail: mov al,2 + call errorpal + ret +sdispfail: + mov al,1 + call errorpal + ret +savelbm ENDP + +getpal PROC NEAR + cli + mov ax,cs + mov ds,ax + mov dx,03dah +rws1: in al,dx + test al,8 + jz rws1 +rws2: in al,dx + test al,8 + jnz rws2 + + xor ax,ax + mov dx,3c7h + out dx,al + + mov si,OFFSET destpal + mov cx,768 + mov dx,3c9h +rwag: in al,dx + shl al,1 + shl al,1 + mov ds:[si],al + inc si + loop rwag + sti + ret +getpal ENDP + +waitborder PROC NEAR + mov dx,03dah +rrws1: in al,dx + test al,8 + jz rrws1 +rrws2: in al,dx + test al,8 + jnz rrws2 + ret +waitborder ENDP + +errorpal PROC NEAR + cli + mov cs:apu,al + mov si,ax + and si,127 + shl si,1 + shl si,1 + add si,OFFSET errorcols + call waitborder + mov ax,cs + mov ds,ax + xor al,al + mov dx,3c8h + out dx,al + inc dx + mov cx,256 +epal1: mov al,ds:[si+1] + out dx,al + mov al,ds:[si+2] + out dx,al + mov al,ds:[si+3] + out dx,al + loop epal1 + test cs:apu,128 + jz epal3 + sti + ret +epal3: mov cx,30 +epal2: call waitborder + loop epal2 + mov al,0 + call setpal + sti + ret +errorpal ENDP + +greypal PROC NEAR + push cx + push dx + push ax + xor al,al + mov dx,3c8h + out dx,al + inc dx + pop ax + mov cx,256*3 +gpal1: out dx,al + loop gpal1 + pop dx + pop cx + ret +greypal ENDP + +setpal PROC NEAR + cli + mov cs:apu,al + mov ax,cs + mov ds,ax + call waitborder + + xor ax,ax + mov dx,3c8h + out dx,al + + mov si,OFFSET destpal + mov cx,768 + mov dx,3c9h + mov ah,cs:apu +rrwag: mov al,ds:[si] + shr al,1 + shr al,1 + cmp ah,0 + je rrwag2 + xor al,31 ;to create the flashing +rrwag2: out dx,al + inc si + loop rrwag + sti + ret +setpal ENDP + + ALIGN 2 +prow db 330 dup(0) ;packed row/screen row +row db 8*40 dup(0) ;bitmapped row + +datalen dw 0,0 +hilolen db 0,0,0,0 + +getsirow PROC NEAR + mov bp,cs:screenstart + cmp si,cs:splitrow + jb gsr0 + sub si,cs:splitrow + xor bp,bp +gsr0: ;row si => es:prow (†††) + cmp cs:tweaked,0 + jne gsr1 + mov ax,si + mul cs:rowlength + mov si,ax + add si,bp + mov di,OFFSET prow + mov cx,160 + rep movsw + ret +gsr1: mov di,OFFSET prow + mov ax,si + mul cs:rowlength + mov si,ax + add si,bp + mov dx,3ceh + mov al,4 + out dx,al + inc dx + in al,dx + push ax + mov ax,0004h +gsr3: mov dx,3ceh + out dx,ax + push ax + push di + push si + mov cx,80 +gsr2: mov al,ds:[si] + mov es:[di],al + add di,4 + inc si + loop gsr2 + pop si + pop di + pop ax + inc di + inc ah + cmp ah,4 + jb gsr3 + mov dx,3ceh + mov al,4 + out dx,al + inc dx + pop ax + out dx,al + ret +getsirow ENDP + +savelbmdata PROC NEAR + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET deflbm1 + mov cx,30h + int 21h + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET destpal + mov cx,768 + int 21h + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET deflbm2 + mov cx,8 + int 21h + + mov ax,cs + mov es,ax + mov ax,0a000h + mov ds,ax + mov cx,200 + ;mov si,cs:screenstart + xor si,si + mov cs:datalen,si + mov cs:datalen[2],si +nextrow: push cx + push si + call getsirow + ;bit prow to bits + + push ds + mov ax,cs + mov ds,ax + mov di,OFFSET row+7*40 + mov cx,8 ;8 bits +nr1: push cx + push di + + mov si,OFFSET prow + mov cx,40 +rn2: shl byte ptr ds:[si],1 + rcl ah,1 + shl byte ptr ds:[si+1],1 + rcl ah,1 + shl byte ptr ds:[si+2],1 + rcl ah,1 + shl byte ptr ds:[si+3],1 + rcl ah,1 + shl byte ptr ds:[si+4],1 + rcl ah,1 + shl byte ptr ds:[si+5],1 + rcl ah,1 + shl byte ptr ds:[si+6],1 + rcl ah,1 + shl byte ptr ds:[si+7],1 + rcl ah,1 + add si,8 + mov al,ah + stosb + loop rn2 + + pop di + pop cx + sub di,40 + loop nr1 + + ;pack row[] to prow[] + mov si,OFFSET row + mov di,OFFSET prow + mov cx,8 +pr1: push si + push cx + xor bl,bl + mov dx,si + xor cl,cl ;40 bytes in a row +pr5: mov al,ds:[si] + cmp al,ds:[si+1] + jne pr2 + cmp al,ds:[si+2] + jne pr2 + ;three bytes same, more maybe? + cmp bl,0 + je pr6 + ;some nonsame stuff gathered, sort it out + push si + push cx + mov cl,bl + xor ch,ch + mov al,bl + dec al + stosb + mov si,dx + rep movsb + pop cx + pop si +pr6: xor bl,bl +pr3: dec bl + inc si + inc cl + mov al,ds:[si] + cmp al,ds:[si+1] + jne pr4 + cmp cl,39 + jl pr3 +pr4: mov al,bl + stosb + mov al,ds:[si] + stosb +pr11: inc si + inc cl + xor bl,bl + mov dx,si + cmp cl,38 + jl pr5 + cmp cl,38 + je pr10 + cmp cl,39 + je pr9 + jmp pr8 +pr1x: jmp pr1 +nextrowx: jmp nextrow + +pr2: inc cl + inc bl + inc si + cmp cl,38 + jl pr5 +pr10: inc bl +pr9: inc bl +pr8: push si + push cx + mov cl,bl + xor ch,ch + jcxz pr7 + mov al,bl + dec al + stosb + mov si,dx + rep movsb +pr7: pop cx + pop si + + pop cx + pop si + add si,40 + loop pr1x + + ;save row to file + sub di,OFFSET prow + mov cx,di + add cs:datalen,cx + adc cs:datalen[2],0 + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET prow + int 21h + + pop ds + pop si + pop cx + inc si + loop nextrowx ;<<<<<< + + test cs:datalen,1 + jz sizeok + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET prow + mov cx,1 + add cs:datalen,cx + adc cs:datalen[2],0 + int 21h ;add a byte +sizeok: mov ax,cs + mov ds,ax + ;write datalen + mov bx,ds:handle + mov ax,4200h + mov cx,0 + mov dx,4+768+48 + int 21h + mov ax,ds:datalen[2] + mov ds:hilolen[0],ah + mov ds:hilolen[1],al + mov ax,ds:datalen[0] + mov ds:hilolen[2],ah + mov ds:hilolen[3],al + mov bx,ds:handle + mov ah,40h + mov dx,OFFSET hilolen + mov cx,4 + int 21h + ;write filelen + mov bx,ds:handle + mov ax,4200h + mov cx,0 + mov dx,4 + int 21h + add ds:datalen,768+48 + adc ds:datalen[2],0 + mov ax,ds:datalen[2] + mov ds:hilolen[0],ah + mov ds:hilolen[1],al + mov ax,ds:datalen[0] + mov ds:hilolen[2],ah + mov ds:hilolen[3],al + mov bx,ds:handle + mov ah,40h + mov dx,OFFSET hilolen + mov cx,4 + int 21h + ret +savelbmdata ENDP + +savemem PROC NEAR + mov al,3+128 + call errorpal + mov dx,cs + mov ds,dx + mov dx,OFFSET memname + mov cx,32 + dosint 3ch + jc error + mov cs:[handle],ax + + mov cx,20 + mov bx,0 + +maga: mov ds,bx + mov dx,0 + push cx + push bx + mov cx,32768 + mov bx,cs:[handle] + dosint 40h + cmp ax,32768 + jne error3 + jc error3 + pop bx + pop cx + add bx,2048 + mov al,bh + rol al,1 + rol al,1 + xor al,bh + call greypal + loop maga + + mov bx,cs:[handle] + dosint 3eh + jc error + + jmp iover + +error3: pop bx + pop cx +error: mov al,2 + call errorpal + ret + +iover: mov al,0 + call setpal + ret +savemem ENDP + +;************************************ +;************************************ +; RUNMENU +;************************************ +;************************************ + +codseg dw 0 +exitmenu db 0 +vram dw 0b800h +rows dw 25 dup(0) + +keymode dw 0 +keymodes dw OFFSET keyboard1,OFFSET keyboard2,OFFSET keyboard3,OFFSET keyboard3 + +strmaxlen equ 70 +strpnt dw 0 +string db 80 dup(0) + +memseg dw 0 +mempos dw 0 ;cursors position inside window + +runmenu PROC NEAR + sti + mov ax,cs + mov ds:codseg,ax + mov cs:insidemenu,1 + mov cs:exitmenu,0 + call initmenu + call redraw + jmp rm2 + ;MAIN LOOP +rmaga: mov ax,cs:mousex + mov cs:omousex,ax + mov ax,cs:mousey + mov cs:omousey,ax + mov ax,cs:mouseb + mov cs:omouseb,ax +rm2: call drawmcur ;cursor on + call waitfor + call drawmcur ;cursor off + call checkkeyb + call checkmouse + cmp cs:exitmenu,1 + jne rmaga +rm1: call waitrelease + call resetmenu + mov cs:insidemenu,0 + ret +runmenu ENDP + +waitrelease PROC NEAR +wrm1: cmp cs:mouseb,0 + jne wrm1 ;wait for button release + ret +waitrelease ENDP + +waitfor PROC NEAR + mov ax,cs:vram + mov es,ax + mov bx,cs:mouseb + mov cx,cs:mousex + mov dx,cs:mousey +wm1: inc byte ptr es:[156] ;we're alive + test keymode,2 + jz wm3 + mov ah,1 + int 16h + jnz wm2 +wm3: cmp cs:mousex,cx + jne wm2 + cmp cs:mousey,dx + jne wm2 + cmp cs:mouseb,bx + jne wm2 + jmp wm1 +wm2: inc byte ptr es:[154] ;we're alive 2 + ret +waitfor ENDP + +initmenu PROC NEAR + call storevideo + call initvideo + mov cx,25 + mov bx,0 + mov ax,0 +im1: mov cs:rows[bx],ax + add bx,2 + add ax,160 + loop im1 + ;set mouseparameters + mov ax,7 + mov cx,0 + mov dx,639 + int33 + mov ax,8 + mov cx,0 + mov dx,199 + int33 + mov ax,4 + mov cx,324 + mov dx,104 + int33 + mov cx,320/8 + mov dx,100/8 + mov cs:mousex,cx + mov cs:mousey,dx + mov cs:omousex,cx + mov cs:omousey,dx + mov cs:mouseb,0 + mov cs:omouseb,0 + ret +initmenu ENDP + +resetmenu PROC NEAR + call restorevideo + ;restore mouseparameters + mov ax,7 + mov cx,cs:mxmin + mov dx,cs:mxmax + int33 + mov ax,8 + mov cx,cs:mymin + mov dx,cs:mymax + int33 + ret +resetmenu ENDP + +drawmcur PROC NEAR + mov ax,cs:vram + mov es,ax + mov di,cs:omousey + shl di,1 + mov di,cs:rows[di] + add di,cs:omousex + add di,cs:omousex + xor byte ptr es:[di+1],255 + ret +drawmcur ENDP + +oldvmode db 0 +oldscrn db 4000 dup(0) +oldcurpos dw 0 +oldcurtype dw 0 +oldregs db 256 dup(0) ;stored VGA regs +old3c0 db 16 dup(0) + +storevideo PROC NEAR + mov cx,16 + xor bx,bx +sw3: push bx + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,bl + out dx,al + inc dx + in al,dx + mov cs:old3c0[bx],al + pop bx + inc bx + loop sw3 + mov ah,0fh + int 10h + mov cs:oldvmode,al + mov ah,03h + int 10h + mov cs:oldcurpos,dx + mov cs:oldcurtype,cx + mov ax,cs:vram + mov ds,ax + mov ax,cs + mov es,ax + mov di,OFFSET oldscrn + mov si,0 + cld + mov cx,4000/2 + rep movsw + mov ax,cs + mov es,ax + mov di,OFFSET oldregs + call fromvgaregs + ret +storevideo ENDP + +restorevideo PROC NEAR + mov ax,cs:vram + mov es,ax + mov ax,cs + mov ds,ax + mov si,OFFSET oldscrn + mov di,0 + cld + mov cx,4000/2 + rep movsw + xor ah,ah + mov ah,0 + mov al,cs:oldvmode + or al,128 + int 10h + mov ax,cs + mov ds,ax + mov si,OFFSET oldregs + call tovgaregs + mov ah,1 + mov cx,cs:oldcurtype + int 10h + mov ah,2 + mov dx,cs:oldcurpos + int 10h + mov al,0 + call setpal + mov cx,16 + xor bx,bx +rw3: push bx + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,bl + out dx,al + mov al,cs:old3c0[bx] + out dx,al + pop bx + inc bx + loop rw3 + mov al,32 + out dx,al + ret +restorevideo ENDP + +initvideo PROC NEAR + mov ax,3+128 + int 10h + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,0 + mov cx,16 +iv1: out dx,al + out dx,al + inc al + loop iv1 + mov al,32 + out dx,al + mov dx,3c8h + mov al,0 + out dx,al + inc dx + mov bx,0 + mov cx,16*3 +iv2: mov al,cs:defpal[bx] + inc bx + out dx,al + loop iv2 + + mov ax,cs:vram + mov es,ax + cld + mov di,0 + mov ax,0720h + mov cx,4000/2 + rep stosw + ;no flash + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,10h + out dx,al + mov al,0+0+4+0+0+0+0+0 + out dx,al + mov al,32 + out dx,al + ret +initvideo ENDP + +fromvgaregs PROC NEAR + cld + mov cx,19h + mov ah,0 + mov dx,3d4h +fvr1: mov al,ah + out dx,al + inc dx + in al,dx + stosb + dec dx + inc ah + loop fvr1 + + mov cx,15h + mov ah,0 +fvr2: mov dx,3dah + in al,dx + mov dx,3c0h + mov al,ah + out dx,al + inc dx + in al,dx + dec dx + stosb + inc ah + loop fvr2 + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,32 + out dx,al + + mov cx,9h + mov ah,0 + mov dx,3ceh +fvr3: mov al,ah + out dx,al + inc dx + in al,dx + stosb + dec dx + inc ah + loop fvr3 + + mov cx,4h + mov ah,1 ;0/bit 1=syncr. clear (0=halt) + mov dx,3c4h +fvr4: mov al,ah + out dx,al + inc dx + in al,dx + stosb + dec dx + inc ah + loop fvr4 + + ;Misc output 1: outp:3C2h inp:3CCh + mov dx,3cch + in al,dx + stosb + + ret +fromvgaregs ENDP + +tovgaregs PROC NEAR + cld + mov dx,3c4h + mov ax,1*256+0 + out dx,ax + + mov dx,3d4h + mov al,11h + mov ah,ds:[si+11h] + and ah,127 + out dx,ax + + mov cx,19h + mov ah,0 + mov dx,3d4h +tvr1: mov al,ah + out dx,al + inc dx + lodsb + out dx,al + dec dx + inc ah + loop tvr1 + + mov cx,15h + mov ah,0 +tvr2: mov dx,3dah + in al,dx + mov dx,3c0h + mov al,ah + out dx,al + lodsb + out dx,al + inc ah + loop tvr2 + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,32 + out dx,al + + mov cx,9h + mov ah,0 + mov dx,3ceh +tvr3: mov al,ah + out dx,al + inc dx + lodsb + out dx,al + dec dx + inc ah + loop tvr3 + + mov cx,4h + mov ah,1 ;0/bit 1=syncr. clear (0=halt) + mov dx,3c4h +tvr4: mov al,ah + out dx,al + inc dx + lodsb + out dx,al + dec dx + inc ah + loop tvr4 + + ;Misc output 1: outp:3C2h inp:3CCh + lodsb + mov dx,3c2h + out dx,al + + mov dx,3c4h + mov ax,3*256+0 + out dx,ax + ret +tovgaregs ENDP + +printl PROC NEAR + push ax + push bx + push cx + push ds + push es + push di + push si + push cs + pop ds + mov es,cs:vram + mov di,bx + and di,255 + shl di,1 + mov bl,bh + xor bh,bh + shl bx,1 + add di,cs:rows[bx] + cld + mov ah,al +prl2: lodsb + stosw + loop prl2 +prl1: pop si + pop di + pop es + pop ds + pop cx + pop bx + pop ax + ret +printl ENDP + +print PROC NEAR + push ax + push bx + push ds + push es + push di + push si + push cs + pop ds + mov es,cs:vram + mov di,bx + and di,255 + shl di,1 + mov bl,bh + xor bh,bh + shl bx,1 + add di,cs:rows[bx] + cld + mov ah,al +prn2: lodsb + cmp al,0 + je prn1 + stosw + jmp prn2 +prn1: pop si + pop di + pop es + pop ds + pop bx + pop ax + ret +print ENDP + +print2 PROC NEAR + push ax + push bx + push dx + push ds + push es + push di + push si + push cs + pop ds + mov dx,ax + mov es,cs:vram + mov di,bx + and di,255 + shl di,1 + mov bl,bh + xor bh,bh + shl bx,1 + add di,cs:rows[bx] + cld +prn22: mov ah,dh + lodsb + cmp al,0 + je prn21 + jl prn23 + mov ah,dl +prn23: stosw + jmp prn22 +prn21: pop si + pop di + pop es + pop ds + pop dx + pop bx + pop ax + ret +print2 ENDP + +print3 PROC NEAR + push ax + push bx + push dx + push ds + push es + push di + push si + push cs + pop ds + mov dx,ax + mov es,cs:vram + mov di,bx + and di,255 + shl di,1 + mov bl,bh + xor bh,bh + shl bx,1 + add di,cs:rows[bx] + cld +prnr22: mov ah,dl + lodsb + cmp al,0 + je prnr21 + cmp al,32 + jne prnr23 + mov ah,dh +prnr23: stosw + jmp prnr22 +prnr21: pop si + pop di + pop es + pop ds + pop dx + pop bx + pop ax + ret +print3 ENDP + +printhex16 PROC NEAR + push ax + mov al,ah + call printhex + pop ax + call printhex + ret +printhex16 ENDP + +hextxt db '0123456789ABCDEFabcdef' +hexnum db 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,10,11,12,13,14,15 + +printhex PROC NEAR + push ax + push cx + push dx + push es + mov es,cs:vram + push ax + mov cl,4 + shr al,cl + mov ah,dl + mov bl,al + xor bh,bh + mov al,cs:hextxt[bx] + stosw + pop ax + and al,15 + mov ah,dl + mov bl,al + xor bh,bh + mov al,cs:hextxt[bx] + stosw + pop es + pop dx + pop cx + pop ax + ret +printhex ENDP + +getmousepnt PROC NEAR + ;returns ES:DI to mouse position + mov es,cs:vram + mov di,cs:mousey + shl di,1 + mov di,cs:rows[di] + add di,cs:mousex + add di,cs:mousex + ret +getmousepnt ENDP + + ;0 1 2 3 4 5 6 7 + ;01234567890123456789012345678901234567890123456789012345678901234567890123456789 +titlebar db " Future-Multi-Grabber-Menu V1.0 Copyright (C) 1991 ÀÅÙ/FC I'm alive: ",0 +hexdump1 LABEL BYTE + db "ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß",0 +hexdump2 LABEL BYTE + db " Ú",24,24,"¿ " + db " ÀÄÄÙ " + db " ÚGO¿ " + db " ÀTOÙ " + db " ÚFI¿ " + db " ÀNDÙ " + db " ÚÄÄ¿ " + db " À",25,25,"Ù " + db 0 +keyboard0 LABEL BYTE + db "ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ",0 +editstr LABEL BYTE + db " String: ",0 +keyboard1 LABEL BYTE + db " ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ " + db " ³ 7 ³ 8 ³ 9 ³ 0 ³³ Q ³ W ³ E ³ R ³ T ³ Y ³ U ³ I ³ O ³ P ³ ³*1 Exit FMGM ³ " + db " ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ÀÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÂÄÁÄ¿ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ " + db " ³ 4 ³ 5 ³ 6 ³ + cmp bx,1+2 + je zsavemem ;LEFT+RIGHT+MIDDLE pressed, + cmp bx,2 + je zrunmenu ;RIGHT+MIDDLE pressed, + cmp bx,1 + je zscroll ;LEFT+MIDDLE pressed, + jmp nope +zsavelbm: mov cs:whattodo,1 + jmp trytodoit +zsavemem: mov cs:whattodo,2 + jmp trytodoit +zrunmenu: mov cs:whattodo,3 + jmp trytodoit +zscroll: mov cs:whattodo,4 + jmp trytodoit +trytodoit: + mov cs:pleasedoit,1 +nope: pop es + pop ds + pop bp + pop di + pop si + pop dx + pop cx + pop bx + pop ax + or cs:lastbuttonstate,bx + test bx,4 + jne nope20 ;if MIDDLE button pressed, no call mask emulation + mov cs:lastbuttonstate,0 + and ax,cs:callmask + je nope20 + call cs:callpnt +nope20: dec cs:insideint + ret +intti ENDP + +dosomething PROC NEAR + cli + mov ax,0 + mov es,ax + mov ax,es:[INTER3*4] + mov WORD PTR cs:[newint7+0],ax + mov ax,es:[INTER3*4+2] + mov WORD PTR cs:[newint7+2],ax + mov ax,OFFSET intti7 + mov es:[INTER3*4],ax + mov es:[INTER3*4+2],cs + sti + + call getpal + sti + mov al,cs:whattodo + mov cs:whattodo,0 + mov cs:lastbuttonstate,0 + cmp al,1 + jne dos1 + call savelbm + jmp dos0 +dos1: cmp al,2 + jne dos2 + call savemem + jmp dos0 +dos2: cmp al,3 + jne dos3 + call runmenu + jmp dos0 +dos3: cmp al,4 + jne dos4 + call scrollscrn + jmp dos0 +dos4: +dos0: cli + mov ax,0 + mov es,ax + mov ax,word ptr cs:[newint7+0] + mov dx,word ptr cs:[newint7+2] + mov es:[INTER3*4],ax + mov es:[INTER3*4+2],dx + sti + ret +dosomething ENDP + +memname db 'MEMORY.DAT',0 +destpal db 786 dup(0) +handle dw 0 +filename db 'PIC000.LBM',0 + +deflbm1 LABEL BYTE ;main header + db 70,79,82,77, 0,0,0,0 ,73,76,66,77,66,77,72,68 + ; ^filelength-8 + db 0,0,0,20,1,64,0,200,0,0,0,0,8,0,1,0 + db 0,255,1,1,1,64,0,200,67,77,65,80,0,0,3,0 +deflbm2 LABEL BYTE ;BODY header + db 66,79,68,89, 0,0,0,0 + ; ^bodylength + +savelbm PROC NEAR + mov al,1 + call setpal + + ;determine screen statistics + ;get screen width + mov dx,3d4h + mov al,13h + out dx,al + inc dx + in al,dx + dec dx + mov cl,3 + xor ah,ah + shl ax,cl + mov cs:rowlength,ax + ;get split row + mov dx,3d4h + mov al,7 + out dx,al + inc dx + in al,dx + dec dx + mov ah,al + mov al,18h + out dx,al + inc dx + in al,dx + shr ah,1 + shr ah,1 + shr ah,1 + shr ah,1 + and ah,1 + shr ax,1 + mov cs:splitrow,ax + ;get screen start + mov dx,3d4h + mov al,0ch + out dx,al + inc dx + in al,dx + mov ah,al + dec dx + mov al,0dh + out dx,al + inc dx + in al,dx + dec dx + mov cs:screenstart,ax + ;tweaked? + mov cs:tweaked,0 + mov dx,3c4h + mov al,4 + out dx,al + inc dx + in al,dx + test al,8 + jnz notwe + test al,4 + jz notwe + shr cs:rowlength,1 + shr cs:rowlength,1 + mov cs:tweaked,1 + jmp istwe +notwe: shl cs:screenstart,1 + shl cs:screenstart,1 + shl cs:screenstart,1 + shl cs:screenstart,1 +istwe: sti + mov cs:filename[3],'0' + mov cs:filename[4],'0' + mov cs:filename[5],'1' + mov ah,0fh + int 10h + cmp al,19 + je dispok +; jmp sdispfail +dispok: mov ax,cs + mov ds,ax +sp2: mov ax,3d01h + mov dx,OFFSET filename + int 21h + jc sp1 ;not exists + mov bx,ax + mov ah,3eh + int 21h + inc cs:filename[5] + cmp cs:filename[5],'9' + jna spn1 + mov cs:filename[5],'0' + inc cs:filename[4] + cmp cs:filename[4],'9' + jna spn1 + mov cs:filename[4],'0' + inc cs:filename[3] +spn1: jmp sp2 +sp1: ;create + mov ax,3c01h + mov cx,0 + mov dx,OFFSET filename + int 21h + jc spfail + ;opened ok + mov cs:handle,ax + + call savelbmdata + + mov bx,cs:handle + mov ah,3eh + int 21h + + mov al,0 + call setpal + ret +spfail: mov al,2 + call errorpal + ret +sdispfail: + mov al,1 + call errorpal + ret +savelbm ENDP + +getpal PROC NEAR + cli + mov ax,cs + mov ds,ax + mov dx,03dah +rws1: in al,dx + test al,8 + jz rws1 +rws2: in al,dx + test al,8 + jnz rws2 + + xor ax,ax + mov dx,3c7h + out dx,al + + mov si,OFFSET destpal + mov cx,768 + mov dx,3c9h +rwag: in al,dx + shl al,1 + shl al,1 + mov ds:[si],al + inc si + loop rwag + sti + ret +getpal ENDP + +waitborder PROC NEAR + mov dx,03dah +rrws1: in al,dx + test al,8 + jz rrws1 +rrws2: in al,dx + test al,8 + jnz rrws2 + ret +waitborder ENDP + +errorpal PROC NEAR + cli + mov cs:apu,al + mov si,ax + and si,127 + shl si,1 + shl si,1 + add si,OFFSET errorcols + call waitborder + mov ax,cs + mov ds,ax + xor al,al + mov dx,3c8h + out dx,al + inc dx + mov cx,256 +epal1: mov al,ds:[si+1] + out dx,al + mov al,ds:[si+2] + out dx,al + mov al,ds:[si+3] + out dx,al + loop epal1 + test cs:apu,128 + jz epal3 + sti + ret +epal3: mov cx,30 +epal2: call waitborder + loop epal2 + mov al,0 + call setpal + sti + ret +errorpal ENDP + +greypal PROC NEAR + push cx + push dx + push ax + xor al,al + mov dx,3c8h + out dx,al + inc dx + pop ax + mov cx,256*3 +gpal1: out dx,al + loop gpal1 + pop dx + pop cx + ret +greypal ENDP + +setpal PROC NEAR + cli + mov cs:apu,al + mov ax,cs + mov ds,ax + call waitborder + + xor ax,ax + mov dx,3c8h + out dx,al + + mov si,OFFSET destpal + mov cx,768 + mov dx,3c9h + mov ah,cs:apu +rrwag: mov al,ds:[si] + shr al,1 + shr al,1 + cmp ah,0 + je rrwag2 + xor al,31 ;to create the flashing +rrwag2: out dx,al + inc si + loop rrwag + sti + ret +setpal ENDP + + ALIGN 2 +prow db 330 dup(0) ;packed row/screen row +row db 8*40 dup(0) ;bitmapped row + +datalen dw 0,0 +hilolen db 0,0,0,0 + +getsirow PROC NEAR + mov bp,cs:screenstart + cmp si,cs:splitrow + jb gsr0 + sub si,cs:splitrow + xor bp,bp +gsr0: ;row si => es:prow (†††) + cmp cs:tweaked,0 + jne gsr1 + mov ax,si + mul cs:rowlength + mov si,ax + add si,bp + mov di,OFFSET prow + mov cx,160 + rep movsw + ret +gsr1: mov di,OFFSET prow + mov ax,si + mul cs:rowlength + mov si,ax + add si,bp + mov dx,3ceh + mov al,4 + out dx,al + inc dx + in al,dx + push ax + mov ax,0004h +gsr3: mov dx,3ceh + out dx,ax + push ax + push di + push si + mov cx,80 +gsr2: mov al,ds:[si] + mov es:[di],al + add di,4 + inc si + loop gsr2 + pop si + pop di + pop ax + inc di + inc ah + cmp ah,4 + jb gsr3 + mov dx,3ceh + mov al,4 + out dx,al + inc dx + pop ax + out dx,al + ret +getsirow ENDP + +savelbmdata PROC NEAR + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET deflbm1 + mov cx,30h + int 21h + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET destpal + mov cx,768 + int 21h + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET deflbm2 + mov cx,8 + int 21h + + mov ax,cs + mov es,ax + mov ax,0a000h + mov ds,ax + mov cx,200 + ;mov si,cs:screenstart + xor si,si + mov cs:datalen,si + mov cs:datalen[2],si +nextrow: push cx + push si + call getsirow + ;bit prow to bits + + push ds + mov ax,cs + mov ds,ax + mov di,OFFSET row+7*40 + mov cx,8 ;8 bits +nr1: push cx + push di + + mov si,OFFSET prow + mov cx,40 +rn2: shl byte ptr ds:[si],1 + rcl ah,1 + shl byte ptr ds:[si+1],1 + rcl ah,1 + shl byte ptr ds:[si+2],1 + rcl ah,1 + shl byte ptr ds:[si+3],1 + rcl ah,1 + shl byte ptr ds:[si+4],1 + rcl ah,1 + shl byte ptr ds:[si+5],1 + rcl ah,1 + shl byte ptr ds:[si+6],1 + rcl ah,1 + shl byte ptr ds:[si+7],1 + rcl ah,1 + add si,8 + mov al,ah + stosb + loop rn2 + + pop di + pop cx + sub di,40 + loop nr1 + + ;pack row[] to prow[] + mov si,OFFSET row + mov di,OFFSET prow + mov cx,8 +pr1: push si + push cx + xor bl,bl + mov dx,si + xor cl,cl ;40 bytes in a row +pr5: mov al,ds:[si] + cmp al,ds:[si+1] + jne pr2 + cmp al,ds:[si+2] + jne pr2 + ;three bytes same, more maybe? + cmp bl,0 + je pr6 + ;some nonsame stuff gathered, sort it out + push si + push cx + mov cl,bl + xor ch,ch + mov al,bl + dec al + stosb + mov si,dx + rep movsb + pop cx + pop si +pr6: xor bl,bl +pr3: dec bl + inc si + inc cl + mov al,ds:[si] + cmp al,ds:[si+1] + jne pr4 + cmp cl,39 + jl pr3 +pr4: mov al,bl + stosb + mov al,ds:[si] + stosb +pr11: inc si + inc cl + xor bl,bl + mov dx,si + cmp cl,38 + jl pr5 + cmp cl,38 + je pr10 + cmp cl,39 + je pr9 + jmp pr8 +pr1x: jmp pr1 +nextrowx: jmp nextrow + +pr2: inc cl + inc bl + inc si + cmp cl,38 + jl pr5 +pr10: inc bl +pr9: inc bl +pr8: push si + push cx + mov cl,bl + xor ch,ch + jcxz pr7 + mov al,bl + dec al + stosb + mov si,dx + rep movsb +pr7: pop cx + pop si + + pop cx + pop si + add si,40 + loop pr1x + + ;save row to file + sub di,OFFSET prow + mov cx,di + add cs:datalen,cx + adc cs:datalen[2],0 + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET prow + int 21h + + pop ds + pop si + pop cx + inc si + loop nextrowx ;<<<<<< + + test cs:datalen,1 + jz sizeok + mov bx,cs:handle + mov ah,40h + mov dx,OFFSET prow + mov cx,1 + add cs:datalen,cx + adc cs:datalen[2],0 + int 21h ;add a byte +sizeok: mov ax,cs + mov ds,ax + ;write datalen + mov bx,ds:handle + mov ax,4200h + mov cx,0 + mov dx,4+768+48 + int 21h + mov ax,ds:datalen[2] + mov ds:hilolen[0],ah + mov ds:hilolen[1],al + mov ax,ds:datalen[0] + mov ds:hilolen[2],ah + mov ds:hilolen[3],al + mov bx,ds:handle + mov ah,40h + mov dx,OFFSET hilolen + mov cx,4 + int 21h + ;write filelen + mov bx,ds:handle + mov ax,4200h + mov cx,0 + mov dx,4 + int 21h + add ds:datalen,768+48 + adc ds:datalen[2],0 + mov ax,ds:datalen[2] + mov ds:hilolen[0],ah + mov ds:hilolen[1],al + mov ax,ds:datalen[0] + mov ds:hilolen[2],ah + mov ds:hilolen[3],al + mov bx,ds:handle + mov ah,40h + mov dx,OFFSET hilolen + mov cx,4 + int 21h + ret +savelbmdata ENDP + +savemem PROC NEAR + mov al,3+128 + call errorpal + mov dx,cs + mov ds,dx + mov dx,OFFSET memname + mov cx,32 + dosint 3ch + jc error + mov cs:[handle],ax + + mov cx,20 + mov bx,0 + +maga: mov ds,bx + mov dx,0 + push cx + push bx + mov cx,32768 + mov bx,cs:[handle] + dosint 40h + cmp ax,32768 + jne error3 + jc error3 + pop bx + pop cx + add bx,2048 + mov al,bh + rol al,1 + rol al,1 + xor al,bh + call greypal + loop maga + + mov bx,cs:[handle] + dosint 3eh + jc error + + jmp iover + +error3: pop bx + pop cx +error: mov al,2 + call errorpal + ret + +iover: mov al,0 + call setpal + ret +savemem ENDP + +;************************************ +;************************************ +; RUNMENU +;************************************ +;************************************ + +codseg dw 0 +exitmenu db 0 +vram dw 0b800h +rows dw 25 dup(0) + +keymode dw 0 +keymodes dw OFFSET keyboard1,OFFSET keyboard2,OFFSET keyboard3,OFFSET keyboard3 + +strmaxlen equ 70 +strpnt dw 0 +string db 80 dup(0) + +memseg dw 0 +mempos dw 0 ;cursors position inside window + +runmenu PROC NEAR + sti + mov ax,cs + mov ds:codseg,ax + mov cs:insidemenu,1 + mov cs:exitmenu,0 + call initmenu + call redraw + jmp rm2 + ;MAIN LOOP +rmaga: mov ax,cs:mousex + mov cs:omousex,ax + mov ax,cs:mousey + mov cs:omousey,ax + mov ax,cs:mouseb + mov cs:omouseb,ax +rm2: call drawmcur ;cursor on + call waitfor + call drawmcur ;cursor off + call checkkeyb + call checkmouse + cmp cs:exitmenu,1 + jne rmaga +rm1: call waitrelease + call resetmenu + mov cs:insidemenu,0 + ret +runmenu ENDP + +waitrelease PROC NEAR +wrm1: cmp cs:mouseb,0 + jne wrm1 ;wait for button release + ret +waitrelease ENDP + +waitfor PROC NEAR + mov ax,cs:vram + mov es,ax + mov bx,cs:mouseb + mov cx,cs:mousex + mov dx,cs:mousey +wm1: inc byte ptr es:[156] ;we're alive + test keymode,2 + jz wm3 + mov ah,1 + int 16h + jnz wm2 +wm3: cmp cs:mousex,cx + jne wm2 + cmp cs:mousey,dx + jne wm2 + cmp cs:mouseb,bx + jne wm2 + jmp wm1 +wm2: inc byte ptr es:[154] ;we're alive 2 + ret +waitfor ENDP + +initmenu PROC NEAR + call storevideo + call initvideo + mov cx,25 + mov bx,0 + mov ax,0 +im1: mov cs:rows[bx],ax + add bx,2 + add ax,160 + loop im1 + ;set mouseparameters + mov ax,7 + mov cx,0 + mov dx,639 + int33 + mov ax,8 + mov cx,0 + mov dx,199 + int33 + mov ax,4 + mov cx,324 + mov dx,104 + int33 + mov cx,320/8 + mov dx,100/8 + mov cs:mousex,cx + mov cs:mousey,dx + mov cs:omousex,cx + mov cs:omousey,dx + mov cs:mouseb,0 + mov cs:omouseb,0 + ret +initmenu ENDP + +resetmenu PROC NEAR + call restorevideo + ;restore mouseparameters + mov ax,7 + mov cx,cs:mxmin + mov dx,cs:mxmax + int33 + mov ax,8 + mov cx,cs:mymin + mov dx,cs:mymax + int33 + ret +resetmenu ENDP + +drawmcur PROC NEAR + mov ax,cs:vram + mov es,ax + mov di,cs:omousey + shl di,1 + mov di,cs:rows[di] + add di,cs:omousex + add di,cs:omousex + xor byte ptr es:[di+1],255 + ret +drawmcur ENDP + +oldvmode db 0 +oldscrn db 4000 dup(0) +oldcurpos dw 0 +oldcurtype dw 0 +oldregs db 256 dup(0) ;stored VGA regs +old3c0 db 16 dup(0) + +storevideo PROC NEAR + mov cx,16 + xor bx,bx +sw3: push bx + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,bl + out dx,al + inc dx + in al,dx + mov cs:old3c0[bx],al + pop bx + inc bx + loop sw3 + mov ah,0fh + int 10h + mov cs:oldvmode,al + mov ah,03h + int 10h + mov cs:oldcurpos,dx + mov cs:oldcurtype,cx + mov ax,cs:vram + mov ds,ax + mov ax,cs + mov es,ax + mov di,OFFSET oldscrn + mov si,0 + cld + mov cx,4000/2 + rep movsw + mov ax,cs + mov es,ax + mov di,OFFSET oldregs + call fromvgaregs + ret +storevideo ENDP + +restorevideo PROC NEAR + mov ax,cs:vram + mov es,ax + mov ax,cs + mov ds,ax + mov si,OFFSET oldscrn + mov di,0 + cld + mov cx,4000/2 + rep movsw + xor ah,ah + mov ah,0 + mov al,cs:oldvmode + or al,128 + int 10h + mov ax,cs + mov ds,ax + mov si,OFFSET oldregs + call tovgaregs + mov ah,1 + mov cx,cs:oldcurtype + int 10h + mov ah,2 + mov dx,cs:oldcurpos + int 10h + mov al,0 + call setpal + mov cx,16 + xor bx,bx +rw3: push bx + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,bl + out dx,al + mov al,cs:old3c0[bx] + out dx,al + pop bx + inc bx + loop rw3 + mov al,32 + out dx,al + ret +restorevideo ENDP + +initvideo PROC NEAR + mov ax,3+128 + int 10h + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,0 + mov cx,16 +iv1: out dx,al + out dx,al + inc al + loop iv1 + mov al,32 + out dx,al + mov dx,3c8h + mov al,0 + out dx,al + inc dx + mov bx,0 + mov cx,16*3 +iv2: mov al,cs:defpal[bx] + inc bx + out dx,al + loop iv2 + + mov ax,cs:vram + mov es,ax + cld + mov di,0 + mov ax,0720h + mov cx,4000/2 + rep stosw + ;no flash + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,10h + out dx,al + mov al,0+0+4+0+0+0+0+0 + out dx,al + mov al,32 + out dx,al + ret +initvideo ENDP + +fromvgaregs PROC NEAR + cld + mov cx,19h + mov ah,0 + mov dx,3d4h +fvr1: mov al,ah + out dx,al + inc dx + in al,dx + stosb + dec dx + inc ah + loop fvr1 + + mov cx,15h + mov ah,0 +fvr2: mov dx,3dah + in al,dx + mov dx,3c0h + mov al,ah + out dx,al + inc dx + in al,dx + dec dx + stosb + inc ah + loop fvr2 + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,32 + out dx,al + + mov cx,9h + mov ah,0 + mov dx,3ceh +fvr3: mov al,ah + out dx,al + inc dx + in al,dx + stosb + dec dx + inc ah + loop fvr3 + + mov cx,4h + mov ah,1 ;0/bit 1=syncr. clear (0=halt) + mov dx,3c4h +fvr4: mov al,ah + out dx,al + inc dx + in al,dx + stosb + dec dx + inc ah + loop fvr4 + + ;Misc output 1: outp:3C2h inp:3CCh + mov dx,3cch + in al,dx + stosb + + ret +fromvgaregs ENDP + +tovgaregs PROC NEAR + cld + mov dx,3c4h + mov ax,1*256+0 + out dx,ax + + mov dx,3d4h + mov al,11h + mov ah,ds:[si+11h] + and ah,127 + out dx,ax + + mov cx,19h + mov ah,0 + mov dx,3d4h +tvr1: mov al,ah + out dx,al + inc dx + lodsb + out dx,al + dec dx + inc ah + loop tvr1 + + mov cx,15h + mov ah,0 +tvr2: mov dx,3dah + in al,dx + mov dx,3c0h + mov al,ah + out dx,al + lodsb + out dx,al + inc ah + loop tvr2 + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,32 + out dx,al + + mov cx,9h + mov ah,0 + mov dx,3ceh +tvr3: mov al,ah + out dx,al + inc dx + lodsb + out dx,al + dec dx + inc ah + loop tvr3 + + mov cx,4h + mov ah,1 ;0/bit 1=syncr. clear (0=halt) + mov dx,3c4h +tvr4: mov al,ah + out dx,al + inc dx + lodsb + out dx,al + dec dx + inc ah + loop tvr4 + + ;Misc output 1: outp:3C2h inp:3CCh + lodsb + mov dx,3c2h + out dx,al + + mov dx,3c4h + mov ax,3*256+0 + out dx,ax + ret +tovgaregs ENDP + +printl PROC NEAR + push ax + push bx + push cx + push ds + push es + push di + push si + push cs + pop ds + mov es,cs:vram + mov di,bx + and di,255 + shl di,1 + mov bl,bh + xor bh,bh + shl bx,1 + add di,cs:rows[bx] + cld + mov ah,al +prl2: lodsb + stosw + loop prl2 +prl1: pop si + pop di + pop es + pop ds + pop cx + pop bx + pop ax + ret +printl ENDP + +print PROC NEAR + push ax + push bx + push ds + push es + push di + push si + push cs + pop ds + mov es,cs:vram + mov di,bx + and di,255 + shl di,1 + mov bl,bh + xor bh,bh + shl bx,1 + add di,cs:rows[bx] + cld + mov ah,al +prn2: lodsb + cmp al,0 + je prn1 + stosw + jmp prn2 +prn1: pop si + pop di + pop es + pop ds + pop bx + pop ax + ret +print ENDP + +print2 PROC NEAR + push ax + push bx + push dx + push ds + push es + push di + push si + push cs + pop ds + mov dx,ax + mov es,cs:vram + mov di,bx + and di,255 + shl di,1 + mov bl,bh + xor bh,bh + shl bx,1 + add di,cs:rows[bx] + cld +prn22: mov ah,dh + lodsb + cmp al,0 + je prn21 + jl prn23 + mov ah,dl +prn23: stosw + jmp prn22 +prn21: pop si + pop di + pop es + pop ds + pop dx + pop bx + pop ax + ret +print2 ENDP + +print3 PROC NEAR + push ax + push bx + push dx + push ds + push es + push di + push si + push cs + pop ds + mov dx,ax + mov es,cs:vram + mov di,bx + and di,255 + shl di,1 + mov bl,bh + xor bh,bh + shl bx,1 + add di,cs:rows[bx] + cld +prnr22: mov ah,dl + lodsb + cmp al,0 + je prnr21 + cmp al,32 + jne prnr23 + mov ah,dh +prnr23: stosw + jmp prnr22 +prnr21: pop si + pop di + pop es + pop ds + pop dx + pop bx + pop ax + ret +print3 ENDP + +printhex16 PROC NEAR + push ax + mov al,ah + call printhex + pop ax + call printhex + ret +printhex16 ENDP + +hextxt db '0123456789ABCDEFabcdef' +hexnum db 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,10,11,12,13,14,15 + +printhex PROC NEAR + push ax + push cx + push dx + push es + mov es,cs:vram + push ax + mov cl,4 + shr al,cl + mov ah,dl + mov bl,al + xor bh,bh + mov al,cs:hextxt[bx] + stosw + pop ax + and al,15 + mov ah,dl + mov bl,al + xor bh,bh + mov al,cs:hextxt[bx] + stosw + pop es + pop dx + pop cx + pop ax + ret +printhex ENDP + +getmousepnt PROC NEAR + ;returns ES:DI to mouse position + mov es,cs:vram + mov di,cs:mousey + shl di,1 + mov di,cs:rows[di] + add di,cs:mousex + add di,cs:mousex + ret +getmousepnt ENDP + + ;0 1 2 3 4 5 6 7 + ;01234567890123456789012345678901234567890123456789012345678901234567890123456789 +titlebar db " Future-Multi-Grabber-Menu V1.0 Copyright (C) 1991 ÀÅÙ/FC I'm alive: ",0 +hexdump1 LABEL BYTE + db "ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß",0 +hexdump2 LABEL BYTE + db " Ú",24,24,"¿ " + db " ÀÄÄÙ " + db " ÚGO¿ " + db " ÀTOÙ " + db " ÚFI¿ " + db " ÀNDÙ " + db " ÚÄÄ¿ " + db " À",25,25,"Ù " + db 0 +keyboard0 LABEL BYTE + db "ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ",0 +editstr LABEL BYTE + db " String: ",0 +keyboard1 LABEL BYTE + db " ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ " + db " ³ 7 ³ 8 ³ 9 ³ 0 ³³ Q ³ W ³ E ³ R ³ T ³ Y ³ U ³ I ³ O ³ P ³ ³*1 Exit FMGM ³ " + db " ÃÄÄÄÅÄÄÄÅÄÄÄÅÄÄÄ´ÀÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÄÄÁÂÂÄÁÄ¿ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ " + db " ³ 4 ³ 5 ³ 6 ³ + +char far *vram=(char far *)0xa0000000L; + +main() +{ + unsigned int u; + int xit=0; + int a,b,c; + FILE *f1; + f1=fopen("anim.fca","rb"); + _asm mov ax,13h + _asm int 10h + outp(0x3c8,0); + for(a=0;a<768;a++) outp(0x3c9,getc(f1)); + while(!kbhit() && !xit) + { + u=0; + for(;;) + { + a=getc(f1); + if(a==254) { xit=1; break; } + else if(a==255) break; + else + { + u+=a; + c=getc(f1); + while(c--) vram[u++]=getc(f1); + } + } + } + fclose(f1); +} diff --git a/GRAB/FLIC/SHOW.EXE b/GRAB/FLIC/SHOW.EXE new file mode 100644 index 0000000..6c2aa42 Binary files /dev/null and b/GRAB/FLIC/SHOW.EXE differ diff --git a/GRAB/FLIC/VF b/GRAB/FLIC/VF new file mode 100644 index 0000000..adb0b58 --- /dev/null +++ b/GRAB/FLIC/VF @@ -0,0 +1,3 @@ +vf.exe : vf.c + qcl /AL vf.c + \ No newline at end of file diff --git a/GRAB/FLIC/VF.C b/GRAB/FLIC/VF.C new file mode 100644 index 0000000..1441eda --- /dev/null +++ b/GRAB/FLIC/VF.C @@ -0,0 +1,369 @@ +#include +#include +#include + +unsigned char far *vram=(char far *)0xa0000000; + +int blocksleft=999; + +int wid,hig,pics; + +long cnt[256]; +char lookup[256]; + +char palette[768]; +char ownpal[768]; + +int docoltable; +int colorlookup; +int oktoviewpal; +int useownpal; +int savefcp; + +FILE *out; + +main(int argc,char *argv[]) +{ + int a; + FILE *f1; + out=fopen("fcp","wb"); + if(out==NULL) return(0); + f1=fopen(argv[1],"rb"); + if(f1==NULL) return(0); + _asm mov ax,19 + _asm int 10h + + for(a=0;a<256;a++) lookup[a]=a; + docoltable=1; + oktoviewpal=0; + useownpal=0; + savefcp=0; + rewind(f1); readflic(f1,0); + + { + long ol,l; + int a; + ol=hig*(wid+8)+10+2; + fprintf(out,"FCP\x1a"); + putc(0x10,out); + putc(0x01,out); + putw(pics,out); + for(a=0;a>16,out); + } + } + donewpalette(256-32,31); + for(a=0;a<768;a++) + { + putc(ownpal[a],out); + } + docoltable=0; + oktoviewpal=1; + useownpal=1; + savefcp=1; + rewind(f1); readflic(f1,0); + + _asm mov ax,3 + _asm int 10h + fclose(f1); +} + +int brightcmp(unsigned char *s1,unsigned char *s2) +{ + int v1,v2; + v1=*s1+*(s1+1)+*(s1+2); + v2=*s2+*(s2+1)+*(s2+2); + if(v1v2) return(1); + else return(0); +} + +int donewpalette(int first,int num) +{ + int cc,c,c2,a; + int d,rr,gg,bb; + long ba; + int bi,bd; + memset(ownpal,0,768); + for(cc=0;ccba) + { + ba=cnt[c]; + bi=c; + } + } + cnt[bi]=0; + memcpy(ownpal+cc*3,palette+bi*3,3); + } + /* sort by brightness/move */ + qsort(ownpal,num,3,brightcmp); + /* create lookup index */ + for(cc=0;cc<256;cc++) + { + bi=0; bd=32767; + rr=palette[cc*3+0]; + gg=palette[cc*3+1]; + bb=palette[cc*3+2]; + if(rr==0 && gg==0 && bb==0) lookup[cc]=0; + else + { + for(c=0;c>4)*3+320-48+((a&15)*3+200-48)*320; + vram[u]=a; + vram[u+1]=a; + vram[u+2]=a; + vram[320+u]=a; + vram[320+u+1]=a; + vram[320+u+2]=a; + vram[640+u]=a; + vram[640+u+1]=a; + vram[640+u+2]=a; + } +} + +int doblock(FILE *f1,unsigned type) +{ + if((type==0x000b || type==0x0004) && useownpal) + { + int a; + outp(0x3c8,0); + for(a=0;a<768;a++) outp(0x3c9,ownpal[a]); + if(oktoviewpal) viewpal(); + return(0); + } + if(type==0x000b) + { + int a,c,d; + c=getc(f1)*256; /* count */ + c+=getc(f1); + c*=3; + a=getc(f1)*256; /* first */ + a+=getc(f1); + outp(0x3c8,a); + for(a=0;a>2)); + if(oktoviewpal) viewpal(); + } + else if(type==0x000c) + { + int a,b,c,lc,cc,cm,lb,le,lad; + long l; + unsigned int u; + lb=getw(f1); + le=lb+getw(f1); + for(lc=lb;lc +#include +#include + +unsigned char far *vram=(char far *)0xa0000000; + +int blocksleft=999; + +int wid,hig,pics; + +long cnt[256]; +char lookup[256]; + +char palette[768]; +char ownpal[768]; + +int docoltable; +int colorlookup; +int oktoviewpal; +int useownpal; +int savefcp; + +FILE *out; + +main(int argc,char *argv[]) +{ + int a; + FILE *f1; + f1=fopen(argv[1],"rb"); + if(f1==NULL) return(0); + _asm mov ax,19 + _asm int 10h + + for(a=0;a<256;a++) lookup[a]=a; + + docoltable=1; + oktoviewpal=0; + useownpal=0; + savefcp=0; + rewind(f1); readflic(f1,0); + + donewpalette(256-32,31); + docoltable=0; + oktoviewpal=1; + useownpal=1; + savefcp=1; + rewind(f1); readflic(f1,0); + + _asm mov ax,3 + _asm int 10h + fclose(f1); +} + +int brightcmp(unsigned char *s1,unsigned char *s2) +{ + int v1,v2; + v1=*s1+*(s1+1)+*(s1+2); + v2=*s2+*(s2+1)+*(s2+2); + if(v1v2) return(1); + else return(0); +} + +int donewpalette(int first,int num) +{ + int cc,c,c2,a; + int d,rr,gg,bb; + long ba; + int bi,bd; + memset(ownpal,0,768); + for(cc=0;ccba) + { + ba=cnt[c]; + bi=c; + } + } + cnt[bi]=0; + memcpy(ownpal+cc*3,palette+bi*3,3); + } + /* sort by brightness/move */ + qsort(ownpal,num,3,brightcmp); + /* create lookup index */ + for(cc=0;cc<256;cc++) + { + bi=0; bd=32767; + rr=palette[cc*3+0]; + gg=palette[cc*3+1]; + bb=palette[cc*3+2]; + if(rr==0 && gg==0 && bb==0) lookup[cc]=0; + else + { + for(c=0;c>4)*3+320-48+((a&15)*3+200-48)*320; + vram[u]=a; + vram[u+1]=a; + vram[u+2]=a; + vram[320+u]=a; + vram[320+u+1]=a; + vram[320+u+2]=a; + vram[640+u]=a; + vram[640+u+1]=a; + vram[640+u+2]=a; + } +} + +int doblock(FILE *f1,unsigned type) +{ + if((type==0x000b || type==0x0004) && useownpal) + { + int a; + outp(0x3c8,0); + for(a=0;a<768;a++) outp(0x3c9,ownpal[a]); + if(oktoviewpal) viewpal(); + return(0); + } + if(type==0x000b) + { + int a,c,d; + c=getc(f1)*256; /* count */ + c+=getc(f1); + c*=3; + a=getc(f1)*256; /* first */ + a+=getc(f1); + outp(0x3c8,a); + for(a=0;a>2)); + if(oktoviewpal) viewpal(); + } + else if(type==0x000c) + { + int a,b,c,lc,cc,cm,lb,le,lad; + long l; + unsigned int u; + lb=getw(f1); + le=lb+getw(f1); + for(lc=lb;lc + +char far *vram=(char far *)0xa0000000; + +int blocksleft=999; + +int wid,hig,pics; + +main(int argc,char *argv[]) +{ + FILE *f1; + int a; + long len,l,ll; + f1=fopen(argv[1],"rb"); + if(f1==NULL) return(0); + _asm mov ax,19 + _asm int 10h + len=getw(f1); + len+=(long)getw(f1)<<16; + getw(f1); + pics=getw(f1); + wid=getw(f1); + hig=getw(f1); + fseek(f1,0x80L,SEEK_SET); + printf("\n\n\n\n\n\n\n\n\n\n\n"); + for(;;) + { + l=ftell(f1); + l+=(long)getw(f1); + l+=(long)getw(f1)<<16; + a=getw(f1); + if(feof(f1)) break; + if(a==0xf1fa) + { + int a; + blocksleft=getw(f1); + for(a=0;a<8;a++) getc(f1); + ll=l; + } + else + { + doblock(f1,(unsigned)a); + fseek(f1,l,SEEK_SET); + blocksleft--; + if(blocksleft==0) + { + fseek(f1,ll,SEEK_SET); + getch(); + } + } + } + _asm mov ax,3 + _asm int 10h + fclose(f1); +} + +int viewpal(void) +{ + int a; + unsigned u; + for(a=0;a<256;a++) + { + u=(a>>4)*3+320-48+((a&15)*3+200-48)*320; + vram[u]=a; + vram[u+1]=a; + vram[u+2]=a; + vram[320+u]=a; + vram[320+u+1]=a; + vram[320+u+2]=a; + vram[640+u]=a; + vram[640+u+1]=a; + vram[640+u+2]=a; + } +} + +int doblock(FILE *f1,unsigned type) +{ + if(type==0x000b) + { + int a,c,d; + c=getc(f1)*256; /* count */ + c+=getc(f1); + c*=3; + a=getc(f1)*256; /* first */ + a+=getc(f1); + outp(0x3c8,a); + for(a=0;a>2); + viewpal(); + } + else if(type==0x000c) + { + int a,b,c,lc,cc,cm,lb,le,lad; + long l; + unsigned int u; + lb=getw(f1); + le=lb+getw(f1); + for(lc=lb;lc64000 || kbhit()) break; + } + u=0; + } + else if(type==0x0007) + { + int a,b,b1,b2,c,lc,cc,cm,lb,le,lad; + int skipcnt,flag=0; + long l; + unsigned int u; + le=getw(f1); + for(lc=lad=0;lc64000 || kbhit()) break; + } + u=0; + } + else if(type==0x000f) + { + int a,b,c,lc,cc,cm; + long l; + unsigned int u; + for(lc=0;lc64000 || kbhit()) break; + } + u=0; + /*for(a=0;a<200;a+=2) + { + vram[a*320]=15; + vram[a*320+321]=14; + } + for(a=0;a<320;a+=2) + { + vram[a]=15; + vram[a+201]=14; + }*/ + } + else + { + printf("UNKNOWN BLOCK TYPE: %04X\n",type); + getch(); + } +} \ No newline at end of file diff --git a/GRAB/FLIC/VW.C b/GRAB/FLIC/VW.C new file mode 100644 index 0000000..a6a2b56 --- /dev/null +++ b/GRAB/FLIC/VW.C @@ -0,0 +1,233 @@ +/* view flic */ +#include +#include +#include +#include + +int doframe(FILE *f1); +int dochunk(FILE *f1); +int doline1(unsigned u,FILE *f1); +int doline2(unsigned u,FILE *f1); +int saveframe(int frame); + +char far *vram=(char far *)0xa0000000L; + +char buf[64000]; +char pal[768]; +char savebuf[64000]; + +int lw; + +struct +{ + long filesize; + unsigned magic; /* 0xaf11 */ + int frames; + int width; + int heigth; + int RESERVED1; + int flags; /*0*/ + int speed; + long next; /*0*/ + long frit; /*0*/ + char RESERVED2[102]; +} header; + +struct +{ + long size; + unsigned magic; /* 0xf1fa */ + int chunks; + int RESERVED[4]; +} frameheader; + +struct +{ + long size; + unsigned type; +} chunkheader; + +main(int argc,char *argv[]) +{ + FILE *f1; + int f; + f1=fopen(argv[1],"rb"); + if(f1==NULL) return(0); + fread(&header,sizeof(header),1,f1); + lw=header.heigth; + /**/ + _asm mov ax,13h + _asm int 10h + saveframe(-1); + for(f=0;f0) + { + while(b--) vram[u++]=(char)getc(f1); + } + else + { + a=getc(f1); + while(b++) vram[u++]=(char)a; + } + } + return(0); +} + +int doline2(unsigned u,FILE *f1) +{ + int a,b,c; + c=getc(f1); + while(c--) + { + b=(char)getc(f1); + if(b<0) + { + while(b++) vram[u++]=(char)getc(f1); + } + else + { + a=getc(f1); + while(b--) vram[u++]=(char)a; + } + } + return(0); +} + +int saveframe(int frame) +{ + unsigned u,u0,ua; + int a,b,c; + static FILE *fo; + switch(frame) + { + case -1 : /* open */ + fo=fopen("anim.fca","wb"); + break; + case -2 : /* close */ + putc(254,fo); + fclose(fo); + break; + default : /* save */ + if(frame==0) + { + outp(0x3c7,0); + for(a=0;a<768;a++) pal[a]=(char)inp(0x3c9); + memset(savebuf,0,64000U); + fwrite(pal,1,768U,fo); + } + { + for(u0=u=0;u<64000;u++) + { + if(vram[u]!=savebuf[u]) + { + ua=u-u0; + while(ua>253) + { + putc(253,fo); + putc(0,fo); + ua-=253; + } + putc(ua,fo); + for(a=0;a<255 && (unsigned)a+u<64000;a++) + { + if(vram[u+a]==savebuf[u+a]) break; + } + putc(a,fo); + for(b=0;b +#include +#include +#include + +int doframe(FILE *f1); +int dochunk(FILE *f1); +int doline1(unsigned u,FILE *f1); +int doline2(unsigned u,FILE *f1); +int saveframe(int frame); + +char far *vram=(char far *)0xa0000000L; + +char buf[64000]; +char pal[768]; +char savebuf[64000]; + +int lw; + +struct +{ + long filesize; + unsigned magic; /* 0xaf11 */ + int frames; + int width; + int heigth; + int RESERVED1; + int flags; /*0*/ + int speed; + long next; /*0*/ + long frit; /*0*/ + char RESERVED2[102]; +} header; + +struct +{ + long size; + unsigned magic; /* 0xf1fa */ + int chunks; + int RESERVED[4]; +} frameheader; + +struct +{ + long size; + unsigned type; +} chunkheader; + +main(int argc,char *argv[]) +{ + FILE *f1; + int f; + f1=fopen(argv[1],"rb"); + if(f1==NULL) return(0); + fread(&header,sizeof(header),1,f1); + lw=header.width; + /**/ + _asm mov ax,13h + _asm int 10h + saveframe(-1); + for(f=0;f0) + { + while(b--) vram[u++]=(char)getc(f1); + } + else + { + a=getc(f1); + while(b++) vram[u++]=(char)a; + } + } + return(0); +} + +int doline2(unsigned u,FILE *f1) +{ + int a,b,c; + c=getc(f1); + while(c--) + { + b=(char)getc(f1); + if(b<0) + { + while(b++) vram[u++]=(char)getc(f1); + } + else + { + a=getc(f1); + while(b--) vram[u++]=(char)a; + } + } + return(0); +} + +int saveframe(int frame) +{ + unsigned u,u0,ua; + int a,b,c; + static FILE *fo; + switch(frame) + { + case -1 : /* open */ + fo=fopen("anim.fca","wb"); + break; + case -2 : /* close */ + putc(254,fo); + fclose(fo); + break; + default : /* save */ + if(frame==0) + { + outp(0x3c7,0); + for(a=0;a<768;a++) pal[a]=(char)inp(0x3c9); + memset(savebuf,0,64000U); + fwrite(pal,1,768U,fo); + } + { + int x1=160-32-3; + int y1=100-32; + int x2=160+32-3; + int y2=100+32; + int x,y; + for(y=y1;y +#include +#include +#include +#include + +int scan(void); +int doblock(FILE *f1); +int readlbm(FILE *f1); +int showline(int y); + +int bluecol=1; +int backcol=15; + +FILE *out; +long f_off[256]; +char f_wid[256]; +char f_hig[256]; +char f_base[256]; +long averwid; +int avercnt; + +main(int argc,char *argv[]) +{ + int a; + FILE *f1; + if(argc==1) + { + printf("usage: FONT "); + return(0); + } + _setvideomode(_VRES16COLOR); + for(a=0;a<256;a++) + { + f_off[a]=0; + f_wid[a]=0; + f_hig[a]=0; + } + avercnt=0; averwid=0; + out=fopen(argv[2],"wb"); + fwrite(f_off,4,256,out); + fwrite(f_wid,1,256,out); + fwrite(f_hig,1,256,out); + fwrite(f_base,1,256,out); + f1=fopen(argv[1],"rb"); + readlbm(f1); + scan(); + fclose(f1); + fseek(out,0L,SEEK_SET); + averwid/=avercnt; + f_wid[32]=averwid; + f_hig[32]=1; + fwrite(f_off,4,256,out); + fwrite(f_wid,1,256,out); + fwrite(f_hig,1,256,out); + fwrite(f_base,1,256,out); + fclose(out); + _setvideomode(_DEFAULTMODE); +} + +unsigned char linebuf[1024]; +unsigned char pal[768]; + +int showline(int y) +{ + int x; + for(x=0;x<640;x++) + { + _setcolor(linebuf[x]); + _setpixel(x,y); + } + return(0); +} + +int cbits[8]={1,2,4,8,16,32,64,128}; +int lbmmode; /* 1=DPII, 2=DPIIe */ +char *errtxt; +char lasttype[5]; +char type[5]={"----"}; +long len; +int xsz,ysz,planes,stencil,colors,mode; +char lbmtype[4]; +int checktype=0; + +int eschit(void) +{ + if(kbhit()) + { + if(getch()==27) return(1); + } + return(0); +} + +int getaw(FILE *f1) +{ + unsigned int a; + a=getc(f1)*256; + a+=getc(f1); + return(a); +} + +int readlbm(FILE *f1) +{ + int x,y,a,b,c; + long l; + unsigned u; + int firstone=1; + errtxt=NULL; + do + { + memcpy(lasttype,type,5); + /* get header */ + do + { + type[0]=getc(f1); + } + while(type[0]==0 && !feof(f1)); + type[1]=getc(f1); type[2]=getc(f1); type[4]=0; + type[3]=getc(f1); len=getc(f1)*256L*65536L; + if(firstone && memcmp(type,"FORM",4)) return(2); + firstone=0; + len+=getc(f1)*65536L; len+=getc(f1)*256L; len+=getc(f1); + /* process it */ + a=doblock(f1); + if(errtxt!=NULL) + { + printf("%s\n",errtxt); + return(1); + } + if(a==-1) + { + printf("Not a Deluxepaint file!"); + return(2); + } + if(a==2) + { + printf("OLD:<%s> NEW<%s>\n",lasttype,type); + return(1); + } + else if(a==1) break; + } + while(!feof(f1)); + return(0); +} + +int doblock(FILE *f1) +{ /* processes one block */ + long lastpos=ftell(f1); + int a,b,c,d,e,f; + if(!strcmp(type,"CMAP")) + { + /* color map */ + for(b=0;b127) + { + c=getc(f1); + a=256-a; + if(a==0) c=0; + for(b=0;b<=a;b++) linebuf[lp++]=c; + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + linebuf[lp++]=c; + } + } + } + } + showline(y); + y++; + } + return(1); + } + else if(!strcmp(type,"BODY") && lbmmode==1) + { + int lp,cbit,y=0; + while(!eschit() && y127) + { + c=getc(f1); + a=256-a; + if(a==0) c=0; + for(b=0;b<=a;b++) + { + linebuf[lp++]|=c&128?cbit:0; + linebuf[lp++]|=c&64?cbit:0; + linebuf[lp++]|=c&32?cbit:0; + linebuf[lp++]|=c&16?cbit:0; + linebuf[lp++]|=c&8?cbit:0; + linebuf[lp++]|=c&4?cbit:0; + linebuf[lp++]|=c&2?cbit:0; + linebuf[lp++]|=c&1?cbit:0; + } + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + linebuf[lp++]|=c&128?cbit:0; + linebuf[lp++]|=c&64?cbit:0; + linebuf[lp++]|=c&32?cbit:0; + linebuf[lp++]|=c&16?cbit:0; + linebuf[lp++]|=c&8?cbit:0; + linebuf[lp++]|=c&4?cbit:0; + linebuf[lp++]|=c&2?cbit:0; + linebuf[lp++]|=c&1?cbit:0; + } + } + } + } + if(stencil) for(lp=0;lp127) + { + c=getc(f1); + a=256-a; + lp+=a*8+8; + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + } + lp+=a*8+8; + } + } + showline(y); + y++; + } + return(1); + } + else if(checktype) + { + return(2); + } + fseek(f1,lastpos+len,SEEK_SET); + return(0); +} + +int letter(int chr,int x,int y) +{ + int basey; + int x1,y1,x2,y2,a,c=1; + x1=x2=x; y1=y2=y; + /* expand box */ + while(c) + { + c=0; + for(a=x1;a<=x2;a++) + { + if(y1>=0 && _getpixel(a,y1)!=backcol) { y1--; c=1; } + if(y2<=479 && _getpixel(a,y2)!=backcol) { y2++; c=1; } + } + for(a=y1;a<=y2;a++) + { + if(x1>=0 && _getpixel(x1,a)!=backcol) { x1--; c=1; } + if(x2<=639 && _getpixel(x2,a)!=backcol) { x2++; c=1; } + } + if(x1<=0 || y1<=0 || x2>=639 || y2>=479) exit(1); + } + basey=y-y1; + /* erase blue */ + for(y=y1;y<=y2;y++) + for(x=x1;x<=x2;x++) + { + if(_getpixel(x,y)==bluecol) + { + _setcolor(backcol); + _setpixel(x,y); + } + } + /* save font */ + { + avercnt++; + averwid+=x2-x1+1; + f_wid[chr]=x2-x1+1; + f_hig[chr]=y2-y1+1; + f_base[chr]=basey; + f_off[chr]=ftell(out); + for(y=y1;y<=y2;y++) + for(x=x1;x<=x2;x++) + { + if(_getpixel(x,y)!=backcol) putc(1,out); + else putc(0,out); + } + } + /* erase box */ + _setcolor(backcol); + _rectangle(_GFILLINTERIOR,x1,y1,x2,y2); + return(0); +} + +unsigned char order[256]={ +"!\"#$%&'()*+,-./0123456789:;<=>?" +"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" +"`abcdefghijklmnopqrstuvwxyz{|}~" +"Ž™†„”" +"àáâãäåæçèéêëìíîï"}; +int scan(void) +{ + int y,x,a=0; + for(y=0;y<480;y++) if((bluecol=_getpixel(0,y))!=backcol) + { + for(x=1;x<640;x++) if(_getpixel(x,y)!=backcol) + { + if(letter(order[a++],x,y)) return(1); + } + } + return(0); +} diff --git a/GRAB/FONT/FONT2.C b/GRAB/FONT/FONT2.C new file mode 100644 index 0000000..3181950 --- /dev/null +++ b/GRAB/FONT/FONT2.C @@ -0,0 +1,148 @@ +/* font converter */ + +#include +#include +#include +#include + +unsigned char wid[256]; +unsigned char hig[256]; +unsigned char basey[256]; +unsigned long off[256]; + +unsigned doff[256]; +unsigned dwid[256]; + +unsigned int base,min,max,ylen; + +#define LY 100 +#define LX 100 +char fnt[LX*LY]; +unsigned char fntwid; +char empty; + +int readfont(FILE *f1,int a) +{ + unsigned int x,y; + fntwid=wid[a]; + memset(fnt,0,LX*LY); + empty=1; + if(!off[a]) return(0); + empty=0; + fseek(f1,off[a],SEEK_SET); + for(y=0;y "); + return(0); + } + f1=fopen(argv[1],"rb"); + f2=fopen(argv[2],"wb"); + fread(off,4,256,f1); + fread(wid,1,256,f1); + fread(hig,1,256,f1); + fread(basey,1,256,f1); + for(min=max=a=0;a<256;a++) if(off[a]) + { + b=hig[a]-basey[a]; + if(b>max) max=b; + b=basey[a]; + if(b>min) min=b; + } + max--; + ylen=(max+min+7)/8; + base=(ylen*8-(max+min))/2+min; + printf("Maximum heigth: %i\nBase up:%i\nBase down:%i\n", + max+min,min,max); + printf("Heigth in charachters: %i\nBase line in pixels: %i\n", + ylen,base); + fseek(f2,1024L+16L,SEEK_SET); + for(a=0;a<256;a++) + { + printf("Processing charachter %i...\r",a); + readfont(f1,a); + convert(f2,a); + } + fseek(f2,0L,SEEK_SET); + fprintf(f2,"BIGFONT\x01a"); + putw(ylen,f2); + putw(0,f2); + putw(0,f2); + putw(0,f2); + fwrite(doff,2,256,f2); + fwrite(dwid,2,256,f2); + fclose(f2); + fclose(f1); + return(0); +} + +/* + +file format for destination font file: + +text: "BIGFONT",0x1b +word: charachter rows +word: - +word: - +word: - +256 times: word: offset (0 for letter not in file) +256 times: word: width + +*/ diff --git a/GRAB/FONT/HELV.LBM b/GRAB/FONT/HELV.LBM new file mode 100644 index 0000000..9211308 Binary files /dev/null and b/GRAB/FONT/HELV.LBM differ diff --git a/GRAB/FONT/PRINT.C b/GRAB/FONT/PRINT.C new file mode 100644 index 0000000..ee04e49 --- /dev/null +++ b/GRAB/FONT/PRINT.C @@ -0,0 +1,136 @@ +#include +#include +#include + +#define LINEWIDTH 960 /* printterin rivill„ pisteit„ */ +#define MAXHEIGTH 8 /* maksimi korkeus merkeille */ +#define BUFFERSIZE 32000 /* tila fonttidatalle */ +#define HEADERLENGTH 0x410 /* alkutauluk. pituus ennen varsinaista dataa */ + +unsigned char fontdata[BUFFERSIZE]; /* file mahtuu varmasti */ +int heigth; /* korkeus merkeiss„ */ +int offset[256]; /* jokaisen fontin alkupaikka fileess„ */ +int width[256]; /* jokaisen fontin leveys (pixeleiss„) */ +int spacing=-1; /* lis„v„li merkkien v„liss„ */ + +unsigned char linebuf[MAXHEIGTH][LINEWIDTH]; + +int readfont(char *file) +{ + int a; + FILE *f1; + f1=fopen(file,"rb"); /* read binary */ + /* onko headerin teksti ok? */ + if(fgetc(f1)!='B') return(1); + if(fgetc(f1)!='I') return(1); + if(fgetc(f1)!='G') return(1); + if(fgetc(f1)!='F') return(1); + if(fgetc(f1)!='O') return(1); + if(fgetc(f1)!='N') return(1); + if(fgetc(f1)!='T') return(1); + getc(f1); + /* on, korkeus? */ + heigth=getw(f1); /* word - korkeus */ + a=getw(f1); /* word - ylim. v„li */ + if(spacing==-1) spacing=a; /* aseta jos ei jo asetettu */ + getw(f1); /* unused */ + getw(f1); /* unused */ + /* lue offset/width taulukot */ + for(a=0;a<256;a++) offset[a]=getw(f1); + for(a=0;a<256;a++) width[a]=getw(f1); + /* lue data */ + fread(fontdata,1,BUFFERSIZE,f1); + /* valmista tuli */ + fclose(f1); + return(0); +} + +int printtext(unsigned char *txt) +{ + FILE *prn; + int a,b; + int o,w; + int x=0; /* pixelipaikka rivill„ */ + memset(linebuf,0,MAXHEIGTH*LINEWIDTH); + while(*txt) + { /* niin kauan kuin merkkej„ riitt„„*/ + a=(unsigned)*txt; txt++; /* a=merkki, seuraava merkki valmiiksi */ + o=offset[a]; /* merkin osoite fileess„ */ + if(o==0) o=-1; /* merkill„ ei ole dataa (tyhj„„ t„ynn„) */ + else o-=HEADERLENGTH; /* osoite fontdatassa (joka alkaa + filen kohdasta HEADERLENGTH) */ + w=width[a]; /* leveys */ + if(w+x>LINEWIDTH) break; /* rivi loppui, ulos whilesta */ + /* kopio merkki rivibufferiin (jos offset==-1, niin kirjain + on tyhj„„ t„ynn„ (space etc.) */ + if(o!=-1) for(b=0;b] [/S] \"text\"\n"); + return(0); + } + *txt=0; + for(a=1;a ? + @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ + ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ + Ž ™ † „ ” + Jos viel„ t„m„n j„lkeen tulee merkkej„, ne asettuvat kreikkalaisten + kirjainten p„„lle (ASCII 224..239). + Koska Spacea ei voi m„„ritell„, olettaa konvertteri sen olevan tyhj„ + merkki ja asettaa sen leveydeksi kaikkien merkkien leveyden keskiarvon + (toimii hyvin). T„t„ voi viritt„„ muuttamalla spacen leveytt„ + fonttitiedostosta (offset 16+256*2+32*2=592=250h). +* Jokaisen kirjainrivin peruslinjan kohdalle (esim kirjainten + alareuna) on ruudun vasempaan reunaan laitettava piste (v„ri + joku muu kuin 0/15). T„m„ piste synkronisoi fontit samalle + riville, esim 1 (* kyseist„ v„ri„): + ESIM1....................... ...................ÛÛ............ + ...........Û......Û......... .....ÛÛ**..**ÛÛ....ÛÛ............ + ......ÛÛÛ..Û................ ........ÛÛÛÛ......ÛÛ............. + .....Û...Û.ÛÛÛ....Û......... .......Û....Û......*............. + .....ÛÛÛÛÛ.Û..Û...Û......... .......Û....Û......*............. + *....Û...Û.ÛÛÛ....Û......... .......Û....Û......*............. + ................ÛÛ.......... ........ÛÛÛÛ.......*............. + ............................ ............................ESIM2 +* Jos kirjaimissa on irtaimia osia, tulee ne yhdist„„ samalla v„rill„ + jolla ruudun vasemman reunan piste piirrettiin. Esim 2 yl„puolella. +* Kaikkien merkkien tulee my”s ulottua peruslinjalle asti. Jollei + n„in ole, voidaan merkki„ 'jatkaa' yhdistysv„rill„ (esim 2). +* Fonttia muunnettaessa yhdistysv„ri katoaa; se ei siis h„iritse + tulostusta. + +* Kun kuva on talletettu, kopioidaan se t„h„n hakemistoon ja ajetaan + dofont: DOFONT + /S +Oletukset: fontinnimi=DEFAULT.FNT + lis„tyhj„=0 +Maksimit: fonttitiedoston koko 30000 tavua + + + + +.FNT tiedoston formaatti: + +8 bytes: "BIGFONT",1ah +1 word: fontin korkeus merkeiss„ (1 merkki=8 pikseli„) +1 word: lis„v„lityhj„n oletusarvo (nyky„„n aina 0lla) +1 word: 0 +1 word: 0 +Seuraavissa taulukoissa indeksin„ k„ytet„„n fontin (ASCII) numeroa: +256 words: merkin osoite tiedostossa (tavuja alusta) +256 words: merkin leveys (pikseli„) + bytes: merkkidata + + +C-sorsien k„„nt„minen (%=sorsan nimi): +cl /W3 /AL /qc %.c tai qcl /AL %.c diff --git a/GRAB/FONT/ST3LOGO.BIN b/GRAB/FONT/ST3LOGO.BIN new file mode 100644 index 0000000..edc16f9 Binary files /dev/null and b/GRAB/FONT/ST3LOGO.BIN differ diff --git a/GRAB/FONT/TIMES.LBM b/GRAB/FONT/TIMES.LBM new file mode 100644 index 0000000..18dfe33 Binary files /dev/null and b/GRAB/FONT/TIMES.LBM differ diff --git a/GRAB/FONT/TMP b/GRAB/FONT/TMP new file mode 100644 index 0000000..3385468 Binary files /dev/null and b/GRAB/FONT/TMP differ diff --git a/GRAB/FONT/TOBM.C b/GRAB/FONT/TOBM.C new file mode 100644 index 0000000..4519d0c --- /dev/null +++ b/GRAB/FONT/TOBM.C @@ -0,0 +1,433 @@ +#include +#include +#include +#include +#include + +int scan(void); +int doblock(FILE *f1); +int readlbm(FILE *f1); +int showline(int y); + +int bluecol=1; +int backcol=15; + +char tablex[256]; +char tabley[256]; +int tablep=0; + +FILE *out; +long f_off[256]; +char f_wid[256]; +char f_hig[256]; +char f_base[256]; +long averwid; +int avercnt; + +main(int argc,char *argv[]) +{ + int a; + FILE *f1; + if(argc==1) + { + printf("usage: FONT "); + return(0); + } + _setvideomode(_VRES16COLOR); + for(a=0;a<256;a++) + { + f_off[a]=0; + f_wid[a]=0; + f_hig[a]=0; + } + avercnt=0; averwid=0; + out=fopen(argv[2],"wb"); + putw(0x1a1a,out); + putw(tablep,out); + fwrite(tablex,1,256,out); + fwrite(tabley,1,256,out); + f1=fopen(argv[1],"rb"); + readlbm(f1); + { + char buf[64]; + int x0,y0,x,y,a; + for(y0=2;y0<7*8-2;y0+=8) + for(x0=0;x0<56*8;x0+=8) + { + for(a=x=0;x<8;x++) for(y=0;y<8;y++) + { + if((buf[x+y*8]=_getpixel(x0+x,y0+y))==0) a=1; + } + if(a) + { + tablex[tablep]=x0/8; + tabley[tablep++]=(y0-2)/8; + for(y=0;y<8;y++) + { + for(a=x=0;x<8;x++) + { + if(!buf[x+y*8]) a+=128>>x; + } + putc(a,out); + } + _setcolor(15); + } + else _setcolor(8); + _setpixel(x0,y0); + } + } + getch(); + fclose(f1); + fseek(out,0L,SEEK_SET); + putw(0x1a1a,out); + putw(tablep,out); + fwrite(tablex,1,256,out); + fwrite(tabley,1,256,out); + fclose(out); + _setvideomode(_DEFAULTMODE); + printf("tablecount:%i",tablep); +} + +unsigned char linebuf[1024]; +unsigned char pal[768]; + +int showline(int y) +{ + int x; + for(x=0;x<640;x++) + { + _setcolor(linebuf[x]); + _setpixel(x,y); + } + return(0); +} + +int cbits[8]={1,2,4,8,16,32,64,128}; +int lbmmode; /* 1=DPII, 2=DPIIe */ +char *errtxt; +char lasttype[5]; +char type[5]={"----"}; +long len; +int xsz,ysz,planes,stencil,colors,mode; +char lbmtype[4]; +int checktype=0; + +int eschit(void) +{ + if(kbhit()) + { + if(getch()==27) return(1); + } + return(0); +} + +int getaw(FILE *f1) +{ + unsigned int a; + a=getc(f1)*256; + a+=getc(f1); + return(a); +} + +int readlbm(FILE *f1) +{ + int x,y,a,b,c; + long l; + unsigned u; + int firstone=1; + errtxt=NULL; + do + { + memcpy(lasttype,type,5); + /* get header */ + do + { + type[0]=getc(f1); + } + while(type[0]==0 && !feof(f1)); + type[1]=getc(f1); type[2]=getc(f1); type[4]=0; + type[3]=getc(f1); len=getc(f1)*256L*65536L; + if(firstone && memcmp(type,"FORM",4)) return(2); + firstone=0; + len+=getc(f1)*65536L; len+=getc(f1)*256L; len+=getc(f1); + /* process it */ + a=doblock(f1); + if(errtxt!=NULL) + { + printf("%s\n",errtxt); + return(1); + } + if(a==-1) + { + printf("Not a Deluxepaint file!"); + return(2); + } + if(a==2) + { + printf("OLD:<%s> NEW<%s>\n",lasttype,type); + return(1); + } + else if(a==1) break; + } + while(!feof(f1)); + return(0); +} + +int doblock(FILE *f1) +{ /* processes one block */ + long lastpos=ftell(f1); + int a,b,c,d,e,f; + if(!strcmp(type,"CMAP")) + { + /* color map */ + for(b=0;b127) + { + c=getc(f1); + a=256-a; + if(a==0) c=0; + for(b=0;b<=a;b++) linebuf[lp++]=c; + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + linebuf[lp++]=c; + } + } + } + } + showline(y); + y++; + } + return(1); + } + else if(!strcmp(type,"BODY") && lbmmode==1) + { + int lp,cbit,y=0; + while(!eschit() && y127) + { + c=getc(f1); + a=256-a; + if(a==0) c=0; + for(b=0;b<=a;b++) + { + linebuf[lp++]|=c&128?cbit:0; + linebuf[lp++]|=c&64?cbit:0; + linebuf[lp++]|=c&32?cbit:0; + linebuf[lp++]|=c&16?cbit:0; + linebuf[lp++]|=c&8?cbit:0; + linebuf[lp++]|=c&4?cbit:0; + linebuf[lp++]|=c&2?cbit:0; + linebuf[lp++]|=c&1?cbit:0; + } + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + linebuf[lp++]|=c&128?cbit:0; + linebuf[lp++]|=c&64?cbit:0; + linebuf[lp++]|=c&32?cbit:0; + linebuf[lp++]|=c&16?cbit:0; + linebuf[lp++]|=c&8?cbit:0; + linebuf[lp++]|=c&4?cbit:0; + linebuf[lp++]|=c&2?cbit:0; + linebuf[lp++]|=c&1?cbit:0; + } + } + } + } + if(stencil) for(lp=0;lp127) + { + c=getc(f1); + a=256-a; + lp+=a*8+8; + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + } + lp+=a*8+8; + } + } + showline(y); + y++; + } + return(1); + } + else if(checktype) + { + return(2); + } + fseek(f1,lastpos+len,SEEK_SET); + return(0); +} + +int letter(int chr,int x,int y) +{ + int basey; + int x1,y1,x2,y2,a,c=1; + x1=x2=x; y1=y2=y; + /* expand box */ + while(c) + { + c=0; + for(a=x1;a<=x2;a++) + { + if(y1>=0 && _getpixel(a,y1)!=backcol) { y1--; c=1; } + if(y2<=479 && _getpixel(a,y2)!=backcol) { y2++; c=1; } + } + for(a=y1;a<=y2;a++) + { + if(x1>=0 && _getpixel(x1,a)!=backcol) { x1--; c=1; } + if(x2<=639 && _getpixel(x2,a)!=backcol) { x2++; c=1; } + } + if(x1<=0 || y1<=0 || x2>=639 || y2>=479) exit(1); + } + basey=y-y1; + /* erase blue */ + for(y=y1;y<=y2;y++) + for(x=x1;x<=x2;x++) + { + if(_getpixel(x,y)==bluecol) + { + _setcolor(backcol); + _setpixel(x,y); + } + } + /* save font */ + { + avercnt++; + averwid+=x2-x1+1; + f_wid[chr]=x2-x1+1; + f_hig[chr]=y2-y1+1; + f_base[chr]=basey; + f_off[chr]=ftell(out); + for(y=y1;y<=y2;y++) + for(x=x1;x<=x2;x++) + { + if(_getpixel(x,y)!=backcol) putc(1,out); + else putc(0,out); + } + } + /* erase box */ + _setcolor(backcol); + _rectangle(_GFILLINTERIOR,x1,y1,x2,y2); + return(0); +} + +unsigned char order[256]={ +"!\"#$%&'()*+,-./0123456789:;<=>?" +"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" +"`abcdefghijklmnopqrstuvwxyz{|}~" +"Ž™†„”" +"àáâãäåæçèéêëìíîï"}; +int scan(void) +{ + int y,x,a=0; + for(y=0;y<480;y++) if((bluecol=_getpixel(0,y))!=backcol) + { + for(x=1;x<640;x++) if(_getpixel(x,y)!=backcol) + { + if(letter(order[a++],x,y)) return(1); + } + } + return(0); +} diff --git a/GRAB/GFX.C b/GRAB/GFX.C new file mode 100644 index 0000000..7ce5131 --- /dev/null +++ b/GRAB/GFX.C @@ -0,0 +1,174 @@ +#include +#include + +char *filename=""; +int cmd=1,firstsrc=0; + +unsigned segs[256]; +int segp; + +main(int argc,char *argv[]) +{ + int a,b,c; + int d1,d2,d3,d4; + FILE *f1; + for(a=1;a Switches:\n" + "-h Help\n" + "-v View contents (in text form) (default)\n" + "-j Join files\n" + ); return(0); + } + else printf("GFX file utility V1.0\n"); + + + if(cmd==2) + { + FILE *out; + int total=0; + int fl; + char fname[64]; + unsigned base; + if(strchr(filename,'.')==NULL) strcat(filename,".GFX"); + out=fopen(filename,"wb"); + if(out==NULL) + { + printf("Error opening file '%s'.\n",filename); + return(1); + } + putc('G',out); + putc('F',out); + putc('X',out); + putc('1',out); + putc('0',out); + putc(0x1a,out); + a=0; + for(fl=firstsrc;fl>4; + strcpy(fname,argv[fl]); + if(strchr(fname,'.')==NULL) strcat(fname,".GFX"); + f1=fopen(fname,"rb"); + fseek(f1,6L,SEEK_SET); + c=getw(f1); + segs[segp++]=base; + b=getw(f1); + for(a=0;a>1) pixels + copy a bytes +} + +**UNPACKED BITMAP FORMAT** +byte reserved +word add to Y to center bitmap +word add to X to center bitmap +word heigth (pixels) +word width (pixels) +byte(s) data from top to bottom, rows from left to right + +**1-BITPLANE PACKED BITMAP FORMAT** +byte reserved +word add to Y to center bitmap +word add to X to center bitmap +word heigth (pixels) +word width (pixels) +bytes(s) packed data, composed of subblocks, read like this: +for(;;) +{ + a=byte + if(a==0) end of picture (or bitplane in 4-bitplane mode) + else if(a>0) skip a bytes + else if(a&1) copy ((a&127)>>1) bytes to screen + else b=byte, write b ((a&127)>>1) times to screen +} + +**4-BITPLANE PACKED BITMAP FORMAT** +byte reserved +word add to Y to center bitmap +word add to X to center bitmap +word heigth (pixels) +word width (pixels) +byte(s) data, like in 1-BITPLANE except that data is saved in + four passes, one for every tweaked mode bitplane. + +**X SPRITE** +byte reserved (0) +word add to Y to center bitmap +word add to X to center bitmap +word heigth (pixels) +word width (pixels) +repeat 4 times (bitplane) +{ + repeat heigth times + { + repeat until end of row + { + b=byte + if(!b) + { + b=byte; + if(b) skip b 8 byte blocks + else end of row + } + else + { + for bits 0..7 in b: + if bit=0, skip pixel + else read byte, write it + } + } + } + next bitplane +} + diff --git a/GRAB/GFX.EXE b/GRAB/GFX.EXE new file mode 100644 index 0000000..7d5ed96 Binary files /dev/null and b/GRAB/GFX.EXE differ diff --git a/GRAB/GFXSAVE.H b/GRAB/GFXSAVE.H new file mode 100644 index 0000000..ee44c54 --- /dev/null +++ b/GRAB/GFXSAVE.H @@ -0,0 +1,336 @@ +/***************************************************************** + Saves gfxdata to file + + variables required from outside: + unsigned char pic[]; ;array to 320x200 1BM + int backcol; ;transparent color + int fcporigo; ;1 if origo in the center of area + int fcporigox,fcporigoy ;if ^=2 then origoxy +*****************************************************************/ + +int writefcporigo(FILE *f1,int x1,int y1,int x2,int y2) +{ + int xl=x2-x1+1,yl=y2-y1+1; + int x,y,a,b,c; + if(fcporigo==3) + { + for(x=x1;x<=x2;x++) for(y=y1;y<=y2;y++) + { + if(vram[x+y*320]==1) + { + putw(-y,f1); + putw(-x,f1); + pic[x+y*320]=vram[x+y*320]=vram[1+x+y*320]; + } + } + } + else if(fcporigo==2) + { + putw(-fcporigoy,f1); + putw(-fcporigox,f1); + } + else if(fcporigo) + { + putw(-(yl+1)/2,f1); + putw(-(xl+1)/2,f1); + } + else + { + putw(0,f1); + putw(0,f1); + } +} + +int savegfxdata(FILE *f1,int x1,int y1,int x2,int y2) +{ + int xl=x2-x1+1,yl=y2-y1+1; + int a,x,y,z,c; + unsigned int u,u2,lastp; + putc(0x01,f1); + putc(0,f1); + if(fcporigo==3) + { + for(x=x1;x<=x2;x++) for(y=y1;y<=y2;y++) + { + if(vram[x+y*320]==1) + { + putw(-y,f1); + putw(-x,f1); + pic[x+y*320]=vram[x+y*320]=vram[1+x+y*320]; + } + } + } + else if(fcporigo==2) + { + putw(-fcporigoy,f1); + putw(-fcporigox,f1); + } + else if(fcporigo) + { + putw(-yl/2,f1); + putw(-xl/2,f1); + } + else + { + putw(0,f1); + putw(0,f1); + } + putw(yl,f1); + putw(xl,f1); + for(z=0;z<4;z++) + { + for(y=y1;y<=y2;y++) + { + u =(unsigned)y*320+(unsigned)x1+(unsigned)z; + u2=(unsigned)y*320+(unsigned)x2; + lastp=u; + while(u<=u2) + { + if(pic[u]==backcol) + { + while(pic[u]==backcol && u<=u2) + { + for(c=0;u<=u2 && c<127 && pic[u]==backcol;u+=4,c++); + if(u<=u2) putc(c,f1); + } + } + if(u>u2) break; + lastp=u; + for(c=1;u<=u2 && c<63 && pic[u]==pic[u+4] && pic[u]!=backcol;u+=4,c++); + if(c>2) + { + putc((c<<1)|0x80,f1); + putc(pic[lastp],f1); + u+=4; + } + else + { + u=lastp; + if((u2-u)+1>2) + { + for(c=0;u<=u2 && c<63 && + (pic[u]!=pic[u+4] || pic[u]!=pic[u+8]) + && pic[u]!=backcol;u+=4,c++); + } + else for(c=0;u<=u2 && c<63 && pic[u]!=backcol;u+=4,c++); + if(c!=0) + { + putc((c<<1)|0x81,f1); + for(a=0;au2) break; + lastp=u; + for(c=1;u2) + { + putc((c<<1)|0x80,f1); + putc(pic[lastp],f1); + u++; + } + else + { + u=lastp; + if((u2-u)+1>2) + { + for(c=0;u<=u2 && c<63 && + (pic[u]!=pic[u+1] || pic[u]!=pic[u+2]) + && pic[u]!=backcol;u++,c++); + } + else for(c=0;u<=u2 && c<63 && pic[u]!=backcol;u++,c++); + if(c!=0) + { + putc((c<<1)|0x81,f1); + for(a=0;a0) + { + a=c*8; + while(a>240) + { + putc(0,f1); + putc(240,f1); + a-=240; + } + if(a) + { + putc(0,f1); + putc(a,f1); + } + c=0; + } + putc(wbuf[0],f1); + for(a=0;a<8;a++) + { + if(wbuf[0]&(1< +#include +#include +#include +#include +#include +#include + +int xit=0; +int showonly=0; +int greycol,blackcol; + +char *palettefname; +char filename[64]; +char basefname[16]={""}; /* 8 chars max */ +char basefname1[16]={""}; /* 7 chars max */ + +union REGS reg; +unsigned char far *vram=(char far *)0xa0000000; + +char apubuf[512]; + +int leftsidedot=0; /* switch for marker */ + +int subpicframe=0; + +unsigned char pal[768]={ +00,00,00, +00,00,40, +00,40,00, +00,40,40, +40,00,00, +40,00,40, +40,20,00, +40,40,40, +20,20,20, +20,20,60, +20,60,20, +20,60,60, +60,20,20, +60,20,60, +60,60,20, +60,60,60, +}; +unsigned char far pic[64000]; +unsigned char far pic2[64000]; +unsigned char far picorg[64000]; +int filetype; /* 1=LBM */ +int backcol=255; + +/* for marktile */ +int customwid=16; +int customhig=16; + +int setback255=0; +int fcp4plane=0; +int fcptransp=1; +int fcporigo=0,fcporigox,fcporigoy; +int fcpsavepal=0; +int fcpstyle=15; /* wing commander style */ +char *fcpstyletxt[16]={ +"0", +"1", +"2", +"3", +"4", +"5", +"6", +"7", +"8", +"9", +"10", +"11", +"12", +"13", +"14", +"FastWing(transp)", +}; + +int savetype=3; +char *savetypetxt[4]={ +"0..9", +"A..Z", +"0..9,A..Z", +"KeyPress"}; +char savenumber[12]={"0123456789*"}; +char saveletter[32]={"ABCDEFGHIJKLMNOPQRSTUVWXYZ*"}; +char saveboth[48]={"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ*"}; + +int markthis=-9; +int savepnt; +int subpics=0; +#define SUBMAX 384 +int subx1[SUBMAX]; +int suby1[SUBMAX]; +int subx2[SUBMAX]; +int suby2[SUBMAX]; + +long picpos[SUBMAX],pics; /* for loading FCP:s */ +unsigned picposu[SUBMAX]; /* for loading FCP:s */ + +int flashycount=0; + +int gfxsubfile; + +int cmdpnt=-1; +char cmdstr[64]; + +int loadformat=0; + +main(int argc,char *argv[]) +{ + int a,b,c; + *filename=0; *basefname=0; + palettefname=NULL; + for(a=1;a9) loadformat+='0'-'A'+11; + break; + case 'o' : switch(*(argv[a]+2)) + { + case '4' : fcp4plane=1; break; + case 'p' : fcpsavepal=1; break; + case '0' : backcol=0; break; + case '9' : backcol=255; break; + } break; + case 't' : switch(*(argv[a]+2)) + { + case 'w' : customwid=atoi(argv[a]+3); break; + case 'h' : customhig=atoi(argv[a]+3); break; + } break; + case 'x' : strcpy(cmdstr,argv[a]+2); cmdpnt=0; break; + case 'c' : setback255=1; break; + case 'p' : palettefname=argv[a]+2; break; + case 'b' : strcpy(basefname,argv[a]+2); break; + case 'g' : gfxsubfile=atoi(argv[a]+2); break; + default : + printf("Unknown option: %s\n",argv[a]); + exit(1); + } + else strcpy(filename,argv[a]); + } + if(!*filename) + { + printf("Great Library View Picture V1.0 Copyright (C) 1991 Sami Tammilehto\n" + "usage: GLVP [switch(es)] Switches:\n" + "-h Help\n" + "-b Set basefilename\n" + "-s# Sets savetype (numbers,letter,both,keywait)\n" + "-o4 Set 4-bitplane to default\n" + "-o0 Set transp. color to 0\n" + "-o9 Set transp. color to 255\n" + "-op Set palettesaving to default\n" + "-c Floodfills background to 255 before loading the pic\n" + "-x Execute keypresses\n" + "-p Load a palette from standard palette file\n" + "-tw# Custom tilewidth (mark command 2)\n" + "-th# Custom tileheigth (mark command 2)\n" + "-f# Specify fileformat: 0=LBM,1=FCP,2=UH,A=CMP(accolade),B=BM,C=4BM\n" + "-g# Specify number of subfile to load\n" + ); return(0); + } + else printf("Great Library View Picture V1.0\n"); + /* make (base)fname(1) & filename */ + for(a=strlen(filename)-1;a>=0 && filename[a]!='\\';a--) if(filename[a]=='.') { a=-9; break; } + if(a!=-9) strcat(filename,".LBM"); + strupr(filename); + if(*basefname==0) + { + char *p=filename; + if(p[1]==':') p+=2; + if(strrchr(p,'\\')==NULL) strcpy(basefname,p); + else strcpy(basefname,strrchr(p,'\\')+1); + *strchr(basefname,'.')=0; + } + basefname[8]=0; + strcpy(basefname1,basefname); + basefname1[7]=0; + + for(a=0;a<16;a++) + { + pal[(a+16)*3+0]=63-a*4; + pal[(a+16)*3+1]=(63-a*4)*3/4; + pal[(a+16)*3+2]=(63-a*4)*3/4; + } + for(a=2;a<16;a++) + { + memcpy(pal+a*16*3,pal+16*3,16*3); + } + pal[255*3+0]=24; + pal[255*3+1]=24; + pal[255*3+2]=32; + if(palettefname!=NULL) + { + FILE *f1; + f1=fopen(palettefname,"rb"); + if(f1==NULL) + { + printf("Palette not found. Program aborted.\n"); + exit(1); + } + fread(pal,3,256,f1); + fclose(f1); + } + /* do some real stuff */ + if(setback255) memset(pic,255,64000); + for(a=2,b=loadformat;b<99 && a==2;b++) + { + switch(b) + { + case 0 : a=loadlbm(filename); break; + case 1 : a=loadfcp(filename); break; + case 2 : a=loaduh(filename); break; + case 3 : a=loadgfx(filename); break; + default : + printf("\nUnknown fileformat! Program aborted.\n"); + return(1); + case 11 : a=loadcmp(filename); break; + case 12 : a=loadu(filename); break; + case 13 : a=loadu4(filename); break; + } + if(a==3) + { + printf("\nFile '%s' not found. Program aborted.\n",filename); + return(0); + } + else if(a==1) + { + printf("\nError loading picture. Program aborted.\n"); + return(0); + } + } + reg.x.ax=0x13; + int86(0x10,®,®); + viewpal(0); + viewpic(0); + greycol=findcol(15,15,24); + blackcol=findcol(0,0,0); + memcpy(picorg,pic,64000); + commands(); + reg.x.ax=0x3; + int86(0x10,®,®); +} + +int printhelp(void) +{ + cls(); + printf("Help screen:\n"); + printf( + " n unmark all pics\n" + " m mark all separate pics\n" + " M mark with left-side-dot-remove\n" + " N mark with blue->backcol\n" + " 6 mark 64x64 pics\n" + " 3 mark 32x32 pics\n" + " 2 mark custom x custom pics\n" + " 1 mark 16x16 pics\n" + " 8 mark 8x8 pics\n" + "\n" + " v save unpacked (with pal+hdr)\n" + " u save unpacked (no header)\n" + " y save unpacked (with header)\n" + " f save FCP (fastwing)\n" + " F save all in one FCP\n" + " g save all in one GFX (4)\n" + " G save all in one GFX (4) w/ pal\n" + " h save all in one GFX (1)\n" + " H save all in one GFX (1) w/ pal\n" + " r save all in one GFX (R)\n" + " R save all in one GFX (R) w/ pal\n" + " x save all in one GFX (X)\n" + " X save all in one GFX (X) w/ pal\n" + " p save palette\n" + "\n--more--"); + getch(); + cls(); + printf( + " ESC/! exit program\n" + " ? this help screen\n" + " i picture information\n" + " I picture palette\n" + "\n" + " T FLAGS; transcol is transparent\n" + " O FLAGS; origo\n" + " A FLAGS; automatic origo (col 1)\n" + " P FLAGS; savepal\n" + " s toggle savename determinations\n" + " 0/9 set background color to 0/255\n" + " D select visual subpiccy-frame\n" + "\n" + ); + printf("\nPress any key to return."); + getch(); +} + +int commands(void) +{ + int x,y,a,b,c; + long l; + unsigned u; + while(!xit) + { + flashycount=0; + if(subpicframe) viewpic(0); + while(!kbhit() && cmdpnt==-1) + { + waitborder(); + flashycount++; + flashycount&=63; + if(!subpicframe) + { + if(flashycount==0) viewpic(0); + if(flashycount==32) viewpic(1); + } + } + if(cmdpnt!=-1) + { + a=cmdstr[cmdpnt++]; + if(a==0) cmdpnt=-1; + } + else + { + a=getch(); if(a==0) a=1000+getch(); + } + switch(a) + { + case '?' : + printhelp(); + viewpic(0); + viewpal(0); + break; + case 'D' : + subpicframe^=1; + break; + case 'O' : fcporigo^=1; + cls(); + printpicinfo(); + viewpal(0); + break; + case 'A' : fcporigo=3; + cls(); + printpicinfo(); + viewpal(0); + break; + case '4' : fcp4plane^=1; + cls(); + printpicinfo(); + viewpal(0); + break; + case 'P' : fcpsavepal^=1; + cls(); + printpicinfo(); + viewpal(0); + break; + case 's' : savetype++; + if(savetype>3) savetype=0; + cls(); + printpicinfo(); + viewpal(0); + break; + case 'i' : + cls(); + printpicinfo(); + getch(); + viewpal(0); + viewpic(0); + break; + case 'I' : + viewpal(0); + viewpic(0); + { + char far *p; + int x,y,a; + for(x=0;x<16;x++) for(y=0;y<16;y++) + { + a=x*16+y; + p=vram+320-48+x*3+(200-48+y*3)*320; + *(p)=a; + *(p+1)=a; + *(p+2)=a; + *(320+p)=a; + *(320+p+1)=a; + *(320+p+2)=a; + *(640+p)=a; + *(640+p+1)=a; + *(640+p+2)=a; + } + } + getch(); + viewpal(0); + viewpic(0); + break; + case 32 : + memcpy(pic,picorg,64000); + viewpal(0); + viewpic(0); + break; + case 27 : + case '!' : + xit=1; + break; + + case 'n' : + subpics=0; + viewpic(0); + break; + case 'm' : + markthis=-9; + viewpic(1); + markall(); + break; + case 'M' : + leftsidedot=1; + markthis=-9; + viewpic(1); + markall(); + leftsidedot=0; + break; + case 'N' : + leftsidedot=2; + markthis=-9; + viewpic(1); + markall(); + leftsidedot=0; + break; + case '8' : + viewpic(1); + marktiles(8,8); + break; + case '1' : + viewpic(1); + marktiles(16,16); + break; + case '2' : + viewpic(1); + marktiles(customwid,customhig); + break; + case '3' : + viewpic(1); + marktiles(32,32); + break; + case '6' : + viewpic(1); + marktiles(64,64); + break; + case '+' : + markthis++; + if(markthis<0) markthis=0; + viewpic(1); + markall(); + break; + case '-' : + markthis--; + if(markthis<0) markthis=0; + viewpic(1); + markall(); + break; + + case '0' : backcol=0; break; + case '9' : backcol=255; break; + + case 'p' : + { + FILE *f1; + strcpy(apubuf,basefname); + strcat(apubuf,".PAL"); + f1=fopen(apubuf,"wb"); + fwrite(pal,3,256,f1); + fclose(f1); + } + break; + case 'u' : /* unpacked w/o header */ + case 'y' : /* unpacked with cheader */ + case 'v' : /* unpacked with palette / header */ + case 'f' : /* fastwing */ + viewpic(1); + savepnt=0; + if(subpics==0) + { + savepnt=-1; + save(a,0,0,319,199); + viewpic(0); + } + else for(b=0;b=0 && pget(a,y1)!=backcol) { y1--; c=1; } + if(y2<=199 && pget(a,y2)!=backcol) { y2++; c=1; } + } + for(a=y1;a<=y2;a++) + { + if(x1>=0 && pget(x1,a)!=backcol) { x1--; c=1; } + if(x2<=319 && pget(x2,a)!=backcol) { x2++; c=1; } + } + if(x1==0 && y1==0 && x2==319 && y2==199) + { + x1=-1; y1=-1; x2=320; y2=200; + c=0; + } + } + if(kbhit()) break; + y1++; y2--; x1++; x2--; + if(leftsidedot) + { + int x,y; + for(x=x1;x<=x2;x++) for(y=y1;y<=y2;y++) + if(pic[x+y*320]==leftsidecol) + { + pic[x+y*320]=backcol; + pset(x,y,backcol); + } + } + area(x1,y1,x2,y2,backcol); + if(markthis==mcc || markthis==-9) + { + if(leftsidedot==2) + { + x1++; y1++; + x2--; y2--; + } + subx1[subpics]=x1; + subx2[subpics]=x2; + suby1[subpics]=y1; + suby2[subpics]=y2; + subpics++; + } + mcc++; + if(subpics>SUBMAX) + { + printf("OVERFLOW!"); + subpics=0; + return(1); + } + } + if(y>1) + { + pset(0,y-2,greycol); + pset(319,y-2,greycol); + pset(1,y-2,blackcol); + pset(318,y-2,blackcol); + } + } + else + { + if(y>1) + { + pset(0,y-2,greycol); + pset(319,y-2,greycol); + pset(1,y-2,blackcol); + pset(318,y-2,blackcol); + } + } + if(kbhit()) subpics=0; + if(subpics==0 && markthis!=-9) markthis=0; + viewpal(0); + viewpic(0); + return(0); +} + +int marktiles(int wid,int hig) +{ + int x,y,x1,y1; + viewpal(1); + subpics=0; + for(y=0;y<=200-hig && !kbhit();y+=hig) for(x=0;x<=320-wid && !eschit();x+=wid) + { + for(y1=y;y1SUBMAX) + { + printf("OVERFLOW!"); + subpics=0; + return(1); + } + } + } + if(kbhit()) subpics=0; + viewpal(0); + viewpic(0); +} + + +int save(int cmd,int x1,int y1,int x2,int y2) +{ + int a,b; + char fname[64]; + char *savestr; + switch(savetype) + { + case 0 : savestr=savenumber; break; + case 1 : savestr=saveletter; break; + case 2 : savestr=saveboth; break; + case 3 : savestr=NULL; break; + } + if(savepnt==-1) strcpy(fname,basefname); + else + { + strcpy(fname,basefname1); + if(savestr==NULL) + { + while(!kbhit()) + { + xorrec(x1,y1,x2,y2); + for(a=0;a<8 && !kbhit();a++) waitborder(); + xorrec(x1,y1,x2,y2); + for(a=0;a<8 && !kbhit();a++) waitborder(); + } + a=getch(); + } + else + { + a=savestr[savepnt++]; + } + if(a=='*' || a==27 || a==32) return(-1); + fname[b=strlen(fname)]=a; + fname[b+1]=0; + } + switch(cmd) + { + case 'u' : + if(saveunp(fname,x1,y1,x2,y2)) return(1); + break; + case 'y' : + if(saveunpheader(fname,x1,y1,x2,y2)) return(1); + break; + case 'v' : + if(saveunpheaderpal(fname,x1,y1,x2,y2)) return(1); + break; + case 'f' : + if(savefcp(fname,x1,y1,x2,y2)) return(1); + break; + case 'g' : + if(savegfx(0,fname,x1,y1,x2,y2)) return(1); + break; + case 'G' : + if(savegfx(1/*incl.pal*/,fname,x1,y1,x2,y2)) return(1); + break; + case 'h' : + if(savegfx1(0,fname,x1,y1,x2,y2)) return(1); + break; + case 'H' : + if(savegfx1(1/*incl.pal*/,fname,x1,y1,x2,y2)) return(1); + break; + case 'r' : + if(savegfx3(0,fname,x1,y1,x2,y2)) return(1); + break; + case 'R' : + if(savegfx3(1/*incl.pal*/,fname,x1,y1,x2,y2)) return(1); + break; + case 'x' : + if(savegfxx(0,fname,x1,y1,x2,y2)) return(1); + break; + case 'X' : + if(savegfxx(1/*incl.pal*/,fname,x1,y1,x2,y2)) return(1); + break; + default : + printf("INTERNAL ERROR: cmd unknown!\n"); + exit(1); + break; + } + area(x1,y1,x2,y2,backcol); + return(0); +} + +int saveunp(char *fname,int x1,int y1,int x2,int y2) +{ + FILE *f1; + int x,y; + strcat(fname,".U"); + f1=fopen(fname,"wb"); + if(f1==NULL) return(1); + for(y=y1;y<=y2;y++) + { + for(x=x1;x<=x2;x++) + { + putc(pic[x+y*320],f1); + } + pxor(x1,y); + pxor(x2,y); + } + fclose(f1); +} + +int saveunpheader(char *fname,int x1,int y1,int x2,int y2) +{ + FILE *f1; + int x,y; + strcat(fname,".UH"); + f1=fopen(fname,"wb"); + if(f1==NULL) return(1); + putw('U'+'H'*256,f1); /* magic */ + putw(1,f1); /* number of pics */ + putw(x2-x1+1,f1); /* width */ + putw(y2-y1+1,f1); /* heigth */ + putw(0,f1); + putw(0,f1); + putw(0,f1); + putw(0,f1); + for(y=y1;y<=y2;y++) + { + for(x=x1;x<=x2;x++) + { + putc(pic[x+y*320],f1); + } + pxor(x1,y); + pxor(x2,y); + } + fclose(f1); +} + +int saveunpheaderpal(char *fname,int x1,int y1,int x2,int y2) +{ + FILE *f1; + int x,y; + strcat(fname,".UH"); + f1=fopen(fname,"wb"); + if(f1==NULL) return(1); + putw('U'+'h'*256,f1); /* magic */ + putw(49,f1); /* paraoffset to pic */ + putw(x2-x1+1,f1); /* width */ + putw(y2-y1+1,f1); /* heigth */ + putw(0,f1); + putw(0,f1); + putw(0,f1); + putw(0,f1); // palette + fwrite(pal,1,768,f1); + for(y=y1;y<=y2;y++) + { + for(x=x1;x<=x2;x++) + { + putc(pic[x+y*320],f1); + } + pxor(x1,y); + pxor(x2,y); + } + fclose(f1); +} + +int savefcp(char *fname,int x1,int y1,int x2,int y2) +{ + int style; + int tx1=x1,ty1=y1,tx2=x2,ty2=y2; + int xl=y2-y1+1,yl=y2-y1+1; + int xo,yo; + int x,y,z,zm=1; + int a,b,c,d,w,wc; + unsigned u; + long tell4,telltbl; + long planepos[4]; + FILE *f1; + if(x1!=-1) pics=1; + else pics=subpics; + strcat(fname,".FCP"); + f1=fopen(fname,"wb"); + if(f1==NULL) return(1); + putc('F',f1); + putc('C',f1); + putc('P',f1); + putc(0x1a,f1); + putc(0x10,f1); /* file ver */ + a=0; + if(fcpsavepal) a|=1; + putc(a,f1); /* single */ + putw(pics,f1); /* single file */ + telltbl=ftell(f1); + fwrite(picpos,4,pics,f1); + if(fcpsavepal) + { + fwrite(pal,256,3,f1); + } + + if(x1==-1) + { + for(a=0;a>4; + putc(0xfe,f1); + fwrite(pal,1,768,f1); + } + for(a=0;a>4; + savegfxdata(f1,subx1[a],suby1[a],subx2[a],suby2[a]); + area(subx1[a],suby1[a],subx2[a],suby2[a],backcol); + } + + fseek(f1,8L,SEEK_SET); + fwrite(picposu,2,pn,f1); + fclose(f1); +} + +int savegfx1(int flags,char *fname,int x1,int y1,int x2,int y2) +{ + FILE *f1; + long fpos1,fpos2; + int pn=0; + int x,y,a,b,c; + strcat(fname,".GFX"); + f1=fopen(fname,"wb"); + if(f1==NULL) return(1); + if(x1!=-1) pics=1; + else pics=subpics; + + putc('G',f1); + putc('F',f1); + putc('X',f1); + putc('1',f1); + putc('0',f1); + putc(0x1a,f1); + + putw(pics+(flags&1),f1); + fwrite(picposu,2,pics,f1); + + if(flags&1) /* save palette */ + { + b=16-((ftell(f1))&15); if(b!=16) for(c=0;c>4; + putc(0xfe,f1); + fwrite(pal,1,768,f1); + } + for(a=0;a>4; + savegfxdata1(f1,subx1[a],suby1[a],subx2[a],suby2[a]); + area(subx1[a],suby1[a],subx2[a],suby2[a],backcol); + } + + fseek(f1,8L,SEEK_SET); + fwrite(picposu,2,pn,f1); + fclose(f1); +} + +int savegfx3(int flags,char *fname,int x1,int y1,int x2,int y2) +{ // rotated + FILE *f1; + long fpos1,fpos2; + int pn=0; + int x,y,a,b,c; + strcat(fname,".GFX"); + f1=fopen(fname,"wb"); + if(f1==NULL) return(1); + if(x1!=-1) pics=1; + else pics=subpics; + + putc('G',f1); + putc('F',f1); + putc('X',f1); + putc('1',f1); + putc('0',f1); + putc(0x1a,f1); + + putw(pics+(flags&1),f1); + fwrite(picposu,2,pics,f1); + + if(flags&1) /* save palette */ + { + b=16-((ftell(f1))&15); if(b!=16) for(c=0;c>4; + putc(0xfe,f1); + fwrite(pal,1,768,f1); + } + for(a=0;a>4; + savegfxdata3(f1,subx1[a],suby1[a],subx2[a],suby2[a]); + area(subx1[a],suby1[a],subx2[a],suby2[a],backcol); + } + + fseek(f1,8L,SEEK_SET); + fwrite(picposu,2,pn,f1); + fclose(f1); +} + +int savegfxx(int flags,char *fname,int x1,int y1,int x2,int y2) +{ // optimized x sprite + FILE *f1; + long fpos1,fpos2; + int pn=0; + int x,y,a,b,c; + strcat(fname,".GFX"); + f1=fopen(fname,"wb"); + if(f1==NULL) return(1); + if(x1!=-1) pics=1; + else pics=subpics; + + putc('G',f1); + putc('F',f1); + putc('X',f1); + putc('1',f1); + putc('0',f1); + putc(0x1a,f1); + + putw(pics+(flags&1),f1); + fwrite(picposu,2,pics,f1); + + if(flags&1) /* save palette */ + { + b=16-((ftell(f1))&15); if(b!=16) for(c=0;c>4; + putc(0xfe,f1); + fwrite(pal,1,768,f1); + } + for(a=0;a>4; + savegfxdatax(f1,subx1[a],suby1[a],subx2[a],suby2[a]); + area(subx1[a],suby1[a],subx2[a],suby2[a],backcol); + } + + fseek(f1,8L,SEEK_SET); + fwrite(picposu,2,pn,f1); + fclose(f1); +} + +#include "gfxsave.h" + + diff --git a/GRAB/GLVP.EXE b/GRAB/GLVP.EXE new file mode 100644 index 0000000..d3ce694 Binary files /dev/null and b/GRAB/GLVP.EXE differ diff --git a/GRAB/GLVP.OLD b/GRAB/GLVP.OLD new file mode 100644 index 0000000..e37e470 Binary files /dev/null and b/GRAB/GLVP.OLD differ diff --git a/GRAB/KABOOM.FCP b/GRAB/KABOOM.FCP new file mode 100644 index 0000000..327141a Binary files /dev/null and b/GRAB/KABOOM.FCP differ diff --git a/GRAB/KOE.BAT b/GRAB/KOE.BAT new file mode 100644 index 0000000..836f008 --- /dev/null +++ b/GRAB/KOE.BAT @@ -0,0 +1,2 @@ +vp2 d:xdeath1.cps /f3 -pxdie.pal /tw104 /th88 /x2F! -op -o9 -bxdie1 +vp2 d:xdeath2.cps /f3 -pxdie.pal /tw112 /th88 /x2F! -op -o9 -bxdie2 diff --git a/GRAB/KOE2.BAT b/GRAB/KOE2.BAT new file mode 100644 index 0000000..14d1ed6 --- /dev/null +++ b/GRAB/KOE2.BAT @@ -0,0 +1,2 @@ +ao xdie xdie1.fcp xdie2.fcp + diff --git a/GRAB/LBM16.C b/GRAB/LBM16.C new file mode 100644 index 0000000..754301c --- /dev/null +++ b/GRAB/LBM16.C @@ -0,0 +1,361 @@ +#include +#include +/* +.ux format: +word 0xfcfc +word xsize +word ysize +word colors +word para-add for picture +word - +word - +word - +palette +*/ + +#include +#include +#include +#include +#include +#include + +char inname[60]="mount.lbm"; +char outname[60]="mount.ux"; + +FILE *out; + +char buf[16384]; + +unsigned char pal[768]; /* loads pal to pal[] */ +unsigned char linebuf[2560]; +int xsz,ysz,planes,stencil,colors,mode; +int bpls=4; + +main(int argc,char *argv[]) +{ + if(argc==1) + { + printf("usage: LBM16 [bpls]\n"); + return(0); + } + strcpy(inname,argv[1]); + strcpy(outname,argv[2]); + if(argc==4) bpls=atoi(argv[3]); + printf("[saving %i bitplanes]\n",bpls); + printf("Converting %s (lbm) => %s\n",inname,outname); + out=fopen(outname,"wb"); + setvbuf(out,buf,_IOFBF,16384); + loadlbm(inname); + fclose(out); + printf("Done!\n"); +} + +int savelinebuf(int xl) +{ + int a,b,c,x; + static int y=0; + unsigned char *p; + if(!xl) + { + colors=16; + a=(16+colors*3+15)/16; + putw(0xfcfc,out); + putw(xsz,out); + putw(ysz,out); + putw(colors,out); + putw(a,out); + putw(0,out); + putw(0,out); + putw(0,out); + fwrite(pal,3,colors,out); + while(ftell(out) NEW<%s>\n",lasttype,type); + hfree(filebuf); + return(1); + } + else if(a==1) break; + } + while(!feof(f1) && !eschit()); + fclose(f1); + } + hfree(filebuf); + if(kbhit()) return(1); + return(0); +} + +int getaw(FILE *f1) +{ + unsigned int a; + a=getc(f1)*256; + a+=getc(f1); + return(a); +} + +int loadlbm2(void) +{ /* processes one block */ + long lastpos=ftell(f1); + int a,b,c,d,e,f; + if(!strcmp(type,"CMAP")) + { + /* color map */ + for(b=0;b<256*3;b++) + { + a=getc(f1)/4; + pal[b]=a; + } + savelinebuf(0); + } + else if(!strcmp(type,"FORM")) + { /* skip size of file, NO pointer movement */ + for(a=0;a<8;a++) lbmtype[a]=getc(f1); + lbmtype[a]=0; + /* LMDSBMHD - pakkaamaton formaatti */ + if(!memcmp(lbmtype,"ILBMBMHD",8)) + { + lbmmode=1; + } + else if(!memcmp(lbmtype,"PBM BMHD",8)) + { + lbmmode=2; + } + else + { + errtxt="Unknown fileformat!"; + return(-1); + } + getaw(f1); /* headerin lopun pituus */ + getaw(f1); /* - */ + xsz=getaw(f1); + ysz=getaw(f1); + getaw(f1); /* ? */ + getaw(f1); /* ? */ + + planes=getc(f1); + stencil=getc(f1); + colors=getaw(f1); + getaw(f1); /* ? */ + getaw(f1); /* ? */ + getaw(f1); /* screen-size-x */ + getaw(f1); /* screen-size-y */ + + printf("Picture size %ix%ix%i\n",xsz,ysz,colors); + printf("Loading and converting: "); + return(0); + } + else if(!strcmp(type,"CRNG")) + { + } + else if(!strcmp(type,"DPPS")) + { + } + else if(!strcmp(type,"DPPV")) + { + } + else if(!strcmp(type,"TINY")) + { /* pikkukuva */ + } + else if(!strcmp(type,"BODY") && lbmmode==2) + { + int lp,cbit,y=0; + filetype=1; /* LBM */ + while(!eschit() && y127) + { + c=getc(f1); + a=256-a; + if(a==0) c=0; + for(b=0;b<=a;b++) linebuf[lp++]=c; + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + linebuf[lp++]=c; + } + } + } + } + savelinebuf(xsz); + y++; + } + return(1); + } + else if(!strcmp(type,"BODY") && lbmmode==1) + { + int lp,cbit,y=0; + while(!eschit() && y127) + { + c=getc(f1); + a=256-a; + if(a==0) c=0; + for(b=0;b<=a;b++) + { + linebuf[lp++]|=c&128?cbit:0; + linebuf[lp++]|=c&64?cbit:0; + linebuf[lp++]|=c&32?cbit:0; + linebuf[lp++]|=c&16?cbit:0; + linebuf[lp++]|=c&8?cbit:0; + linebuf[lp++]|=c&4?cbit:0; + linebuf[lp++]|=c&2?cbit:0; + linebuf[lp++]|=c&1?cbit:0; + } + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + linebuf[lp++]|=c&128?cbit:0; + linebuf[lp++]|=c&64?cbit:0; + linebuf[lp++]|=c&32?cbit:0; + linebuf[lp++]|=c&16?cbit:0; + linebuf[lp++]|=c&8?cbit:0; + linebuf[lp++]|=c&4?cbit:0; + linebuf[lp++]|=c&2?cbit:0; + linebuf[lp++]|=c&1?cbit:0; + } + } + } + } + if(stencil) for(lp=0;lp127) + { + c=getc(f1); + a=256-a; + lp+=a*8+8; + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + } + lp+=a*8+8; + } + } + savelinebuf(xsz); + y++; + } + return(1); + } + else if(checktype) + { + return(2); + } + fseek(f1,lastpos+len,SEEK_SET); + return(0); +} + diff --git a/GRAB/LBM16.EXE b/GRAB/LBM16.EXE new file mode 100644 index 0000000..4aba640 Binary files /dev/null and b/GRAB/LBM16.EXE differ diff --git a/GRAB/LBM2P.C b/GRAB/LBM2P.C new file mode 100644 index 0000000..271ef7b --- /dev/null +++ b/GRAB/LBM2P.C @@ -0,0 +1,362 @@ +#include +#include +/* +.ux format: +word 0xfcfc +word xsize +word ysize +word colors +word para-add for picture +word - +word - +word - +palette +*/ + +#include +#include +#include +#include +#include +#include + +char inname[60]="mount.lbm"; +char outname[60]="mount.ux"; + +FILE *out; + +char buf[16384]; + +unsigned char pal[768]; /* loads pal to pal[] */ +unsigned char linebuf[2560]; +int xsz,ysz,planes,stencil,colors,mode; + +main(int argc,char *argv[]) +{ + if(argc==1) + { + printf("usage: LBM2P \n"); + return(0); + } + strcpy(inname,argv[1]); + strcpy(outname,argv[2]); + printf("Converting %s (lbm) => %s (128 color packed)\n",inname,outname); + out=fopen(outname,"wb"); + setvbuf(out,buf,_IOFBF,16384); + loadlbm(inname); + fclose(out); + printf("Done!\n"); +} + +char savebuf[8192]; +char *sb; + +int savelinebuf(int xl) +{ + int a,b,c; + static int y=0; + if(!xl) + { + a=(16+colors*3+15)/16; + putw(0xfcfd,out); + putw(xsz,out); + putw(ysz,out); + putw(colors,out); + putw(a,out); + putw(0,out); + putw(0,out); + putw(0,out); + fwrite(pal,3,colors,out); + while(ftell(out)xl) s=xl-x; + *sb++=s|128; + *sb++=linebuf[x]; + x+=s-1; + } + else + { + *sb++=linebuf[x]&127; + } + } + x=sb-savebuf; + putw(x,out); + fwrite(savebuf,1,x,out); + } +} + +int eschit(void) +{ + return(0); +} + +/****************************************************/ +/***** Deluxepaint LBM loader V1.0 **************/ +/****************************************************/ + +FILE *f1; +int cbits[8]={1,2,4,8,16,32,64,128}; +int lbmmode; /* 1=DPII, 2=DPIIe */ +char *errtxt=NULL; +char lasttype[5]; +char type[5]={"----"}; +long len; +int filetype; +char lbmtype[16]; +int checktype=0; + +int loadlbm(char *fname) +{ + int x,y,a,b,c; + long l; + char far *filebuf; + unsigned u; + int firstone=1; + filebuf=halloc(32768L,1L); + printf("\nLoading and uncompressing picture (LBM): "); + if(filebuf==NULL) + { + printf("Out of memory.\n"); + return(1); + } + { + f1=fopen(fname,"rb"); + if(f1==NULL) return(3); + setvbuf(f1,filebuf,_IOFBF,32768); + do + { + memcpy(lasttype,type,5); + /* get header */ + do + { + type[0]=getc(f1); + } + while(type[0]==0 && !feof(f1)); + type[1]=getc(f1); type[2]=getc(f1); type[4]=0; + type[3]=getc(f1); len=getc(f1)*256L*65536L; + if(firstone && memcmp(type,"FORM",4)) return(2); + firstone=0; + len+=getc(f1)*65536L; len+=getc(f1)*256L; len+=getc(f1); + /* process it */ + a=loadlbm2(); + if(errtxt!=NULL) + { + printf("ERR:%s\n",errtxt); + hfree(filebuf); + return(1); + } + if(a==-1) + { + printf("Not a Deluxepaint file!"); + return(2); + } + if(a==2) + { + printf("OLD:<%s> NEW<%s>\n",lasttype,type); + hfree(filebuf); + return(1); + } + else if(a==1) break; + } + while(!feof(f1) && !eschit()); + fclose(f1); + } + hfree(filebuf); + if(kbhit()) return(1); + return(0); +} + +int getaw(FILE *f1) +{ + unsigned int a; + a=getc(f1)*256; + a+=getc(f1); + return(a); +} + +int loadlbm2(void) +{ /* processes one block */ + long lastpos=ftell(f1); + int a,b,c,d,e,f; + if(!strcmp(type,"CMAP")) + { + /* color map */ + for(b=0;b<256*3;b++) + { + a=getc(f1)/4; + pal[b]=a; + } + savelinebuf(0); + } + else if(!strcmp(type,"FORM")) + { /* skip size of file, NO pointer movement */ + for(a=0;a<8;a++) lbmtype[a]=getc(f1); + lbmtype[a]=0; + /* LMDSBMHD - pakkaamaton formaatti */ + if(!memcmp(lbmtype,"ILBMBMHD",8)) + { + lbmmode=1; + } + else if(!memcmp(lbmtype,"PBM BMHD",8)) + { + lbmmode=2; + } + else + { + errtxt="Unknown fileformat!"; + return(-1); + } + getaw(f1); /* headerin lopun pituus */ + getaw(f1); /* - */ + xsz=getaw(f1); + ysz=getaw(f1); + getaw(f1); /* ? */ + getaw(f1); /* ? */ + + planes=getc(f1); + stencil=getc(f1); + colors=getaw(f1); + getaw(f1); /* ? */ + getaw(f1); /* ? */ + getaw(f1); /* screen-size-x */ + getaw(f1); /* screen-size-y */ + + printf("Picture size %ix%ix%i\n",xsz,ysz,colors); + printf("Loading and converting: "); + return(0); + } + else if(!strcmp(type,"CRNG")) + { + } + else if(!strcmp(type,"DPPS")) + { + } + else if(!strcmp(type,"DPPV")) + { + } + else if(!strcmp(type,"TINY")) + { /* pikkukuva */ + } + else if(!strcmp(type,"BODY") && lbmmode==2) + { + int lp,cbit,y=0; + filetype=1; /* LBM */ + while(!eschit() && y127) + { + c=getc(f1); + a=256-a; + if(a==0) c=0; + for(b=0;b<=a;b++) linebuf[lp++]=c; + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + linebuf[lp++]=c; + } + } + } + } + savelinebuf(xsz); + y++; + } + return(1); + } + else if(!strcmp(type,"BODY") && lbmmode==1) + { + int lp,cbit,y=0; + while(!eschit() && y127) + { + c=getc(f1); + a=256-a; + if(a==0) c=0; + for(b=0;b<=a;b++) + { + linebuf[lp++]|=c&128?cbit:0; + linebuf[lp++]|=c&64?cbit:0; + linebuf[lp++]|=c&32?cbit:0; + linebuf[lp++]|=c&16?cbit:0; + linebuf[lp++]|=c&8?cbit:0; + linebuf[lp++]|=c&4?cbit:0; + linebuf[lp++]|=c&2?cbit:0; + linebuf[lp++]|=c&1?cbit:0; + } + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + linebuf[lp++]|=c&128?cbit:0; + linebuf[lp++]|=c&64?cbit:0; + linebuf[lp++]|=c&32?cbit:0; + linebuf[lp++]|=c&16?cbit:0; + linebuf[lp++]|=c&8?cbit:0; + linebuf[lp++]|=c&4?cbit:0; + linebuf[lp++]|=c&2?cbit:0; + linebuf[lp++]|=c&1?cbit:0; + } + } + } + } + if(stencil) for(lp=0;lp127) + { + c=getc(f1); + a=256-a; + lp+=a*8+8; + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + } + lp+=a*8+8; + } + } + savelinebuf(xsz); + y++; + } + return(1); + } + else if(checktype) + { + return(2); + } + fseek(f1,lastpos+len,SEEK_SET); + return(0); +} + diff --git a/GRAB/LBM2P.EXE b/GRAB/LBM2P.EXE new file mode 100644 index 0000000..3f0a1e2 Binary files /dev/null and b/GRAB/LBM2P.EXE differ diff --git a/GRAB/LBM2P.OBJ b/GRAB/LBM2P.OBJ new file mode 100644 index 0000000..5873e18 Binary files /dev/null and b/GRAB/LBM2P.OBJ differ diff --git a/GRAB/LBM2U.C b/GRAB/LBM2U.C new file mode 100644 index 0000000..d9ef55c --- /dev/null +++ b/GRAB/LBM2U.C @@ -0,0 +1,337 @@ +#include +#include +/* +.ux format: +word 0xfcfc +word xsize +word ysize +word colors +word para-add for picture +word - +word - +word - +palette +*/ + +#include +#include +#include +#include +#include +#include + +char inname[60]="mount.lbm"; +char outname[60]="mount.ux"; + +FILE *out; + +char buf[16384]; + +unsigned char pal[768]; /* loads pal to pal[] */ +unsigned char linebuf[2560]; +int xsz,ysz,planes,stencil,colors,mode; + +main(int argc,char *argv[]) +{ + if(argc==1) + { + printf("usage: LBM2U \n"); + return(0); + } + strcpy(inname,argv[1]); + strcpy(outname,argv[2]); + printf("Converting %s (lbm) => %s\n",inname,outname); + out=fopen(outname,"wb"); + setvbuf(out,buf,_IOFBF,16384); + loadlbm(inname); + fclose(out); + printf("Done!\n"); +} + +int savelinebuf(int xl) +{ + int a,b,c; + static int y=0; + if(!xl) + { + a=(16+colors*3+15)/16; + putw(0xfcfc,out); + putw(xsz,out); + putw(ysz,out); + putw(colors,out); + putw(a,out); + putw(0,out); + putw(0,out); + putw(0,out); + fwrite(pal,3,colors,out); + while(ftell(out) NEW<%s>\n",lasttype,type); + hfree(filebuf); + return(1); + } + else if(a==1) break; + } + while(!feof(f1) && !eschit()); + fclose(f1); + } + hfree(filebuf); + if(kbhit()) return(1); + return(0); +} + +int getaw(FILE *f1) +{ + unsigned int a; + a=getc(f1)*256; + a+=getc(f1); + return(a); +} + +int loadlbm2(void) +{ /* processes one block */ + long lastpos=ftell(f1); + int a,b,c,d,e,f; + if(!strcmp(type,"CMAP")) + { + /* color map */ + for(b=0;b<256*3;b++) + { + a=getc(f1)/4; + pal[b]=a; + } + savelinebuf(0); + } + else if(!strcmp(type,"FORM")) + { /* skip size of file, NO pointer movement */ + for(a=0;a<8;a++) lbmtype[a]=getc(f1); + lbmtype[a]=0; + /* LMDSBMHD - pakkaamaton formaatti */ + if(!memcmp(lbmtype,"ILBMBMHD",8)) + { + lbmmode=1; + } + else if(!memcmp(lbmtype,"PBM BMHD",8)) + { + lbmmode=2; + } + else + { + errtxt="Unknown fileformat!"; + return(-1); + } + getaw(f1); /* headerin lopun pituus */ + getaw(f1); /* - */ + xsz=getaw(f1); + ysz=getaw(f1); + getaw(f1); /* ? */ + getaw(f1); /* ? */ + + planes=getc(f1); + stencil=getc(f1); + colors=getaw(f1); + getaw(f1); /* ? */ + getaw(f1); /* ? */ + getaw(f1); /* screen-size-x */ + getaw(f1); /* screen-size-y */ + + printf("Picture size %ix%ix%i\n",xsz,ysz,colors); + printf("Loading and converting: "); + return(0); + } + else if(!strcmp(type,"CRNG")) + { + } + else if(!strcmp(type,"DPPS")) + { + } + else if(!strcmp(type,"DPPV")) + { + } + else if(!strcmp(type,"TINY")) + { /* pikkukuva */ + } + else if(!strcmp(type,"BODY") && lbmmode==2) + { + int lp,cbit,y=0; + filetype=1; /* LBM */ + while(!eschit() && y127) + { + c=getc(f1); + a=256-a; + if(a==0) c=0; + for(b=0;b<=a;b++) linebuf[lp++]=c; + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + linebuf[lp++]=c; + } + } + } + } + savelinebuf(xsz); + y++; + } + return(1); + } + else if(!strcmp(type,"BODY") && lbmmode==1) + { + int lp,cbit,y=0; + while(!eschit() && y127) + { + c=getc(f1); + a=256-a; + if(a==0) c=0; + for(b=0;b<=a;b++) + { + linebuf[lp++]|=c&128?cbit:0; + linebuf[lp++]|=c&64?cbit:0; + linebuf[lp++]|=c&32?cbit:0; + linebuf[lp++]|=c&16?cbit:0; + linebuf[lp++]|=c&8?cbit:0; + linebuf[lp++]|=c&4?cbit:0; + linebuf[lp++]|=c&2?cbit:0; + linebuf[lp++]|=c&1?cbit:0; + } + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + linebuf[lp++]|=c&128?cbit:0; + linebuf[lp++]|=c&64?cbit:0; + linebuf[lp++]|=c&32?cbit:0; + linebuf[lp++]|=c&16?cbit:0; + linebuf[lp++]|=c&8?cbit:0; + linebuf[lp++]|=c&4?cbit:0; + linebuf[lp++]|=c&2?cbit:0; + linebuf[lp++]|=c&1?cbit:0; + } + } + } + } + if(stencil) for(lp=0;lp127) + { + c=getc(f1); + a=256-a; + lp+=a*8+8; + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + } + lp+=a*8+8; + } + } + savelinebuf(xsz); + y++; + } + return(1); + } + else if(checktype) + { + return(2); + } + fseek(f1,lastpos+len,SEEK_SET); + return(0); +} + diff --git a/GRAB/LBM2U.EXE b/GRAB/LBM2U.EXE new file mode 100644 index 0000000..e3613f6 Binary files /dev/null and b/GRAB/LBM2U.EXE differ diff --git a/GRAB/LFCP.C b/GRAB/LFCP.C new file mode 100644 index 0000000..540983a --- /dev/null +++ b/GRAB/LFCP.C @@ -0,0 +1,147 @@ +/****************************************************/ +/***** FuturePicture loader (FCP) V1.0 ************/ +/****************************************************/ + +int loadfcp(char *fname) +{ + int multiple=0; + int pz; + int format; + int x,y,a,b,c,d; + int cnt,cntm; + int minx,miny,maxx,maxy,xo,yo,cols; + int infocnt=0; + int style; + int z,zm=1; + int plane4; + long l; + char far *filebuf; + unsigned u; + filebuf=halloc(32768L,1L); + #ifndef AOLOAD + printf("\nLoading and uncompressing picture (FCP): "); + #endif + if(filebuf==NULL) + { + printf("Out of memory.\n"); + return(1); + } + if(setback255) memset(pic2,255,64000); + { + /* header */ + f1=fopen(fname,"rb"); + if(f1==NULL) return(3); + setvbuf(f1,filebuf,_IOFBF,32768); + a=getc(f1); + if(a!='F') return(2); + a=getc(f1); + if(a!='C') return(2); + a=getc(f1); + if(a!='P') return(2); + a=getc(f1); + if(a!=0x1a) return(2); + a=getc(f1); + if(a!=0x10) return(2); + b=getc(f1); + pics=getw(f1); + fread(picpos,4,pics,f1); + if(b&1) + { + fread(pal,256*3,1,f1); + } + if(pics>1) + { + multiple=1; + #ifndef AOLOAD + printf("\n\nFCP file contains multiple pictures.\n" + "Press Space to view next with animation\n" + " Enter to view next with flipping\n" + " 'S' to select picture\n\n" + "Press any key to start."); + getch(); + reg.x.ax=0x13; + int86(0x10,®,®); + #endif + viewpal(0); + } + /* pic */ + for(pz=0;pzbx2) bx2=maxx-minx; + if(maxy-miny>by2) by2=maxy-miny; + #endif + if(format&16) + { + plane4=4; + zm=4; + } + else plane4=1; + for(z=0;z NEW<%s>\n",lasttype,type); + hfree(filebuf); + return(1); + } + else if(a==1) break; + } + while(!feof(f1) && !eschit()); + fclose(f1); + } + hfree(filebuf); + if(kbhit()) return(1); + return(0); +} + +int getaw(FILE *f1) +{ + unsigned int a; + a=getc(f1)*256; + a+=getc(f1); + return(a); +} + +int loadlbm2(void) +{ /* processes one block */ + long lastpos=ftell(f1); + int a,b,c,d,e,f; + if(!strcmp(type,"CMAP")) + { + /* color map */ + for(b=0;b<256*3;b++) + { + a=getc(f1)/4; + pal[b]=a; + } + } + else if(!strcmp(type,"FORM")) + { /* skip size of file, NO pointer movement */ + for(a=0;a<8;a++) lbmtype[a]=getc(f1); + lbmtype[a]=0; + /* LMDSBMHD - pakkaamaton formaatti */ + if(!memcmp(lbmtype,"ILBMBMHD",8)) + { + lbmmode=1; + } + else if(!memcmp(lbmtype,"PBM BMHD",8)) + { + lbmmode=2; + } + else + { + errtxt="Unknown fileformat!"; + return(-1); + } + getaw(f1); /* headerin lopun pituus */ + getaw(f1); /* - */ + xsz=getaw(f1); + ysz=getaw(f1); + getaw(f1); /* ? */ + getaw(f1); /* ? */ + + planes=getc(f1); + stencil=getc(f1); + colors=getaw(f1); + getaw(f1); /* ? */ + getaw(f1); /* ? */ + getaw(f1); /* screen-size-x */ + getaw(f1); /* screen-size-y */ + return(0); + } + else if(!strcmp(type,"CRNG")) + { + } + else if(!strcmp(type,"DPPS")) + { + } + else if(!strcmp(type,"DPPV")) + { + } + else if(!strcmp(type,"TINY")) + { /* pikkukuva */ + } + else if(!strcmp(type,"BODY") && lbmmode==2) + { + int lp,cbit,y=0; + filetype=1; /* LBM */ + while(!eschit() && y127) + { + c=getc(f1); + a=256-a; + if(a==0) c=0; + for(b=0;b<=a;b++) linebuf[lp++]=c; + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + linebuf[lp++]=c; + } + } + } + } + memcpy(pic+y*320,linebuf,xsz); + y++; + } + return(1); + } + else if(!strcmp(type,"BODY") && lbmmode==1) + { + int lp,cbit,y=0; + while(!eschit() && y127) + { + c=getc(f1); + a=256-a; + if(a==0) c=0; + for(b=0;b<=a;b++) + { + linebuf[lp++]|=c&128?cbit:0; + linebuf[lp++]|=c&64?cbit:0; + linebuf[lp++]|=c&32?cbit:0; + linebuf[lp++]|=c&16?cbit:0; + linebuf[lp++]|=c&8?cbit:0; + linebuf[lp++]|=c&4?cbit:0; + linebuf[lp++]|=c&2?cbit:0; + linebuf[lp++]|=c&1?cbit:0; + } + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + linebuf[lp++]|=c&128?cbit:0; + linebuf[lp++]|=c&64?cbit:0; + linebuf[lp++]|=c&32?cbit:0; + linebuf[lp++]|=c&16?cbit:0; + linebuf[lp++]|=c&8?cbit:0; + linebuf[lp++]|=c&4?cbit:0; + linebuf[lp++]|=c&2?cbit:0; + linebuf[lp++]|=c&1?cbit:0; + } + } + } + } + if(stencil) for(lp=0;lp127) + { + c=getc(f1); + a=256-a; + lp+=a*8+8; + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + } + lp+=a*8+8; + } + } + memcpy(pic+y*320,linebuf,xsz); + y++; + } + return(1); + } + else if(checktype) + { + return(2); + } + fseek(f1,lastpos+len,SEEK_SET); + return(0); +} + diff --git a/GRAB/MAKE2.BAT b/GRAB/MAKE2.BAT new file mode 100644 index 0000000..11c1b77 --- /dev/null +++ b/GRAB/MAKE2.BAT @@ -0,0 +1 @@ +c:\dos\prg\make vp2 diff --git a/GRAB/MB.GFX b/GRAB/MB.GFX new file mode 100644 index 0000000..d1c8acf Binary files /dev/null and b/GRAB/MB.GFX differ diff --git a/GRAB/MB3.GFX b/GRAB/MB3.GFX new file mode 100644 index 0000000..eb3e349 Binary files /dev/null and b/GRAB/MB3.GFX differ diff --git a/GRAB/NMAKE.BAT b/GRAB/NMAKE.BAT new file mode 100644 index 0000000..fa72370 --- /dev/null +++ b/GRAB/NMAKE.BAT @@ -0,0 +1 @@ +c:\dos\prg\make vp diff --git a/GRAB/PALETTE.WC1 b/GRAB/PALETTE.WC1 new file mode 100644 index 0000000..8f30b7f Binary files /dev/null and b/GRAB/PALETTE.WC1 differ diff --git a/GRAB/PALETTE.WC2 b/GRAB/PALETTE.WC2 new file mode 100644 index 0000000..0aa5479 Binary files /dev/null and b/GRAB/PALETTE.WC2 differ diff --git a/GRAB/PALVIEW.C b/GRAB/PALVIEW.C new file mode 100644 index 0000000..a79a4d2 --- /dev/null +++ b/GRAB/PALVIEW.C @@ -0,0 +1,64 @@ +#include +#include +#include + +#define pset(xx,yy,cc) *(vram+(xx)+(yy)*320)=(cc); + +union REGS reg; + +main(int argc,char *argv[]) +{ + int minr=999,ming=999,minb=999; + int maxr=0,maxg=0,maxb=0; + int a,b,c; + int xr,xg,xb; + int div=1; + int x,y; + long start=0; + char far *vram=(char far *)0xa0000000; + FILE *f1; + if(argc==1) + { + printf("usage: VIEWPAL [byte to start] [4 to divide]\n"); + return(0); + } + f1=fopen(argv[1],"rb"); + if(f1==NULL) return(0); + if(argc>=3) start=atol(argv[2]); + if(argc>=4) { div=4; } + fseek(f1,start,SEEK_SET); + reg.x.ax=0x13; + int86(0x10,®,®); + + for(y=0;y<16;y++) for(x=0;x<16;x++) + { + a=x*16+y; + for(b=0;b<4;b++) for(c=0;c<4;c++) + { + pset(x*4+b,y*4+c,a); + } + } + outp(0x3c8,0); + for(a=0;a<256;a++) + { + xr=getc(f1)/div; + xg=getc(f1)/div; + xb=getc(f1)/div; + outp(0x3c9,xr); + outp(0x3c9,xg); + outp(0x3c9,xb); + if(xrmaxr) maxr=xr; + if(xg>maxg) maxg=xg; + if(xb>maxb) maxb=xb; + } + fclose(f1); + + getch(); + reg.x.ax=0x3; + int86(0x10,®,®); + printf("Min: R:%-3i G:%-3i B:%-3i\n",minr,ming,minb); + printf("Max: R:%-3i G:%-3i B:%-3i\n",maxr,maxg,maxb); +} diff --git a/GRAB/PALVIEW.EXE b/GRAB/PALVIEW.EXE new file mode 100644 index 0000000..63232eb Binary files /dev/null and b/GRAB/PALVIEW.EXE differ diff --git a/GRAB/PIC001.BIN b/GRAB/PIC001.BIN new file mode 100644 index 0000000..40085d0 --- /dev/null +++ b/GRAB/PIC001.BIN @@ -0,0 +1,5 @@ +                                 _ _ Ä Ä Ä Ä Ä _ _                                                           _       /   _Ä_ \    _                            / Û \     /  _/ ³ + \_  \      / Û \                         Shuttle T h e S o f t / ² Û ² \ / / Ú +Å +¿ + \ \ / ² Û ² \   Þ ± ² Û ² ± Ý   ³  /Û Û Û Û Û Û Û Û Û \ ³   Þ ± ² Û ² ± Ý                         Awaits...      ³ ± ² ² ± ³  / Û ³Û Ú³³³³³Â¿Û ³ Û \  ³ ± ² ² ± ³                                        ³ ± ² Û ² ± ³ ³ Û Û ³ÚÄÄÄÄÂÄÄÄÄ¿³ Û Û ³ ³ ± ² Û ² ± ³                                ³ ± ² Û ² ± ³ ³ Û Û ³³°±²ÛÛ³ÛÛ²±°³³Û Û ³ ³ ± ² Û ² ± ³                      ³ ± ² Û ² ± ³ ³ Û Û ³³°±²ÛÛ³ÛÛ²±°³³Û Û ³ ³ ± ² Û ² ± ³                   ³ ± ² Û ² ± ³ ³ Û /Û³°±²ÛÛ³ÛÛ²±°³Û\Û ³ ³ ± ² Û ² ± ³               ³ ± ² Û ² ± ³ ³ /²Û³°±²ÛÛ³ÛÛ²±°³Û²\³ ³ ± ² Û ² ± ³                  ³ ± ² Û ² ± ³ /²²Û³°±²ÛÛ³ÛÛ²±°³Û²²\ ³ ± ² Û ² ± ³                   ³ ± ² Û ² ± ³ /±²²Û³°±²ÛÛ³ÛÛ²±°³Û²²±\³ ± ² Û ² ± ³                 ³ ± ² Û ² ± /±±²²Û³°±²ÛÛ³ÛÛ²±°³Û²²±±\± ² Û ² ± ³                     ³ ± __ÄÙ±±±²²Û³°±²ÛÛ³ÛÛ²±°³Û²²±±±ÀÄ__± ³                          __ÄÙ±±±±±±±²²Û³°±²ÛÛ³ÛÛ²±°³Û²²±±±±±±±ÀÄ__                                    _ÄÙ±±±±±±±±±±±²²ÛÃÄÄÄÄÄÁÄÄÄÄÄ´Û²²±±±±±±±±±±±ÀÄ_                               /±±±±±±±±±±±±±±²²Û/°±²ÛÛðÛÛ²±°\Û²²±±±±±±±±±±±±±±\                              /±±±±±±±±±±±±±±±²²_N_.°±²Û³ð³Û²±°_._N²²±±±±±±±±±±±±±±±\                            ³±±±±±±±±±±±±±±±±²/  \±²Û³ð³Û²±/  \²±±±±±±±±±±±±±±±±³                           ³±±±±±±±±±±±±±±±±³    ³²Û³ð³Û²³    ³±±±±±±±±±±±±±±±±³                           ³±±±±±±±±±±±±±±±±³    ³²Û³ð³Û²³    ³±±±±±±±±±±±±±±±±³                           ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÁÄÄ´ ÃÄÄÁÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ                                  ³ ± ² Û ² ± ³ ³  ÀÄÄÄÄÙÀÄÙÀÄÄÄÄÙ  ³ ³ ± ² Û ² ± ³                        E:\S\P\GRAB>       À Ä Ä Ä Ä Ä Ù À Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ù À Ä Ä Ä Ä Ä Ù                         \ No newline at end of file diff --git a/GRAB/PIC001.LBM b/GRAB/PIC001.LBM new file mode 100644 index 0000000..b8c24d2 Binary files /dev/null and b/GRAB/PIC001.LBM differ diff --git a/GRAB/REMA.BAT b/GRAB/REMA.BAT new file mode 100644 index 0000000..b717dba --- /dev/null +++ b/GRAB/REMA.BAT @@ -0,0 +1,2 @@ +release +mark diff --git a/GRAB/SFCP.C b/GRAB/SFCP.C new file mode 100644 index 0000000..129fd96 --- /dev/null +++ b/GRAB/SFCP.C @@ -0,0 +1,164 @@ + +char packbuf[16384]; +int packbufpnt,packbufcnt; + +#define stosw(xx) { packbuf[packbufpnt++]=xx&255; packbuf[packbufpnt++]=xx>>8; } +#define stosb(xx) packbuf[packbufpnt++]=xx + +int savepack(FILE *f1) +{ + int a,b,c; + if(f1!=NULL) + { + b=packbuf[2]; + a=packbuf[3]; + if((a==0 && b<128) || (a==-1 && b>-128)) c=1; else c=0; + packbuf[0]=packbufcnt&255; packbuf[1]=packbufcnt>>8; + if(packbufcnt==1 && c==1) + { + packbuf[3]=128; + fwrite(packbuf+2,1,packbufpnt-2,f1); + } + else fwrite(packbuf,1,packbufpnt,f1); + } + packbufpnt=2; + packbufcnt=0; +} + +int savefcpdata(FILE *f1,int x1,int y1,int x2,int y2) +{ /* single */ + int style; + int tx1=x1,ty1=y1,tx2=x2,ty2=y2; + int xl=x2-x1+1,yl=y2-y1+1; + int xo,yo; + int x,y,z,zm=1; + int a,b,c,d,w,wc; + unsigned u; + long tell4,telltbl; + long pic1pos; + unsigned planepos[4]; + savepack(NULL); + pic1pos=ftell(f1); + planepos[0]=planepos[1]=planepos[2]=planepos[3]=0x1234; + putc(0x10,f1); /* pic ver */ + switch(fcpstyle) + { + case 15 : a=15; /* fastwing */ + break; + } + style=a; + if(fcp4plane) a|=16; + if(fcptransp) a|=32; + if(fcpsavepal) a|=64; + putc(a,f1); + if(fcporigo && fcpstyle==15) + { + xo=xl/2; + yo=yl/2; + } + else xo=yo=0; + putw(xo,f1); /* minx */ + putw(yo,f1); /* miny */ + putw(xl-xo-1,f1); /* maxx */ + putw(yl-yo-1,f1); /* maxy */ + if(fcp4plane) + { + memcpy(pic2,pic,64000); + x1=x1/4; + x2=(x2+3)/4; + xl=x2-x1+1; + a|=16; + tell4=ftell(f1); + zm=4; + } + else xo+=x1; yo+=y1; + for(z=0;z(tx2-tx1+1)) b--; + for(y=y1;y<=y2;y++) for(a=0,x=tx1+z;a4) + { + if(wc>0) + { + int a; + packbufcnt++; + stosw(wc); + for(a=0;a0) + { + int a; + packbufcnt++; + stosw(wc); + for(a=0;a +#include +#include +#include + +/* conversion palette to DEFPAL */ +int wc2conv[]={0,42,120,57,186,90,152,21,26,37,116,52,181,196,130,16 +,24,208,225,210,211,212,213,214,215,216,217,218,220,221,222,223 +,32,33,34,35,36,37,38,40,40,41,43,44,45,46,47,0 +,32,33,67,68,70,71,72,73,74,75,75,76,77,78,47,47 +,128,241,242,243,244,245,167,183,184,185,186,187,188,189,190,191 +,48,177,178,179,180,181,182,183,242,254,253,117,120,122,124,127 +,16,161,145,212,148,149,150,151,152,152,153,154,155,156,141,158 +,16,161,162,227,228,229,230,231,232,233,234,235,236,237,238,0 +,16,176,162,163,164,165,166,167,168,169,170,234,235,236,238,0 +,16,32,49,50,51,52,53,55,55,56,57,59,60,61,63,0 +,16,17,18,19,20,21,22,23,24,26,27,28,29,30,31,0 +,208,162,179,181,181,199,200,201,202,203,204,204,205,206,207,0 +,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +,112,97,98,99,100,101,102,103,104,105,106,106,108,108,109,110 +,208,210,212,255,217,219,220,157,151,231,232,170,171,234,188,239 +,249,250,251,252,122,123,124,125,47,0,0,0,0,0,0,255}; + +unsigned char far pic[64000]; +int fcporigo=2,fcporigox,fcporigoy; +int backcol=255; +int savegfx=0; +int savegfx1=0; +FILE *gfx; + +#include "gfxsave.h" + +char palette[768]; + +int origox,origoy; + +unsigned int maxp; +unsigned int pp=0; + +int getcol(void); + +unsigned char far buf[64010]; + +long table[1024]; + +char *fname=NULL; +int picnum=1; +int showpal=0; +int origox=0,origoy=0,origoreset=0; +char *palfile="palette.wc2"; +int longanim=0; +int savelbm=0; + +char far *vram=(char far *)0xa0000000; + +unsigned picposu[256],pn=0; + +main(int argc,char *argv[]) +{ + int filenum; + int o; + char fstr[80]; + FILE *f1; + int sz1,sz2,sz3,sz4,num,mx,my; + int x,y,a,tx,ty,b,c,pix; + long l,l1,l2,eob; + int beg,end; + unsigned u; + printf("Origin PIC viewer V3.0\n"); + if(argc==1) + { + printf("usage: SP [pic number,none=all]" + "available options:\n" + "-l long animation (.1,.2,.3...)\n" + "-s show palette\n" + "-1 use wing commmander 1 palette\n" + "-o set origox to 160,100 (default: 0,0)\n" + "-ox# set origox\n" + "-oy# set origoy\n" + "-or reset origo for long anims pics >1\n" + "-f save with FutureGrabber to LBM:s\n" + "-h save as 1-bitplane-packed\n" + "-g save as GFX\n" + "-G save as GFX with DEFAULT palette\n" + ); + return(0); + } + for(a=1;a<=argc;a++) + { + if(*argv[a]=='-' || *argv[a]=='/') switch(*(argv[a]+1)) + { + case 'l' : longanim=1; break; + case 'o' : switch(*(argv[a]+2)) + { + case 'x' : + origox=atoi(argv[a]+3); + break; + case 'y' : + origoy=atoi(argv[a]+3); + break; + case 'r' : + origoreset=1; + break; + default : + origox=160; origoy=100; + break; + } break; + case 's' : showpal=1; break; + case '1' : palfile="palette.wc1"; break; + case 'f' : savelbm=1; break; + case 'g' : savegfx=1; break; + case 'G' : savegfx=2; break; + case 'h' : savegfx1=1; break; + } + else + { + if(fname==NULL) + { + fname=argv[a]; + if(strchr(fname,'.')==NULL) longanim=1; + } + else picnum=atoi(argv[a]); + } + } + if(!longanim) + { + printf("Scanning... "); + f1=fopen(fname,"rb"); + if(f1==NULL) { printf("File '%s' not found!\n",fname); return(1); } + fread(table,4,1024,f1); + fclose(f1); + num=table[1]/4-1; + table[num+1]=table[0]; + printf("File contains %i pictures.\n",num); + } + else num=9999; + a=picnum; + if(a<0 || a>num) { printf("Number must be between 0 and %i!\n",num); return(3); } + _setvideomode(_MRES256COLOR); + f1=fopen(palfile,"rb"); + for(b=0;b<768;b++) palette[b]=getc(f1); + fclose(f1); + palette[765]=2; + palette[766]=3; + palette[767]=4; + outp(0x3c8,0); for(b=0;b<256*3;b++) + { + outp(0x3c9,palette[b]); + } + if(showpal) + { + for(y=0;y<256;y++) + { + _setcolor(y); + _setpixel(y/16*2+320-33 ,(y&15)*2); + _setpixel(y/16*2+320-33+1,(y&15)*2); + _setpixel(y/16*2+320-33 ,(y&15)*2+1); + _setpixel(y/16*2+320-33+1,(y&15)*2+1); + } + getch(); + } + if(a==0) { beg=1; end=num; } /* animate */ + else beg=end=a; + _setcolor(255); + for(b=0;b<200;b++) + { + _moveto(0,b); + _lineto(319,b); + } + if(savegfx && longanim) + { + printf("Can't save a long animation in one part!\n"); + return(1); + } + if(savegfx) + { + gfx=fopen("gfx.gfx","wb"); + putc('G',gfx); + putc('F',gfx); + putc('X',gfx); + putc('1',gfx); + putc('0',gfx); + putc(0x1a,gfx); + putw(end-beg+1,gfx); + fwrite(picposu,2,end-beg+1,f1); + } + for(filenum=1;;filenum++) + { + if(longanim) + { + sprintf(fstr,"%s.%i",fname,filenum); + f1=fopen(fstr,"rb"); + if(f1==NULL) break; + fread(table,4,1024,f1); + fclose(f1); + num=table[1]/4-1; + table[num+1]=table[0]; + end=num; + beg=1; + } + else strcpy(fstr,fname); + for(a=beg;a<=end;a++) + { + if(savegfx) + { + b=16-((ftell(gfx))&15); if(b!=16) for(c=0;c>4; + } + f1=fopen(fstr,"rb"); + fseek(f1,table[a],SEEK_SET); + eob=table[a+1]; + sz3=getw(f1); + sz1=-getw(f1); + sz2=-getw(f1); + sz4=getw(f1); + mx=origox; my=origoy; + if(savegfx) + { + fcporigoy=-sz2; + fcporigox=-sz1; + } + for(;;) + { + int mode; + pix=getc(f1); pix+=getc(f1)*256; + if(feof(f1) || ftell(f1)>eob) break; + tx=getc(f1); tx+=getc(f1)*256; tx+=mx; + ty=getc(f1); ty+=getc(f1)*256; ty+=my; + mode=pix&1; pix>>=1; + u=pix; + if(mode==0) for(b=0;b0) + { + u=getc(f1); + mode=u&1; + u>>=1; + if(u==0) break; + switch(mode) + { + case 0 : + o=tx+ty*320; + pix-=u; + tx+=u; + for(b=0;bdowny) downy=y; + if(xrightx) rightx=x; + sbuf[b]=255; + /* entire continuos part read */ + for(d=a=0;ad) + { + putw(a-d,f1); + for(e=d;ed) + { + putw(a-d,f1); + for(e=d;e + +char far *vram=(char far *)0xa0000000L; + +main() +{ + FILE *f1; + int a,b,y; + f1=fopen("font8x14.inc","wt"); + _asm mov ax,16 + _asm int 10h + for(a=0;a<256;a++) + { + printf(" %i\r",a); + _asm mov ah,09h + _asm mov al,byte ptr a + _asm mov bx,7 + _asm mov cx,1 + _asm int 10h + fprintf(f1,"db "); + for(y=0;y<14;y++) + { + b=vram[y*80]; + fprintf(f1,"%i,",b); + } + fprintf(f1,"0,0 ;%i\n",a); + } + _asm mov ax,3 + _asm int 10h + fclose(f1); +} diff --git a/GRAB/SYSFONT/F.EXE b/GRAB/SYSFONT/F.EXE new file mode 100644 index 0000000..a80c7ae Binary files /dev/null and b/GRAB/SYSFONT/F.EXE differ diff --git a/GRAB/SYSFONT/FONT8X14.INC b/GRAB/SYSFONT/FONT8X14.INC new file mode 100644 index 0000000..8d02c32 --- /dev/null +++ b/GRAB/SYSFONT/FONT8X14.INC @@ -0,0 +1,256 @@ +db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;0 +db 0,0,126,-127,-91,-127,-127,-67,-103,-127,126,0,0,0,0,0 ;1 +db 0,0,126,-1,-37,-1,-1,-61,-25,-1,126,0,0,0,0,0 ;2 +db 0,0,0,108,-2,-2,-2,-2,124,56,16,0,0,0,0,0 ;3 +db 0,0,0,16,56,124,-2,124,56,16,0,0,0,0,0,0 ;4 +db 0,0,24,60,60,-25,-25,-25,24,24,60,0,0,0,0,0 ;5 +db 0,0,24,60,126,-1,-1,126,24,24,60,0,0,0,0,0 ;6 +db 0,0,0,0,0,24,60,60,24,0,0,0,0,0,0,0 ;7 +db -1,-1,-1,-1,-1,-25,-61,-61,-25,-1,-1,-1,-1,-1,0,0 ;8 +db 0,0,0,0,60,102,66,66,102,60,0,0,0,0,0,0 ;9 +db -1,-1,-1,-1,-61,-103,-67,-67,-103,-61,-1,-1,-1,-1,0,0 ;10 +db 0,0,30,14,26,50,120,-52,-52,-52,120,0,0,0,0,0 ;11 +db 0,0,60,102,102,102,60,24,126,24,24,0,0,0,0,0 ;12 +db 0,0,63,51,63,48,48,48,112,-16,-32,0,0,0,0,0 ;13 +db 0,0,127,99,127,99,99,99,103,-25,-26,-64,0,0,0,0 ;14 +db 0,0,24,24,-37,60,-25,60,-37,24,24,0,0,0,0,0 ;15 +db 0,0,-128,-64,-32,-8,-2,-8,-32,-64,-128,0,0,0,0,0 ;16 +db 0,0,2,6,14,62,-2,62,14,6,2,0,0,0,0,0 ;17 +db 0,0,24,60,126,24,24,24,126,60,24,0,0,0,0,0 ;18 +db 0,0,102,102,102,102,102,102,0,102,102,0,0,0,0,0 ;19 +db 0,0,127,-37,-37,-37,123,27,27,27,27,0,0,0,0,0 ;20 +db 0,124,-58,96,56,108,-58,-58,108,56,12,-58,124,0,0,0 ;21 +db 0,0,0,0,0,0,0,0,-2,-2,-2,0,0,0,0,0 ;22 +db 0,0,24,60,126,24,24,24,126,60,24,126,0,0,0,0 ;23 +db 0,0,24,60,126,24,24,24,24,24,24,0,0,0,0,0 ;24 +db 0,0,24,24,24,24,24,24,126,60,24,0,0,0,0,0 ;25 +db 0,0,0,0,24,12,-2,12,24,0,0,0,0,0,0,0 ;26 +db 0,0,0,0,48,96,-2,96,48,0,0,0,0,0,0,0 ;27 +db 0,0,0,0,0,-64,-64,-64,-2,0,0,0,0,0,0,0 ;28 +db 0,0,0,0,40,108,-2,108,40,0,0,0,0,0,0,0 ;29 +db 0,0,0,16,56,56,124,124,-2,-2,0,0,0,0,0,0 ;30 +db 0,0,0,-2,-2,124,124,56,56,16,0,0,0,0,0,0 ;31 +db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;32 +db 0,0,24,60,60,60,24,24,0,24,24,0,0,0,0,0 ;33 +db 0,102,102,102,36,0,0,0,0,0,0,0,0,0,0,0 ;34 +db 0,0,108,108,-2,108,108,108,-2,108,108,0,0,0,0,0 ;35 +db 24,24,124,-58,-62,-64,124,6,-122,-58,124,24,24,0,0,0 ;36 +db 0,0,0,0,-62,-58,12,24,48,102,-58,0,0,0,0,0 ;37 +db 0,0,56,108,108,56,118,-36,-52,-52,118,0,0,0,0,0 ;38 +db 0,48,48,48,96,0,0,0,0,0,0,0,0,0,0,0 ;39 +db 0,0,12,24,48,48,48,48,48,24,12,0,0,0,0,0 ;40 +db 0,0,48,24,12,12,12,12,12,24,48,0,0,0,0,0 ;41 +db 0,0,0,0,102,60,-1,60,102,0,0,0,0,0,0,0 ;42 +db 0,0,0,0,24,24,126,24,24,0,0,0,0,0,0,0 ;43 +db 0,0,0,0,0,0,0,0,24,24,24,48,0,0,0,0 ;44 +db 0,0,0,0,0,0,-2,0,0,0,0,0,0,0,0,0 ;45 +db 0,0,0,0,0,0,0,0,0,24,24,0,0,0,0,0 ;46 +db 0,0,2,6,12,24,48,96,-64,-128,0,0,0,0,0,0 ;47 +db 0,0,124,-58,-50,-34,-10,-26,-58,-58,124,0,0,0,0,0 ;48 +db 0,0,24,56,120,24,24,24,24,24,126,0,0,0,0,0 ;49 +db 0,0,124,-58,6,12,24,48,96,-58,-2,0,0,0,0,0 ;50 +db 0,0,124,-58,6,6,60,6,6,-58,124,0,0,0,0,0 ;51 +db 0,0,12,28,60,108,-52,-2,12,12,30,0,0,0,0,0 ;52 +db 0,0,-2,-64,-64,-64,-4,6,6,-58,124,0,0,0,0,0 ;53 +db 0,0,56,96,-64,-64,-4,-58,-58,-58,124,0,0,0,0,0 ;54 +db 0,0,-2,-58,6,12,24,48,48,48,48,0,0,0,0,0 ;55 +db 0,0,124,-58,-58,-58,124,-58,-58,-58,124,0,0,0,0,0 ;56 +db 0,0,124,-58,-58,-58,126,6,6,12,120,0,0,0,0,0 ;57 +db 0,0,0,24,24,0,0,0,24,24,0,0,0,0,0,0 ;58 +db 0,0,0,24,24,0,0,0,24,24,48,0,0,0,0,0 ;59 +db 0,0,6,12,24,48,96,48,24,12,6,0,0,0,0,0 ;60 +db 0,0,0,0,0,126,0,0,126,0,0,0,0,0,0,0 ;61 +db 0,0,96,48,24,12,6,12,24,48,96,0,0,0,0,0 ;62 +db 0,0,124,-58,-58,12,24,24,0,24,24,0,0,0,0,0 ;63 +db 0,0,124,-58,-58,-34,-34,-34,-36,-64,124,0,0,0,0,0 ;64 +db 0,0,16,56,108,-58,-58,-2,-58,-58,-58,0,0,0,0,0 ;65 +db 0,0,-4,102,102,102,124,102,102,102,-4,0,0,0,0,0 ;66 +db 0,0,60,102,-62,-64,-64,-64,-62,102,60,0,0,0,0,0 ;67 +db 0,0,-8,108,102,102,102,102,102,108,-8,0,0,0,0,0 ;68 +db 0,0,-2,102,98,104,120,104,98,102,-2,0,0,0,0,0 ;69 +db 0,0,-2,102,98,104,120,104,96,96,-16,0,0,0,0,0 ;70 +db 0,0,60,102,-62,-64,-64,-34,-58,102,58,0,0,0,0,0 ;71 +db 0,0,-58,-58,-58,-58,-2,-58,-58,-58,-58,0,0,0,0,0 ;72 +db 0,0,60,24,24,24,24,24,24,24,60,0,0,0,0,0 ;73 +db 0,0,30,12,12,12,12,12,-52,-52,120,0,0,0,0,0 ;74 +db 0,0,-26,102,108,108,120,108,108,102,-26,0,0,0,0,0 ;75 +db 0,0,-16,96,96,96,96,96,98,102,-2,0,0,0,0,0 ;76 +db 0,0,-58,-18,-2,-2,-42,-58,-58,-58,-58,0,0,0,0,0 ;77 +db 0,0,-58,-26,-10,-2,-34,-50,-58,-58,-58,0,0,0,0,0 ;78 +db 0,0,56,108,-58,-58,-58,-58,-58,108,56,0,0,0,0,0 ;79 +db 0,0,-4,102,102,102,124,96,96,96,-16,0,0,0,0,0 ;80 +db 0,0,124,-58,-58,-58,-58,-42,-34,124,12,14,0,0,0,0 ;81 +db 0,0,-4,102,102,102,124,108,102,102,-26,0,0,0,0,0 ;82 +db 0,0,124,-58,-58,96,56,12,-58,-58,124,0,0,0,0,0 ;83 +db 0,0,126,126,90,24,24,24,24,24,60,0,0,0,0,0 ;84 +db 0,0,-58,-58,-58,-58,-58,-58,-58,-58,124,0,0,0,0,0 ;85 +db 0,0,-58,-58,-58,-58,-58,-58,108,56,16,0,0,0,0,0 ;86 +db 0,0,-58,-58,-58,-58,-42,-42,-2,124,108,0,0,0,0,0 ;87 +db 0,0,-58,-58,108,56,56,56,108,-58,-58,0,0,0,0,0 ;88 +db 0,0,102,102,102,102,60,24,24,24,60,0,0,0,0,0 ;89 +db 0,0,-2,-58,-116,24,48,96,-62,-58,-2,0,0,0,0,0 ;90 +db 0,0,60,48,48,48,48,48,48,48,60,0,0,0,0,0 ;91 +db 0,0,-128,-64,-32,112,56,28,14,6,2,0,0,0,0,0 ;92 +db 0,0,60,12,12,12,12,12,12,12,60,0,0,0,0,0 ;93 +db 16,56,108,-58,0,0,0,0,0,0,0,0,0,0,0,0 ;94 +db 0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0 ;95 +db 48,48,24,0,0,0,0,0,0,0,0,0,0,0,0,0 ;96 +db 0,0,0,0,0,120,12,124,-52,-52,118,0,0,0,0,0 ;97 +db 0,0,-32,96,96,120,108,102,102,102,124,0,0,0,0,0 ;98 +db 0,0,0,0,0,124,-58,-64,-64,-58,124,0,0,0,0,0 ;99 +db 0,0,28,12,12,60,108,-52,-52,-52,118,0,0,0,0,0 ;100 +db 0,0,0,0,0,124,-58,-2,-64,-58,124,0,0,0,0,0 ;101 +db 0,0,56,108,100,96,-16,96,96,96,-16,0,0,0,0,0 ;102 +db 0,0,0,0,0,118,-52,-52,-52,124,12,-52,120,0,0,0 ;103 +db 0,0,-32,96,96,108,118,102,102,102,-26,0,0,0,0,0 ;104 +db 0,0,24,24,0,56,24,24,24,24,60,0,0,0,0,0 ;105 +db 0,0,6,6,0,14,6,6,6,6,102,102,60,0,0,0 ;106 +db 0,0,-32,96,96,102,108,120,108,102,-26,0,0,0,0,0 ;107 +db 0,0,56,24,24,24,24,24,24,24,60,0,0,0,0,0 ;108 +db 0,0,0,0,0,-20,-2,-42,-42,-42,-58,0,0,0,0,0 ;109 +db 0,0,0,0,0,-36,102,102,102,102,102,0,0,0,0,0 ;110 +db 0,0,0,0,0,124,-58,-58,-58,-58,124,0,0,0,0,0 ;111 +db 0,0,0,0,0,-36,102,102,102,124,96,96,-16,0,0,0 ;112 +db 0,0,0,0,0,118,-52,-52,-52,124,12,12,30,0,0,0 ;113 +db 0,0,0,0,0,-36,118,102,96,96,-16,0,0,0,0,0 ;114 +db 0,0,0,0,0,124,-58,112,28,-58,124,0,0,0,0,0 ;115 +db 0,0,16,48,48,-4,48,48,48,54,28,0,0,0,0,0 ;116 +db 0,0,0,0,0,-52,-52,-52,-52,-52,118,0,0,0,0,0 ;117 +db 0,0,0,0,0,102,102,102,102,60,24,0,0,0,0,0 ;118 +db 0,0,0,0,0,-58,-58,-42,-42,-2,108,0,0,0,0,0 ;119 +db 0,0,0,0,0,-58,108,56,56,108,-58,0,0,0,0,0 ;120 +db 0,0,0,0,0,-58,-58,-58,-58,126,6,12,-8,0,0,0 ;121 +db 0,0,0,0,0,-2,-52,24,48,102,-2,0,0,0,0,0 ;122 +db 0,0,14,24,24,24,112,24,24,24,14,0,0,0,0,0 ;123 +db 0,0,24,24,24,24,0,24,24,24,24,0,0,0,0,0 ;124 +db 0,0,112,24,24,24,14,24,24,24,112,0,0,0,0,0 ;125 +db 0,0,118,-36,0,0,0,0,0,0,0,0,0,0,0,0 ;126 +db 0,0,0,0,16,56,108,-58,-58,-2,0,0,0,0,0,0 ;127 +db 0,0,60,102,-62,-64,-64,-62,102,60,12,6,124,0,0,0 ;128 +db 0,0,-52,-52,0,-52,-52,-52,-52,-52,118,0,0,0,0,0 ;129 +db 0,12,24,48,0,124,-58,-2,-64,-58,124,0,0,0,0,0 ;130 +db 0,16,56,108,0,120,12,124,-52,-52,118,0,0,0,0,0 ;131 +db 0,0,-52,-52,0,120,12,124,-52,-52,118,0,0,0,0,0 ;132 +db 0,96,48,24,0,120,12,124,-52,-52,118,0,0,0,0,0 ;133 +db 0,56,108,56,0,120,12,124,-52,-52,118,0,0,0,0,0 ;134 +db 0,0,0,0,60,102,96,102,60,12,6,60,0,0,0,0 ;135 +db 0,16,56,108,0,124,-58,-2,-64,-58,124,0,0,0,0,0 ;136 +db 0,0,-52,-52,0,124,-58,-2,-64,-58,124,0,0,0,0,0 ;137 +db 0,96,48,24,0,124,-58,-2,-64,-58,124,0,0,0,0,0 ;138 +db 0,0,102,102,0,56,24,24,24,24,60,0,0,0,0,0 ;139 +db 0,24,60,102,0,56,24,24,24,24,60,0,0,0,0,0 ;140 +db 0,96,48,24,0,56,24,24,24,24,60,0,0,0,0,0 ;141 +db 0,-58,-58,16,56,108,-58,-58,-2,-58,-58,0,0,0,0,0 ;142 +db 56,108,56,0,56,108,-58,-58,-2,-58,-58,0,0,0,0,0 ;143 +db 24,48,96,0,-2,102,96,124,96,102,-2,0,0,0,0,0 ;144 +db 0,0,0,0,-52,118,54,126,-40,-40,110,0,0,0,0,0 ;145 +db 0,0,62,108,-52,-52,-2,-52,-52,-52,-50,0,0,0,0,0 ;146 +db 0,16,56,108,0,124,-58,-58,-58,-58,124,0,0,0,0,0 ;147 +db 0,0,-58,-58,0,124,-58,-58,-58,-58,124,0,0,0,0,0 ;148 +db 0,96,48,24,0,124,-58,-58,-58,-58,124,0,0,0,0,0 ;149 +db 0,48,120,-52,0,-52,-52,-52,-52,-52,118,0,0,0,0,0 ;150 +db 0,96,48,24,0,-52,-52,-52,-52,-52,118,0,0,0,0,0 ;151 +db 0,0,-58,-58,0,-58,-58,-58,-58,126,6,12,120,0,0,0 ;152 +db 0,-58,-58,56,108,-58,-58,-58,-58,108,56,0,0,0,0,0 ;153 +db 0,-58,-58,0,-58,-58,-58,-58,-58,-58,124,0,0,0,0,0 ;154 +db 0,24,24,60,102,96,96,102,60,24,24,0,0,0,0,0 ;155 +db 0,56,108,100,96,-16,96,96,96,-26,-4,0,0,0,0,0 ;156 +db 0,0,102,102,60,24,126,24,126,24,24,0,0,0,0,0 ;157 +db 0,-8,-52,-52,-8,-60,-52,-34,-52,-52,-58,0,0,0,0,0 ;158 +db 0,14,27,24,24,24,126,24,24,24,24,-40,112,0,0,0 ;159 +db 0,24,48,96,0,120,12,124,-52,-52,118,0,0,0,0,0 ;160 +db 0,12,24,48,0,56,24,24,24,24,60,0,0,0,0,0 ;161 +db 0,24,48,96,0,124,-58,-58,-58,-58,124,0,0,0,0,0 ;162 +db 0,24,48,96,0,-52,-52,-52,-52,-52,118,0,0,0,0,0 ;163 +db 0,0,118,-36,0,-36,102,102,102,102,102,0,0,0,0,0 ;164 +db 118,-36,0,-58,-26,-10,-2,-34,-50,-58,-58,0,0,0,0,0 ;165 +db 0,60,108,108,62,0,126,0,0,0,0,0,0,0,0,0 ;166 +db 0,56,108,108,56,0,124,0,0,0,0,0,0,0,0,0 ;167 +db 0,0,48,48,0,48,48,96,-58,-58,124,0,0,0,0,0 ;168 +db 0,0,0,0,0,0,-2,-64,-64,-64,0,0,0,0,0,0 ;169 +db 0,0,0,0,0,0,-2,6,6,6,0,0,0,0,0,0 ;170 +db 0,-64,-64,-58,-52,-40,48,96,-36,-122,12,24,62,0,0,0 ;171 +db 0,-64,-64,-58,-52,-40,48,102,-50,-98,62,6,6,0,0,0 ;172 +db 0,0,24,24,0,24,24,60,60,60,24,0,0,0,0,0 ;173 +db 0,0,0,0,54,108,-40,108,54,0,0,0,0,0,0,0 ;174 +db 0,0,0,0,-40,108,54,108,-40,0,0,0,0,0,0,0 ;175 +db 17,68,17,68,17,68,17,68,17,68,17,68,17,68,0,0 ;176 +db 85,-86,85,-86,85,-86,85,-86,85,-86,85,-86,85,-86,0,0 ;177 +db -35,119,-35,119,-35,119,-35,119,-35,119,-35,119,-35,119,0,0 ;178 +db 24,24,24,24,24,24,24,24,24,24,24,24,24,24,0,0 ;179 +db 24,24,24,24,24,24,24,-8,24,24,24,24,24,24,0,0 ;180 +db 24,24,24,24,24,-8,24,-8,24,24,24,24,24,24,0,0 ;181 +db 54,54,54,54,54,54,54,-10,54,54,54,54,54,54,0,0 ;182 +db 0,0,0,0,0,0,0,-2,54,54,54,54,54,54,0,0 ;183 +db 0,0,0,0,0,-8,24,-8,24,24,24,24,24,24,0,0 ;184 +db 54,54,54,54,54,-10,6,-10,54,54,54,54,54,54,0,0 ;185 +db 54,54,54,54,54,54,54,54,54,54,54,54,54,54,0,0 ;186 +db 0,0,0,0,0,-2,6,-10,54,54,54,54,54,54,0,0 ;187 +db 54,54,54,54,54,-10,6,-2,0,0,0,0,0,0,0,0 ;188 +db 54,54,54,54,54,54,54,-2,0,0,0,0,0,0,0,0 ;189 +db 24,24,24,24,24,-8,24,-8,0,0,0,0,0,0,0,0 ;190 +db 0,0,0,0,0,0,0,-8,24,24,24,24,24,24,0,0 ;191 +db 24,24,24,24,24,24,24,31,0,0,0,0,0,0,0,0 ;192 +db 24,24,24,24,24,24,24,-1,0,0,0,0,0,0,0,0 ;193 +db 0,0,0,0,0,0,0,-1,24,24,24,24,24,24,0,0 ;194 +db 24,24,24,24,24,24,24,31,24,24,24,24,24,24,0,0 ;195 +db 0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0 ;196 +db 24,24,24,24,24,24,24,-1,24,24,24,24,24,24,0,0 ;197 +db 24,24,24,24,24,31,24,31,24,24,24,24,24,24,0,0 ;198 +db 54,54,54,54,54,54,54,55,54,54,54,54,54,54,0,0 ;199 +db 54,54,54,54,54,55,48,63,0,0,0,0,0,0,0,0 ;200 +db 0,0,0,0,0,63,48,55,54,54,54,54,54,54,0,0 ;201 +db 54,54,54,54,54,-9,0,-1,0,0,0,0,0,0,0,0 ;202 +db 0,0,0,0,0,-1,0,-9,54,54,54,54,54,54,0,0 ;203 +db 54,54,54,54,54,55,48,55,54,54,54,54,54,54,0,0 ;204 +db 0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0 ;205 +db 54,54,54,54,54,-9,0,-9,54,54,54,54,54,54,0,0 ;206 +db 24,24,24,24,24,-1,0,-1,0,0,0,0,0,0,0,0 ;207 +db 54,54,54,54,54,54,54,-1,0,0,0,0,0,0,0,0 ;208 +db 0,0,0,0,0,-1,0,-1,24,24,24,24,24,24,0,0 ;209 +db 0,0,0,0,0,0,0,-1,54,54,54,54,54,54,0,0 ;210 +db 54,54,54,54,54,54,54,63,0,0,0,0,0,0,0,0 ;211 +db 24,24,24,24,24,31,24,31,0,0,0,0,0,0,0,0 ;212 +db 0,0,0,0,0,31,24,31,24,24,24,24,24,24,0,0 ;213 +db 0,0,0,0,0,0,0,63,54,54,54,54,54,54,0,0 ;214 +db 54,54,54,54,54,54,54,-1,54,54,54,54,54,54,0,0 ;215 +db 24,24,24,24,24,-1,24,-1,24,24,24,24,24,24,0,0 ;216 +db 24,24,24,24,24,24,24,-8,0,0,0,0,0,0,0,0 ;217 +db 0,0,0,0,0,0,0,31,24,24,24,24,24,24,0,0 ;218 +db -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0 ;219 +db 0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,0,0 ;220 +db -16,-16,-16,-16,-16,-16,-16,-16,-16,-16,-16,-16,-16,-16,0,0 ;221 +db 15,15,15,15,15,15,15,15,15,15,15,15,15,15,0,0 ;222 +db -1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0 ;223 +db 0,0,0,0,0,118,-36,-40,-40,-36,118,0,0,0,0,0 ;224 +db 0,0,0,0,124,-58,-4,-58,-58,-4,-64,-64,64,0,0,0 ;225 +db 0,0,-2,-58,-58,-64,-64,-64,-64,-64,-64,0,0,0,0,0 ;226 +db 0,0,0,0,-2,108,108,108,108,108,108,0,0,0,0,0 ;227 +db 0,0,-2,-58,96,48,24,48,96,-58,-2,0,0,0,0,0 ;228 +db 0,0,0,0,0,126,-40,-40,-40,-40,112,0,0,0,0,0 ;229 +db 0,0,0,0,102,102,102,102,124,96,96,-64,0,0,0,0 ;230 +db 0,0,0,0,118,-36,24,24,24,24,24,0,0,0,0,0 ;231 +db 0,0,126,24,60,102,102,102,60,24,126,0,0,0,0,0 ;232 +db 0,0,56,108,-58,-58,-2,-58,-58,108,56,0,0,0,0,0 ;233 +db 0,0,56,108,-58,-58,-58,108,108,108,-18,0,0,0,0,0 ;234 +db 0,0,30,48,24,12,62,102,102,102,60,0,0,0,0,0 ;235 +db 0,0,0,0,0,126,-37,-37,126,0,0,0,0,0,0,0 ;236 +db 0,0,3,6,126,-37,-37,-13,126,96,-64,0,0,0,0,0 ;237 +db 0,0,28,48,96,96,124,96,96,48,28,0,0,0,0,0 ;238 +db 0,0,0,124,-58,-58,-58,-58,-58,-58,-58,0,0,0,0,0 ;239 +db 0,0,0,-2,0,0,-2,0,0,-2,0,0,0,0,0,0 ;240 +db 0,0,0,24,24,126,24,24,0,0,-1,0,0,0,0,0 ;241 +db 0,0,48,24,12,6,12,24,48,0,126,0,0,0,0,0 ;242 +db 0,0,12,24,48,96,48,24,12,0,126,0,0,0,0,0 ;243 +db 0,0,14,27,27,24,24,24,24,24,24,24,24,24,0,0 ;244 +db 24,24,24,24,24,24,24,24,-40,-40,112,0,0,0,0,0 ;245 +db 0,0,0,24,24,0,126,0,24,24,0,0,0,0,0,0 ;246 +db 0,0,0,0,118,-36,0,118,-36,0,0,0,0,0,0,0 ;247 +db 0,56,108,108,56,0,0,0,0,0,0,0,0,0,0,0 ;248 +db 0,0,0,0,0,0,24,24,0,0,0,0,0,0,0,0 ;249 +db 0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0 ;250 +db 0,15,12,12,12,12,12,-20,108,60,28,0,0,0,0,0 ;251 +db 0,-40,108,108,108,108,108,0,0,0,0,0,0,0,0,0 ;252 +db 0,112,-40,48,96,-56,-8,0,0,0,0,0,0,0,0,0 ;253 +db 0,0,0,0,124,124,124,124,124,124,0,0,0,0,0,0 ;254 +db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;255 diff --git a/GRAB/T.BAT b/GRAB/T.BAT new file mode 100644 index 0000000..2f7efb6 --- /dev/null +++ b/GRAB/T.BAT @@ -0,0 +1 @@ +sp d:\wc2gfx\objects.4 -o %1 %2 %3 %4 %5 \ No newline at end of file diff --git a/GRAB/VIEWLBM.C b/GRAB/VIEWLBM.C new file mode 100644 index 0000000..66dcd5a --- /dev/null +++ b/GRAB/VIEWLBM.C @@ -0,0 +1,324 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +char far *vram=(char far *)0xa0000000L; + +char inname[60]; +char outname[60]; + +unsigned char pal[768]; +unsigned char linebuf[2560]; +int xsz,ysz,planes,stencil,colors,mode; + +main(int argc,char *argv[]) +{ + if(argc==1) + { + printf("usage: VIEWLBM \n"); + return(0); + } + strcpy(inname,argv[1]); + if(strchr(inname,'.')==NULL) + { + strcat(inname,".lbm"); + } + strcpy(outname,argv[2]); + if(loadlbm(inname)) + { + printf("Error loading file: %s\n",inname); + exit(1); + } + getch(); + _asm mov ax,3h + _asm int 10h +} + +int savelinebuf(int xl) +{ + int a,b,c; + static int y=0; + if(!xl) + { + _asm mov ax,13h + _asm int 10h + outp(0x3c8,0); + for(a=0;a<768;a++) outp(0x3c9,pal[a]); + } + else + { + memcpy(vram+y*320,linebuf,320); + y++; + } +} + +int eschit(void) +{ + return(0); +} + +/****************************************************/ +/***** Deluxepaint LBM loader V1.0 **************/ +/****************************************************/ + +FILE *f1; +int cbits[8]={1,2,4,8,16,32,64,128}; +int lbmmode; /* 1=DPII, 2=DPIIe */ +char *errtxt=NULL; +char lasttype[5]; +char type[5]={"----"}; +long len; +int filetype; +char lbmtype[10]; +int checktype=0; + +int loadlbm(char *fname) +{ + int x,y,a,b,c; + long l; + char far *filebuf; + unsigned u; + int firstone=1; + filebuf=halloc(32768L,1L); + if(filebuf==NULL) + { + printf("Out of memory.\n"); + return(1); + } + { + f1=fopen(fname,"rb"); + if(f1==NULL) return(3); + setvbuf(f1,filebuf,_IOFBF,32768); + do + { + memcpy(lasttype,type,5); + /* get header */ + do + { + type[0]=getc(f1); + } + while(type[0]==0 && !feof(f1)); + type[1]=getc(f1); type[2]=getc(f1); type[4]=0; + type[3]=getc(f1); len=getc(f1)*256L*65536L; + if(firstone && memcmp(type,"FORM",4)) return(2); + firstone=0; + len+=getc(f1)*65536L; len+=getc(f1)*256L; len+=getc(f1); + /* process it */ + a=loadlbm2(); + if(errtxt!=NULL) + { + printf("%s\n",errtxt); + hfree(filebuf); + return(1); + } + if(a==-1) + { + printf("Not a Deluxepaint file!"); + return(2); + } + if(a==2) + { + printf("OLD:<%s> NEW<%s>\n",lasttype,type); + hfree(filebuf); + return(1); + } + else if(a==1) break; + } + while(!feof(f1) && !eschit()); + fclose(f1); + } + hfree(filebuf); + if(kbhit()) return(1); + return(0); +} + +int getaw(FILE *f1) +{ + unsigned int a; + a=getc(f1)*256; + a+=getc(f1); + return(a); +} + +int loadlbm2(void) +{ /* processes one block */ + long lastpos=ftell(f1); + int a,b,c,d,e,f; + if(!strcmp(type,"CMAP")) + { + /* color map */ + for(b=0;b<256*3;b++) + { + a=getc(f1)/4; + pal[b]=a; + } + savelinebuf(0); + } + else if(!strcmp(type,"FORM")) + { /* skip size of file, NO pointer movement */ + for(a=0;a<8;a++) lbmtype[a]=getc(f1); + lbmtype[a]=0; + /* LMDSBMHD - pakkaamaton formaatti */ + if(!memcmp(lbmtype,"ILBMBMHD",8)) + { + lbmmode=1; + } + else if(!memcmp(lbmtype,"PBM BMHD",8)) + { + lbmmode=2; + } + else + { + errtxt="Unknown fileformat!"; + return(-1); + } + getaw(f1); /* headerin lopun pituus */ + getaw(f1); /* - */ + xsz=getaw(f1); + ysz=getaw(f1); + getaw(f1); /* ? */ + getaw(f1); /* ? */ + + planes=getc(f1); + stencil=getc(f1); + colors=getaw(f1); + getaw(f1); /* ? */ + getaw(f1); /* ? */ + getaw(f1); /* screen-size-x */ + getaw(f1); /* screen-size-y */ + + //printf("Picture size %ix%ix%i\n",xsz,ysz,colors); + //printf("Loading and converting: "); + return(0); + } + else if(!strcmp(type,"CRNG")) + { + } + else if(!strcmp(type,"DPPS")) + { + } + else if(!strcmp(type,"DPPV")) + { + } + else if(!strcmp(type,"TINY")) + { /* pikkukuva */ + } + else if(!strcmp(type,"BODY") && lbmmode==2) + { + int lp,cbit,y=0; + filetype=1; /* LBM */ + while(!eschit() && y127) + { + c=getc(f1); + a=256-a; + if(a==0) c=0; + for(b=0;b<=a;b++) linebuf[lp++]=c; + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + linebuf[lp++]=c; + } + } + } + } + savelinebuf(xsz); + y++; + } + return(1); + } + else if(!strcmp(type,"BODY") && lbmmode==1) + { + int lp,cbit,y=0; + while(!eschit() && y127) + { + c=getc(f1); + a=256-a; + if(a==0) c=0; + for(b=0;b<=a;b++) + { + linebuf[lp++]|=c&128?cbit:0; + linebuf[lp++]|=c&64?cbit:0; + linebuf[lp++]|=c&32?cbit:0; + linebuf[lp++]|=c&16?cbit:0; + linebuf[lp++]|=c&8?cbit:0; + linebuf[lp++]|=c&4?cbit:0; + linebuf[lp++]|=c&2?cbit:0; + linebuf[lp++]|=c&1?cbit:0; + } + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + linebuf[lp++]|=c&128?cbit:0; + linebuf[lp++]|=c&64?cbit:0; + linebuf[lp++]|=c&32?cbit:0; + linebuf[lp++]|=c&16?cbit:0; + linebuf[lp++]|=c&8?cbit:0; + linebuf[lp++]|=c&4?cbit:0; + linebuf[lp++]|=c&2?cbit:0; + linebuf[lp++]|=c&1?cbit:0; + } + } + } + } + if(stencil) for(lp=0;lp127) + { + c=getc(f1); + a=256-a; + lp+=a*8+8; + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + } + lp+=a*8+8; + } + } + savelinebuf(xsz); + y++; + } + return(1); + } + else if(checktype) + { + return(2); + } + fseek(f1,lastpos+len,SEEK_SET); + return(0); +} + diff --git a/GRAB/VIEWLBM.EXE b/GRAB/VIEWLBM.EXE new file mode 100644 index 0000000..bf8e676 Binary files /dev/null and b/GRAB/VIEWLBM.EXE differ diff --git a/GRAB/VP b/GRAB/VP new file mode 100644 index 0000000..d5b8e24 --- /dev/null +++ b/GRAB/VP @@ -0,0 +1,21 @@ +ao.exe : ao.c lfcp.c sfcp.c + cl /qc /AL ao.c /link /e + +vp.exe : vp.c + cl /qc /AL vp.c /link /e + copy vp.exe c:\dos\prg + +col.exe : col.c + cl /qc /AL col.c /link /e + +glvp.exe : glvp.c vpl.c lfcp.c sfcp.c gfxsave.h + cl /qc /AL glvp.c /link /e + copy glvp.exe c:\dos\prg + +gfx.exe : gfx.c + cl /qc /AL gfx.c + copy gfx.exe c:\dos\prg + +# sp.exe : sp.c gfxsave.h +# cl /qc /AL sp.c /link /E + \ No newline at end of file diff --git a/GRAB/VP.C b/GRAB/VP.C new file mode 100644 index 0000000..8e9cced --- /dev/null +++ b/GRAB/VP.C @@ -0,0 +1,1187 @@ +#include +#include +#include +#include +#include + +/* contrast, default=100, a bit weird, + brightness, default=0 */ +int contrast=100,brightness=0; + +int getaw(FILE *); /* amiga word */ + +int checktype=0; +int xsz,ysz,planes,stencil,colors,mode; +int connectcol=1; /* color removed from sprites etc */ + +char *errtxt; + +int origox,origoy; + +int magcolors; +int fullscreen=0; + +int neverrll; + +int setpal(int xx); +int doblock(void); + +char filetype[9]; + +char far *vram=(char far *)0xa0000000; + +char basefilename[16]; +char basefilename2[16]; +char tmpstr[64]; + +unsigned char far picbuf[64000]; +char filebuf[8192]; + +unsigned char orgpalette[768]; +unsigned char palette[768]; + +FILE *f1; +char lasttype[5]; +char type[5]={"----"}; +long len; + +unsigned int maxp; +unsigned int pp=0; + +int showonly=0,dothird=0; + +main(int argc,char *argv[]) +{ + int sz1,sz2,sz3,sz4,num,mx,my; + int x,y,a,tx,ty,b,c,pix,xl; + long l,l1,l2,eob; + int beg,end; + unsigned u; + if(argc!=3) printf("Deluxe PIC viewer & Future Format Converter V1.0 (C) 1990 Sami Tammilehto\n" + "usage: VP [/3=do 3] [/S=show pic only & return immediately]\n" + "While viewing ? pops up a helpscreen\n\n" + "Picture format for multiple object recoginition:\n" + " Background color 255, col 1 reserved. Fonts' bounding boxes must NOT touch\n" + " If a font has separate parts, connect them with blue line (col 1)\n" + " Put ONE dot to the first column on each fontrows baseline\n" + " the dot must have the color used for connectors.\n"); + else + { + if(argv[2][1]=='3') dothird=1; + else showonly=1; + } + if(argc==1) return(0); + f1=fopen(argv[1],"rb"); + if(f1==NULL) { printf("File not found!\n"); return(1); } + else fclose(f1); + if(strrchr(argv[1],'\\')==NULL) strcpy(basefilename,argv[1]); + else strcpy(basefilename,strrchr(argv[1],'\\')+1); + *strchr(basefilename,'.')=0; + memcpy(basefilename2,basefilename,7); + basefilename2[7]=0; + _setvideomode(_MRES256COLOR); + if(!showonly) + { + _setcolor(7); + for(y=0;y<256;y++) + { + _setcolor(y); + _setpixel(y/16*2+320-33 ,200-33+(y&15)*2); + _setpixel(y/16*2+320-33+1,200-33+(y&15)*2); + _setpixel(y/16*2+320-33 ,200-33+(y&15)*2+1); + _setpixel(y/16*2+320-33+1,200-33+(y&15)*2+1); + } + } + { + f1=fopen(argv[1],"rb"); + setvbuf(f1,filebuf,_IOFBF,8192); + do + { + memcpy(lasttype,type,5); + /* get header */ + do + { + type[0]=getc(f1); + } + while(type[0]==0 && !feof(f1)); + type[1]=getc(f1); type[2]=getc(f1); type[4]=0; + type[3]=getc(f1); len=getc(f1)*256L*65536L; + len+=getc(f1)*65536L; len+=getc(f1)*256L; len+=getc(f1); + /* process it */ + a=doblock(); + if(errtxt) + { + _setvideomode(_DEFAULTMODE); + printf("%s\n",errtxt); + return(0); + } + if(a==2) + { + _setvideomode(_DEFAULTMODE); + printf("OLD:<%s> NEW<%s>\n",lasttype,type); + return(0); + } + else if(a==1) break; + } + while(!feof(f1) && !kbhit()); + fclose(f1); + } + if(showonly) return(0); + do + { + if(dothird) a='3'; else a=getch(); + switch(a) + { + case '*' : + for(y=0;y<256;y++) + { + _setcolor(y); + _setpixel(y/16*2+320-33 ,200-33+(y&15)*2); + _setpixel(y/16*2+320-33+1,200-33+(y&15)*2); + _setpixel(y/16*2+320-33 ,200-33+(y&15)*2+1); + _setpixel(y/16*2+320-33+1,200-33+(y&15)*2+1); + } + break; + case '?' : + keyhelp(); + break; + case '0' : + origox=origoy=0; + savefc(); + break; + case '1' : + origox=160; origoy=100; + savefc(); + break; + case '8' : + neverrll=1; + scanfonts(301); + neverrll=0; + break; + case 'M' : + case 'm' : + _setvideomode(_TEXTC80); + neverrll=0; + for(;neverrll!=99;) + { + printf("\n\n\nMAGazine piccysaver\n\n" + "Mode(press X to change): %s\n\n" + "Press F for full screen, M for multiple.\n", + neverrll?"nopack":"rll-pack"); + switch(getch()) + { + case 'x' : + case 'X' : + neverrll^=1; + break; + case 'f' : + case 'F' : + _setvideomode(_MRES256COLOR); + showpic(); + setpal(0); + magcolors=256; + fullscreen=1; + savesprite(basefilename,0,0,319,199,-1,1); + fullscreen=0; + neverrll=99; + break; + case 'm' : + case 'M' : + _setvideomode(_MRES256COLOR); + showpic(); + setpal(0); + magcolors=256; + scanfonts(301); + neverrll=99; + break; + } + } + neverrll=0; + magcolors=0; + break; + case '3' : + scanfonts(200); + break; + case '4' : + scanfonts(300); + break; + case '5' : + saveunpack(1); + break; + case '6' : + saveunpack(0); + break; + case 's' : + case 'S' : + scanfonts(100); + break; + case 'f' : + case 'F' : + scanfonts(0); + break; + case 'g' : + case 'G' : + scanfonts(2); + break; + case 'u' : + case 'U' : + scanfonts(1); + break; + case 't' : + case 'T' : + setpal(1); + savesprite(basefilename,0,0,319,199,0,0); + setpal(0); + break; + case 'c' : + case 'C' : + setpal(1); + savesprite(basefilename,0,0,319,199,160,100); + setpal(0); + break; + case ' ' : + setpal(1); + showpic(); + setpal(0); + break; + case '+' : brightness+=2; break; + case '-' : brightness-=2; break; + case 'p' : + case 'P' : + savepal(); + break; + case 'd' : + case 'D' : + dither(); + break; + } + if(dothird) a=27; + } + while(a!=27); + _setvideomode(_DEFAULTMODE); +} + +unsigned char sbuf[330]; + +int savepal(void) +{ + FILE *f1; + strcpy(tmpstr,basefilename); + strcat(tmpstr,".PAL"); + f1=fopen(tmpstr,"wb"); + fwrite(palette,1,768,f1); + fclose(f1); +} + +int cbits[8]={1,2,4,8,16,32,64,128}; +unsigned char linebuf[320]; +int filemode; /* 1=DPII, 2=DPIIe */ + +int doblock(void) +{ + long lastpos=ftell(f1); + int a,b,c,d,e,f; + if(!strcmp(type,"CMAP")) + { + /* color map */ + for(b=0;b<256*3;b++) + { + a=getc(f1)/4; + palette[b]=a; + } + setpal(0); + } + else if(!strcmp(type,"FORM")) + { /* skip size of file, NO pointer movement */ + for(a=0;a<8;a++) filetype[a]=getc(f1); + filetype[a]=0; + /* LMDSBMHD - pakkaamaton formaatti */ + if(!memcmp(filetype,"ILBMBMHD",8)) + { + filemode=1; + } + else if(!memcmp(filetype,"PBM BMHD",8)) + { + filemode=2; + } + else + { + errtxt="Not known format!"; + } + getaw(f1); /* headerin lopun pituus */ + getaw(f1); /* - */ + xsz=getaw(f1); + ysz=getaw(f1); + getaw(f1); /* ? */ + getaw(f1); /* ? */ + + planes=getc(f1); + stencil=getc(f1); + colors=getaw(f1); + if(!showonly) printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + "Basefilename: %s\n" + "Width:%i Height:%i\n" + "Planes:%i Colors:%i Stencil:%i\n" + ,basefilename,xsz,ysz,planes,colors,stencil); + getaw(f1); /* ? */ + getaw(f1); /* ? */ + getaw(f1); /* screen-size-x */ + getaw(f1); /* screen-size-y */ + return(0); + } + else if(!strcmp(type,"CRNG")) + { + } + else if(!strcmp(type,"DPPS")) + { + } + else if(!strcmp(type,"DPPV")) + { + } + else if(!strcmp(type,"TINY")) + { /* pikkukuva */ + } + else if(!strcmp(type,"BODY") && filemode==2) + { + int lp,cbit,y=0; + while(!kbhit() && y127) + { + c=getc(f1); + a=256-a; + if(a==0) c=0; + for(b=0;b<=a;b++) linebuf[lp++]=c; + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + linebuf[lp++]=c; + } + } + } + } + /*if(stencil) for(lp=0;lp127) + { + c=getc(f1); + a=256-a; + lp+=a*8+8; + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + } + lp+=a*8+8; + } + }*/ + { + _setcolor(y); + _setpixel(0,y); + } + memcpy(picbuf+y*320,linebuf,xsz); + y++; + } + showpic(); + return(1); + } + else if(!strcmp(type,"BODY") && filemode==1) + { + int lp,cbit,y=0; + while(!kbhit() && y127) + { + c=getc(f1); + a=256-a; + if(a==0) c=0; + for(b=0;b<=a;b++) + { + linebuf[lp++]|=c&128?cbit:0; + linebuf[lp++]|=c&64?cbit:0; + linebuf[lp++]|=c&32?cbit:0; + linebuf[lp++]|=c&16?cbit:0; + linebuf[lp++]|=c&8?cbit:0; + linebuf[lp++]|=c&4?cbit:0; + linebuf[lp++]|=c&2?cbit:0; + linebuf[lp++]|=c&1?cbit:0; + } + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + linebuf[lp++]|=c&128?cbit:0; + linebuf[lp++]|=c&64?cbit:0; + linebuf[lp++]|=c&32?cbit:0; + linebuf[lp++]|=c&16?cbit:0; + linebuf[lp++]|=c&8?cbit:0; + linebuf[lp++]|=c&4?cbit:0; + linebuf[lp++]|=c&2?cbit:0; + linebuf[lp++]|=c&1?cbit:0; + } + } + } + } + if(stencil) for(lp=0;lp127) + { + c=getc(f1); + a=256-a; + lp+=a*8+8; + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + } + lp+=a*8+8; + } + } + { + _setcolor(y); + _setpixel(0,y); + } + memcpy(picbuf+y*320,linebuf,xsz); + y++; + } + showpic(); + return(1); + } + else if(checktype) + { + return(2); + } + fseek(f1,lastpos+len,SEEK_SET); + return(0); +} + +int setpal(int xx) /* xx=0:normal,xx=1:inverse */ +{ + int a,b; + outp(0x3c8,0); + switch(xx) + { + case 0 : + for(a=0;a<768;a++) outp(0x3c9,palette[a]); + break; + + case 1 : + for(a=0;a<768;a++) outp(0x3c9,63-palette[a]); + break; + } +} + +int getaw(FILE *f1) +{ + unsigned int a; + a=getc(f1)*256; + a+=getc(f1); + return(a); +} + +/*----CUT HERE----CUT HERE----*/ + +int fontx1[256]; +int fontx2[256]; +int fonty1[256]; +int fonty2[256]; +int fonty[256]; /* baseline y */ +int fp; +int fpnt[256]; +int fwid[256]; +char frow[320]; + +int noblueremove; + +unsigned char asciitxt[256]={ +"!\"#$%&'()*+,-./0123456789:;<=>?@" +"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" +"abcdefghijklmnopqrstuvwxyz{|}" +"†„”Ž™ "}; + +int scanfonts(int pack) +{ + int maxup=0,maxdown=0,maxwidth=0; + int up,down; + int a,b,c,x,y,yb,y1,y2,x1=-1,x2,tx,ty; + int d,e,f; + long l; + int ascii=0,asciipnt=0; + FILE *f1; + if(pack==2) { pack=1; ascii=1; } + if(pack==200) + { + strcpy(tmpstr,basefilename); + strcat(tmpstr,".UNS"); + f1=fopen(tmpstr,"wb"); + } + setpal(0); + fp=0; + noblueremove=0; + for(y=0;y<200 && !kbhit();y++) if(_getpixel(0,y)!=255) + { + connectcol=_getpixel(0,y); + x=1; + for(;x<320 && !kbhit();x++) + { + b=99; + if(_getpixel(x,y)!=255) b=0; + if(_getpixel(x,y-1)!=255) b=1; + if(b!=99) + { + x1=x2=x; y1=y2=y-b; + if(!ascii && pack<99) setpal(1); + /* test box */ + for(c=1;c!=0 && !kbhit();) + { + c=0; + for(a=x1;a<=x2;a++) + { + if(_getpixel(a,y1)!=255) { y1--; c=1; } + if(_getpixel(a,y2)!=255) { y2++; c=1; } + } + for(a=y1;a<=y2;a++) + { + if(_getpixel(x1,a)!=255) { x1--; c=1; } + if(_getpixel(x2,a)!=255) { x2++; c=1; } + } + } + if(!ascii && pack<99) setpal(0); + y1++; y2--; x1++; x2--; + up=y-y1; down=y2-y; + if(up>maxup) maxup=up; + if(down>maxdown) maxdown=down; + x=x2+1; + if(x2-x1+1>maxwidth) maxwidth=x2-x1+1; + + fontx1[fp]=x1; + fontx2[fp]=x2; + fonty[fp]=y; + fonty1[fp]=y1; + fonty2[fp++]=y2; + if(!ascii) rectangle(x1,y1,x2,y2); + if(pack==100) + { + char str[3]; + str[1]=0; + str[0]=getch(); + if(str[0]==27) + { + showpic(); + return(0); + } + strcpy(tmpstr,basefilename2); + strcat(tmpstr,str); + rectangle(x1,y1,x2,y2); + savesprite(tmpstr,x1,y1,x2,y2,x1,y1); + } + if(pack==300 || pack==301) + { + char str[3]; + str[1]=0; + str[0]=getch(); + if(str[0]==27) + { + showpic(); + return(0); + } + strcpy(tmpstr,basefilename2); + strcat(tmpstr,str); + rectangle(x1,y1,x2,y2); + savesprite(tmpstr,x1,y1,x2,y2,-1,pack-300); + } + if(pack==200) + { + int tx,tu; + rectangle(x1,y1,x2,y2); + for(ty=y1;ty=(l&15);b--) putc('X',f1); + l=ftell(f1); + } + b=getch(); + fpnt[b]=(unsigned)(l/16L); + fwid[b]=x2-x1+1; + for(ty=y1;ty0) fwrite(frow,1,c,f1); + else putc(0,f1); + } + for(ty=fonty2[a];ty<=y2;ty++) putc(0,f1); + putc(0,f1); + } + fseek(f1,16L,SEEK_SET); /* fonttable */ + for(a=0;a<256;a++) putw(fpnt[a],f1); + for(a=b=c=0;a<256;a++) if(fwid[a]!=0x101) { b+=fwid[a]; c++; } + if(c==0) b=1; else b/=c; + fwid[32]=8; /*b;*/ + for(a=0;a<256;a++) putc(fwid[a],f1); + close(f1); + } + if(pack==1) + { /* unpacked */ + strcpy(tmpstr,basefilename); + strcat(tmpstr,".uff"); + f1=fopen(tmpstr,"wb"); + fprintf(f1,"UFF100\x1aXXX"); + putw(maxwidth,f1); + putw(maxup+maxdown+1,f1); + putw(maxup,f1); + memset(fpnt,0,2*256); + memset(fwid,1,2*256); + fseek(f1,512L+256L,SEEK_CUR); /* skip fonttable */ + for(a=0;a=(l&15);b--) putc('X',f1); + l=ftell(f1); + } + if(ascii) + { + b=asciitxt[asciipnt++]; + } + else b=getch(); + fpnt[b]=(unsigned)(l/16L); + fwid[b]=x2-x1+1; + for(ty=y1;ty0) + { + putc(c,f1); + fwrite(rllbuf+d,c,1,f1); + } + c=b+126; if(c>u) c=u; + for(e=b;e126) + { + putc(c,f1); + fwrite(rllbuf+d,c,1,f1); + d=b; + c=0; + } + } + } + } + } + else + { + for(ty=y1;ty<=y2;ty++) + { + c=2; + f=0; + for(tx=x1;tx<=x2;tx++) + { + b=_getpixel(tx,ty); + if(b!=255) + { /* stuff! */ + f++; + d=0; e=c; c+=4; + frow[e]=(tx-ox)&255; /* x */ + frow[e+1]=(tx-ox)/256; /* x */ + for(;tx<=x2;tx++) + { + b=_getpixel(tx,ty); + _setcolor(b); + _setpixel(tx,ty); + if(b==255) break; + d++; frow[c++]=b; + } + frow[e+2]=d&255; /* count */ + frow[e+3]=d/256; /* count */ + } + else + { + _setcolor(b); + _setpixel(tx,ty); + } + } + frow[0]=f&255; + frow[1]=f/256; + if(f>0) fwrite(frow,1,c,f1); + else putw(0,f1); + } + } + fclose(f1); + while(kbhit()) getch(); + setpal(0); +} + +int showpic(void) +{ + setpal(0); + memcpy(vram,picbuf,64000); +} + +int savefc(void) +{ /* color 255 considered transparent */ + int x,y,a,b,c,d,e,f; + int leftx=origox,rightx=origox,upy=origoy,downy=origoy; + FILE *f1; + long sizepos; + setpal(1); + strcpy(tmpstr,basefilename); + strcat(tmpstr,".FCP"); + f1=fopen(tmpstr,"wb"); + + fprintf(f1,"FCP1.000"); + putw(0,f1); /* file type: 0=single pictures, 1=differential animation */ + putw(1,f1); /* number of pictures */ + putw(-1,f1); /* unused */ + putw(-1,f1); /* unused */ + putw(16+4,f1); putw(0,f1); /* far pointer(s) to picture(s) */ + + /* picture header, 16 bytes */ + putc(1,f1); /* screen mode, 1=320x200x256 */ + putc(1,f1); /* flags, incl. palette */ + sizepos=ftell(f1); + putw(-1,f1); /* leftmost x */ + putw(-1,f1); /* uppermost y */ + putw(-1,f1); /* rightmost x */ + putw(-1,f1); /* bottommost y */ + putw(-1,f1); /* unused */ + putw(-1,f1); /* unused */ + putw(-1,f1); /* unused */ + + for(a=0;a<768;a++) putc(palette[a],f1); + + for(y=0;y<200;y++) + { + for(x=0;x<320;) + { + if((a=_getpixel(x,y))!=255) + { + if(ydowny) downy=y; + if(xrightx) rightx=x; + sbuf[b]=255; + /* entire continuos part read */ + for(d=a=0;ad) + { + putw(a-d,f1); + for(e=d;ed) + { + putw(a-d,f1); + for(e=d;e NEW<%s>\n",lasttype,type); + hfree(filebuf); + return(1); + } + else if(a==1) break; + } + while(!feof(f1) && !eschit()); + fclose(f1); + } + hfree(filebuf); + if(kbhit()) return(1); + return(0); +} + +int getaw(FILE *f1) +{ + unsigned int a; + a=getc(f1)*256; + a+=getc(f1); + return(a); +} + +int loadlbm2(void) +{ /* processes one block */ + long lastpos=ftell(f1); + int a,b,c,d,e,f; + if(!strcmp(type,"CMAP")) + { + /* color map */ + for(b=0;b<256*3;b++) + { + a=getc(f1)/4; + pal[b]=a; + } + } + else if(!strcmp(type,"FORM")) + { /* skip size of file, NO pointer movement */ + for(a=0;a<8;a++) lbmtype[a]=getc(f1); + lbmtype[a]=0; + /* LMDSBMHD - pakkaamaton formaatti */ + if(!memcmp(lbmtype,"ILBMBMHD",8)) + { + lbmmode=1; + } + else if(!memcmp(lbmtype,"PBM BMHD",8)) + { + lbmmode=2; + } + else + { + errtxt="Unknown fileformat!"; + return(-1); + } + getaw(f1); /* headerin lopun pituus */ + getaw(f1); /* - */ + xsz=getaw(f1); + ysz=getaw(f1); + getaw(f1); /* ? */ + getaw(f1); /* ? */ + + planes=getc(f1); + stencil=getc(f1); + colors=getaw(f1); + getaw(f1); /* ? */ + getaw(f1); /* ? */ + getaw(f1); /* screen-size-x */ + getaw(f1); /* screen-size-y */ + return(0); + } + else if(!strcmp(type,"CRNG")) + { + } + else if(!strcmp(type,"DPPS")) + { + } + else if(!strcmp(type,"DPPV")) + { + } + else if(!strcmp(type,"TINY")) + { /* pikkukuva */ + } + else if(!strcmp(type,"BODY") && lbmmode==2) + { + int lp,cbit,y=0; + filetype=1; /* LBM */ + while(!eschit() && y127) + { + c=getc(f1); + a=256-a; + if(a==0) c=0; + for(b=0;b<=a;b++) linebuf[lp++]=c; + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + linebuf[lp++]=c; + } + } + } + } + memcpy(pic+y*320,linebuf,xsz); + y++; + } + return(1); + } + else if(!strcmp(type,"BODY") && lbmmode==1) + { + int lp,cbit,y=0; + while(!eschit() && y127) + { + c=getc(f1); + a=256-a; + if(a==0) c=0; + for(b=0;b<=a;b++) + { + linebuf[lp++]|=c&128?cbit:0; + linebuf[lp++]|=c&64?cbit:0; + linebuf[lp++]|=c&32?cbit:0; + linebuf[lp++]|=c&16?cbit:0; + linebuf[lp++]|=c&8?cbit:0; + linebuf[lp++]|=c&4?cbit:0; + linebuf[lp++]|=c&2?cbit:0; + linebuf[lp++]|=c&1?cbit:0; + } + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + linebuf[lp++]|=c&128?cbit:0; + linebuf[lp++]|=c&64?cbit:0; + linebuf[lp++]|=c&32?cbit:0; + linebuf[lp++]|=c&16?cbit:0; + linebuf[lp++]|=c&8?cbit:0; + linebuf[lp++]|=c&4?cbit:0; + linebuf[lp++]|=c&2?cbit:0; + linebuf[lp++]|=c&1?cbit:0; + } + } + } + } + if(stencil) for(lp=0;lp127) + { + c=getc(f1); + a=256-a; + lp+=a*8+8; + } + else + { + for(b=0;b<=a;b++) + { + c=getc(f1); + } + lp+=a*8+8; + } + } + memcpy(pic+y*320,linebuf,xsz); + y++; + } + return(1); + } + else if(checktype) + { + return(2); + } + fseek(f1,lastpos+len,SEEK_SET); + return(0); +} + +/***************************************************************/ +/***** Eye of the Beholder 256 color loader (CMP) V1.0 *******/ +/***************************************************************/ + +int loadcmp(char *fname) +{ + int x,y,a,b,c; + long l; + char far *filebuf; + unsigned u; + int firstone=1; + filebuf=halloc(32768L,1L); + printf("\nLoading and uncompressing picture (CMP): "); + if(filebuf==NULL) + { + printf("Out of memory.\n"); + return(1); + } + { + f1=fopen(fname,"rb"); + if(f1==NULL) return(3); + setvbuf(f1,filebuf,_IOFBF,32768); + getw(f1); + getw(f1); + a=getw(f1); /* unpacked len */ + getw(f1); + getw(f1); + cmpunpack(a); + fclose(f1); + } + hfree(filebuf); + if(kbhit()) return(1); + return(0); +} + +int cmpunpack(unsigned int unplen) +{ + int a,b,c,x=0; + unsigned int u,col,cnt; + int bufpnt=0; + while(bufpnt64) + { + printf("."); + x=0; + } + a=getc(f1); + if(a==0xfe) + { + cnt=getw(f1); + col=getc(f1); + memset(pic+bufpnt,col,cnt); + bufpnt+=cnt; + } + else if(a==0xff) + { + cnt=getw(f1); + u=getw(f1); + for(b=0;b=0xc0) + { + cnt=a-0xc0+3; + u=getw(f1); + for(b=0;b0x80) + { + cnt=a-0x80; + fread(pic+bufpnt,cnt,1,f1); + bufpnt+=cnt; + } + else + { + cnt=(a/16)+3; + u=bufpnt-((a&15)*256+getc(f1)); + for(b=0;b0) x+=a*4; + else if(a&1) + { + a=(a&127)>>1; + for(c=0;c>1; + b=getc(f1); + for(c=0;c result=X*Y/256 +PUBLIC _muldata +_muldata dw 32768 dup(0) +xmulseg ENDS + +xlineseg SEGMENT para public 'DATA' + ;high=X, low=Y, shl=1 => result=offset to blit routine +PUBLIC _linedata +_linedata dw 32768 dup(0) +xlineseg ENDS + +code SEGMENT para public 'CODE' + ASSUME cs:code +LOCALS +.386 +EXTRN lblt_table:word + +MINX equ -10 +MAXX equ 10 +MINY equ -8 +MAXY equ 8 + +rows dw 200 dup(0) +vram dw 0a000h +mulseg dw SEG _muldata +lineseg dw SEG _linedata +bufseg dw SEG _bufdata + +PUBLIC _xyzdata + ;x,y,-,-, e1a,e1b,e1c,e1d, e2a,e2b,e2c,e2d, e3a,e3b,e3c,e3d +_xyzdata dw 32*32 dup(4*4 dup(0)) +RECLEN equ (4*4*2) +PUBLIC _plane +_plane dw 0 +drawplane dw 0101h,0202h,0404h +drawstore dw 8,16,24 + +PUBLIC _asminit +_asminit PROC FAR + CBEG + call lineblit_init + call xyzdata_init + call rows_init + CEND +_asminit ENDP + +PUBLIC _setborder +_setborder PROC FAR + CBEG + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,11h+32 + out dx,al + mov al,[bp+6] + out dx,al + CEND +_setborder ENDP + +xyzdata_init PROC NEAR + mov cx,32*32 + mov bx,OFFSET _xyzdata + mov ax,OFFSET @@ret +@@1: mov cs:[bx+8+2],ax + mov cs:[bx+8+6],ax + mov cs:[bx+16+2],ax + mov cs:[bx+16+6],ax + mov cs:[bx+24+2],ax + mov cs:[bx+24+6],ax + add bx,RECLEN + loop @@1 +@@ret: ret +xyzdata_init ENDP + +rows_init PROC NEAR + mov cx,200 + mov bx,OFFSET rows + mov dx,320 + xor ax,ax +@@1: mov cs:[bx],ax + add ax,dx + add bx,2 + loop @@1 + ret +rows_init ENDP + +PUBLIC _setpalette +_setpalette PROC FAR + CBEG + mov dx,3c8h + xor al,al + out dx,al + inc dx + movpar si,0 + movpar ds,1 + mov cx,768 + rep outsb + CEND +_setpalette ENDP + +ALIGN 2 +tmpcolor dw 0 +tmpcount dw 0 + +PUBLIC _asmloop2 +_asmloop2 PROC FAR + CBEG + mov ax,cs + mov ds,ax + mov si,OFFSET _xyzdata + mov cx,32*32 +@@1: mov ax,ds:[si+4] + mov bx,ds:[si+6] + add bx,ax + cmp bx,16*199 + jb @@2 + sub bx,ax + neg ax +@@2: mov ds:[si+4],ax + mov ds:[si+6],bx + shr bx,4 + mov ds:[si+2],bx + add si,RECLEN + loop @@1 + CEND +_asmloop2 ENDP + +PUBLIC _asmloop1 +_asmloop1 PROC FAR + CBEG + mov ax,cs + mov ds,ax + mov bx,ds:_plane + inc bx + cmp bx,3 + jb @@i1 + xor bx,bx +@@i1: mov ds:_plane,bx + shl bx,1 + mov ax,ds:drawplane[bx] + mov ds:tmpcolor,ax + mov bp,ds:drawstore[bx] + mov es,ds:vram + mov fs,ds:lineseg + mov gs,ds:bufseg + xor ebx,ebx + ;===erase=== + mov ds:tmpcount,25 + mov si,OFFSET _xyzdata + mov dx,ds:tmpcolor +@@3: zzz=0 + REPT 40 + local l1 + mov di,ds:[si+zzz+bp+0] + call ds:[si+zzz+bp+2] + zzz=zzz+RECLEN +l1: ENDM + add si,40*RECLEN + dec ds:tmpcount + jz @@2 + jmp @@3 +@@2: ;===draw=== + mov ds:tmpcount,25 + mov si,OFFSET _xyzdata + mov dx,ds:tmpcolor +@@1: zzz=0 + REPT 40 + local l1 + mov cx,ds:[si+zzz+2+RECLEN] ;Y2 + mov bx,ds:[si+zzz+2] ;Y1 + sub cl,bl + add bx,bx + mov di,ds:rows[bx] + + mov bx,ds:[si+zzz+0+RECLEN] ;X2 + mov ax,ds:[si+zzz+0] ;X1 + sub bl,al + add di,ax + + mov ds:[si+zzz+bp+0],di + mov bh,cl + add bx,bx + mov cx,fs:[bx] + mov ds:[si+zzz+bp+2],cx + call cx + + zzz=zzz+RECLEN +l1: ENDM + add si,40*RECLEN + dec ds:tmpcount + jz @@0 + jmp @@1 +@@0: CEND +_asmloop1 ENDP + +;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + +;include lineblit.inc ;linked + +lineblit_init PROC NEAR + mov es,cs:lineseg + mov ax,cs + mov ds,ax + mov si,OFFSET lblt_table + ;fill with offset/rets + mov ax,cs:[si] + xor di,di + mov cx,32768 + rep stosw + ;add the actual line offsets + mov si,OFFSET lblt_table + mov cx,MAXY-MINY+1 ;Y + xor ebx,ebx + mov bh,MINY +@@2: push cx + mov cx,MAXX-MINX+1 ;X + mov bl,MINX +@@1: mov ax,ds:[si] + add si,2 + mov dx,bx + shl bx,1 + mov es:[bx],ax + mov bx,dx + inc bl + loop @@1 + pop cx + inc bh + loop @@2 + ret +lineblit_init ENDP + +lineblit PROC NEAR + ;di=x+y*320 (base) + ;bh=Y dist + ;bl=X dist + ret +lineblit ENDP + +PUBLIC _line +_line PROC FAR + CBEG + mov dx,[bp+8] + mov bx,dx + shl bx,1 + mov di,cs:rows[bx] + mov ax,[bp+6] + add di,ax + neg ax + add ax,[bp+10] + mov bl,al + neg dx + add dx,[bp+12] + mov bh,dl + shl bx,1 + mov al,[bp+14] + mov ah,al + mov es,cs:vram + mov ds,cs:lineseg + call word ptr ds:[bx] + CEND +_line ENDP + +;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + +code ENDS + END + \ No newline at end of file diff --git a/GRID/ASM.OBJ b/GRID/ASM.OBJ new file mode 100644 index 0000000..67a687e Binary files /dev/null and b/GRID/ASM.OBJ differ diff --git a/GRID/ASM.OK b/GRID/ASM.OK new file mode 100644 index 0000000..053a95c --- /dev/null +++ b/GRID/ASM.OK @@ -0,0 +1,254 @@ +include clink.inc + +xbufseg SEGMENT para public 'DATA' + ;high=X, low=Y => result=X*Y/256 +PUBLIC _bufdata +_bufdata dw 32768 dup(0) +xbufseg ENDS + +xmulseg SEGMENT para public 'DATA' + ;high=X, low=Y => result=X*Y/256 +PUBLIC _muldata +_muldata dw 32768 dup(0) +xmulseg ENDS + +xlineseg SEGMENT para public 'DATA' + ;high=X, low=Y, shl=1 => result=offset to blit routine +PUBLIC _linedata +_linedata dw 32768 dup(0) +xlineseg ENDS + + +code SEGMENT para public 'CODE' + ASSUME cs:code +LOCALS +.386 +EXTRN lblt_table:word + +rows dw 200 dup(0) +vram dw 0a000h +mulseg dw SEG _muldata +lineseg dw SEG _linedata +bufseg dw SEG _bufdata + +PUBLIC _xyzdata + ;x,y,-,-, e1a,e1b,e1c,e1d, e2a,e2b,e2c,e2d, e3a,e3b,e3c,e3d +_xyzdata dw 32*32 dup(4*4 dup(0)) +RECLEN equ (4*4*2) +_plane dw 0 +drawplane dw 0101h,0202h,0404h +drawstore dw 8,16,24 + +PUBLIC _asminit +_asminit PROC FAR + CBEG + call lineblit_init + call xyzdata_init + call rows_init + CEND +_asminit ENDP + +PUBLIC _setborder +_setborder PROC FAR + CBEG + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,11h+32 + out dx,al + mov al,[bp+6] + out dx,al + CEND +_setborder ENDP + +xyzdata_init PROC NEAR + mov cx,32*32 + mov bx,OFFSET _xyzdata + mov ax,cs:lblt_table[0] +@@1: mov cs:[bx+8+2],ax + mov cs:[bx+8+6],ax + mov cs:[bx+16+2],ax + mov cs:[bx+16+6],ax + mov cs:[bx+24+2],ax + mov cs:[bx+24+6],ax + add bx,RECLEN + loop @@1 + ret +xyzdata_init ENDP + +rows_init PROC NEAR + mov cx,200 + mov bx,OFFSET rows + mov dx,320 + xor ax,ax +@@1: mov cs:[bx],ax + add ax,dx + add bx,2 + loop @@1 + ret +rows_init ENDP + +ALIGN 2 +tmpcolor dw 0 +tmpcount dw 0 + +PUBLIC _asmloop1 +_asmloop1 PROC FAR + CBEG + mov ax,cs + mov ds,ax + int 3 + mov bx,ds:_plane + inc bx + cmp bx,3 + jb @@i1 + xor bx,bx +@@i1: mov ds:_plane,bx + shl bx,1 + mov ax,ds:drawplane[bx] + mov ds:tmpcolor,ax + mov bp,ds:drawstore[bx] + mov es,ds:vram + mov fs,ds:lineseg + mov gs,ds:bufseg + xor ebx,ebx + ;===erase=== + mov ds:tmpcount,31 + mov si,OFFSET _xyzdata + mov dx,ds:tmpcolor +@@3: zzz=0 + REPT 31 + local l1 + mov di,ds:[si+zzz+bp+0] + call ds:[si+zzz+bp+2] + mov di,ds:[si+zzz+bp+4] + call ds:[si+zzz+bp+6] + zzz=zzz+RECLEN +l1: ENDM + add si,32*RECLEN + dec ds:tmpcount + jz @@2 + jmp @@3 +@@2: ;===draw=== + mov ds:tmpcount,31 + mov si,OFFSET _xyzdata + mov dx,ds:tmpcolor +@@1: zzz=0 + REPT 31 + local l1 + mov cx,ds:[si+zzz+2+RECLEN] ;Y2 + mov bx,ds:[si+zzz+2] ;Y1 + sub cx,bx + jc l1 + shl bx,1 + mov di,ds:rows[bx] + + mov bx,ds:[si+zzz+0+RECLEN] ;X2 + mov ax,ds:[si+zzz+0] ;X1 + sub bx,ax + jc l1 + add di,ax + + mov bh,cl + mov ds:[si+zzz+bp+0],di + shl bx,1 + mov cx,fs:[bx] + mov ds:[si+zzz+bp+2],cx + call dx + + mov cx,ds:[si+zzz+2+32*RECLEN] ;Y2 + mov bx,ds:[si+zzz+2] ;Y1 + sub cx,bx + jc l1 + shl bx,1 + mov di,ds:rows[bx] + + mov bx,ds:[si+zzz+0+32*RECLEN] ;X2 + mov ax,ds:[si+zzz+0] ;X1 + sub bx,ax + jc l1 + add di,ax + + mov bh,cl + mov ds:[si+zzz+bp+4],di + shl bx,1 + mov cx,fs:[bx] + mov ds:[si+zzz+bp+6],cx + call dx + + zzz=zzz+RECLEN +l1: ENDM + add si,32*RECLEN + dec ds:tmpcount + jz @@0 + jmp @@1 +@@0: CEND +_asmloop1 ENDP + +;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + +;include lineblit.inc ;linked + +lineblit_init PROC NEAR + mov es,cs:lineseg + mov ax,cs + mov ds,ax + ;fill with offset/rets + mov si,OFFSET lblt_table + mov ax,cs:[si] + xor di,di + mov cx,32768 + rep stosw + ;add the actual line offsets + mov cx,12 ;Y + xor ebx,ebx +@@2: push cx + mov cx,12 ;X + xor bl,bl +@@1: mov ax,ds:[si] + add si,2 + mov es:[ebx*2],ax + inc bl + loop @@1 + pop cx + inc bh + loop @@2 + ret +lineblit_init ENDP + +lineblit PROC NEAR + ;di=x+y*320 (base) + ;bh=Y dist + ;bl=X dist + ret +lineblit ENDP + +PUBLIC _line +_line PROC FAR + CBEG + mov dx,[bp+8] + mov bx,dx + shl bx,1 + mov di,cs:rows[bx] + mov ax,[bp+6] + add di,ax + neg ax + add ax,[bp+10] + mov bl,al + neg dx + add dx,[bp+12] + mov bh,dl + shl bx,1 + mov al,[bp+14] + mov ah,al + mov es,cs:vram + mov ds,cs:lineseg + call word ptr ds:[bx] + CEND +_line ENDP + +;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + +code ENDS + END + \ No newline at end of file diff --git a/GRID/CLINK.INC b/GRID/CLINK.INC new file mode 100644 index 0000000..3d5effb --- /dev/null +++ b/GRID/CLINK.INC @@ -0,0 +1,41 @@ +FIXWORD MACRO ;go to word boundary + if ($-start) mod 1 + db 0 + endif + ENDM + +CDS MACRO + mov ax,cs + mov ds,ax + ENDM + +CBEG MACRO ;C/Assembler procedure begin + push bp + mov bp,sp + push si + push di + push ds + ENDM + +CEND MACRO ;C/Assembler procedure end + pop ds + pop di + pop si + pop bp + ret + ENDM + +CBEG0 MACRO ;C/Assembler procedure begin, minimal + push bp + mov bp,sp + ENDM + +CEND0 MACRO ;C/Assembler procedure end, minimal + pop bp + ret + ENDM + +movpar MACRO reg,par ;loads parameter [par(0..)] to register [reg] + mov reg,[bp+par*2+6] + ENDM + diff --git a/GRID/DOLINE.BBK b/GRID/DOLINE.BBK new file mode 100644 index 0000000..146a155 --- /dev/null +++ b/GRID/DOLINE.BBK @@ -0,0 +1,119 @@ +// create code for line blitter + +#include +#include + +char *vram=(char *)0xa0000000L; + +FILE *out; + +int isor; + +void line(int x1,int y1,int x2,int y2) +{ + int xd=x2-x1; + int yd=y2-y1; + int a,d,c,x,y; + memset(vram,0,16*320); + if(xd>yd) + { + d=-xd/2; + while(x10) + { + d-=xd; + y1++; + } + } + } + else + { + d=-yd/2; + while(x10) + { + d-=yd; + x1++; + } + } + } + //vram[x2+y2*320]=1; + fprintf(out,"lblt_%ia%i:\n",x2,y2); + c=0; + for(y=0;y<16;y++) for(x=0;x<16;x++) if(vram[x+y*320]) + { + if(c==1) fprintf(out,"lblt_%ib%i:\n",x2,y2); + if(vram[x+y*320+1]) + { + fprintf(out,"mov ax,gs:[di+%i]\n",x+y*320); + if(isor) fprintf(out,"or ax,dx\n"); + else fprintf(out,"xor ax,dx\n"); + fprintf(out,"mov gs:[di+%i],ax\n",x+y*320); + fprintf(out,"mov es:[di+%i],ax\n",x+y*320); + vram[x+y*320]=vram[x+y*320+1]=0; + } + else + { + fprintf(out,"mov al,gs:[di+%i]\n",x+y*320); + if(isor) fprintf(out,"or al,dl\n"); + else fprintf(out,"xor al,dl\n"); + fprintf(out,"mov gs:[di+%i],al\n",x+y*320); + fprintf(out,"mov es:[di+%i],al\n",x+y*320); + vram[x+y*320]=0; + } + c++; + } + if(c<=1) fprintf(out,"lblt_%ib%i:\n",x2,y2); +} + +main() +{ + int x,y; + _asm mov ax,13h + _asm int 10h + out=fopen("lineblit.inc","wt"); + fprintf(out,";LineBlitter core - created by doline.c\n"); + fprintf(out,"lblt_table LABEL WORD\n"); + for(isor=0;isor>=0;isor--) + { + for(y=0;y<12;y++) + { + for(x=0;x<12;x++) + { + fprintf(out,"dw OFFSET lblt_%i%a%i\n",x,y); + } + } + } + for(isor=0;isor>=0;isor--) + { + for(y=0;y<12;y++) + { + for(x=0;x<12;x++) + { + fprintf(out,"dw OFFSET lblt_%i%b%i\n",x,y); + } + } + } + for(isor=0;isor>=0;isor--) + { + for(y=0;y<12;y++) + { + for(x=0;x<12;x++) + { + line(0,0,x,y); + fprintf(out,"ret\n",x,y); + } + } + } + fclose(out); + _asm mov ax,3h + _asm int 10h +} diff --git a/GRID/DOLINE.C b/GRID/DOLINE.C new file mode 100644 index 0000000..d03221a --- /dev/null +++ b/GRID/DOLINE.C @@ -0,0 +1,126 @@ +// create code for line blitter + +#include +#include + +char *vram=(char *)0xa0000000L+320*16+16; +char *vram0=(char *)0xa0000000L; + +FILE *out; + +int isor; + +void line(int x1,int y1,int x2,int y2) +{ + int xd,xds; + int yd,yds; + int a,d,c,x,y; + xd=x2-x1; + if(xd<0) + { + xd=-xd; + xds=-1; + } + else xds=1; + yd=y2-y1; + if(yd<0) + { + yd=-yd; + yds=-1; + } + else yds=1; + if(xd>yd) + { + d=-xd/2; + while(x1!=x2 || y1!=y2) + { + kbhit(); + vram[x1+y1*320]=2; + x1+=xds; + d+=yd; + if(d>0) + { + d-=xd; + y1+=yds; + } + } + } + else + { + d=-yd/2; + while(x1!=x2 || y1!=y2) + { + kbhit(); + vram[x1+y1*320]=2; + y1+=yds; + d+=xd; + if(d>0) + { + d-=yd; + x1+=xds; + } + } + } + vram[x2+y2*320]=1; + fprintf(out,"lblt_%ib%i:\n",x2&63,y2&63); + for(y=-16;y<16;y++) for(x=-16;x<16;x++) if(vram[x+y*320]==2) + { + if(vram[x+y*320+1]==2) + { + fprintf(out,"mov ax,gs:[di+%i]\n",x+y*320); + fprintf(out,"xor ax,dx\n"); + fprintf(out,"mov gs:[di+%i],ax\n",x+y*320); + fprintf(out,"mov es:[di+%i],ax\n",x+y*320); + vram[x+y*320]=vram[x+y*320+1]=0; + } + else + { + fprintf(out,"mov al,gs:[di+%i]\n",x+y*320); + fprintf(out,"xor al,dl\n"); + fprintf(out,"mov gs:[di+%i],al\n",x+y*320); + fprintf(out,"mov es:[di+%i],al\n",x+y*320); + vram[x+y*320]=0; + } + c++; + } +} + +#define MINX 10 +#define MAXX 10 +#define MINY 8 +#define MAXY 8 + +main() +{ + int x,y; + _asm mov ax,13h + _asm int 10h + out=fopen("lineblit.inc","wt"); + fprintf(out,";LineBlitter core - created by doline.c\n"); + fprintf(out,"dw OFFSET lblt_1b0 ;only dot\n",x&63,y&63); + fprintf(out,"lblt_table LABEL WORD\n"); + for(isor=0;isor>=0;isor--) + { + for(y=-MINY;y<=MAXY;y++) + { + for(x=-MINX;x<=MAXX;x++) + { + fprintf(out,"dw OFFSET lblt_%i%b%i\n",x&63,y&63); + } + } + } + for(isor=0;isor>=0;isor--) + { + for(y=-MINY;y<=MAXY;y++) + { + for(x=-MINX;x<=MAXX;x++) + { + line(0,0,x,y); + fprintf(out,"ret\n",x,y); + } + } + } + fclose(out); + _asm mov ax,3h + _asm int 10h +} diff --git a/GRID/DOLINE.EXE b/GRID/DOLINE.EXE new file mode 100644 index 0000000..f7de9f5 Binary files /dev/null and b/GRID/DOLINE.EXE differ diff --git a/GRID/DOLINE.OBJ b/GRID/DOLINE.OBJ new file mode 100644 index 0000000..9be1d44 Binary files /dev/null and b/GRID/DOLINE.OBJ differ diff --git a/GRID/DOLINE.OK b/GRID/DOLINE.OK new file mode 100644 index 0000000..973f57e --- /dev/null +++ b/GRID/DOLINE.OK @@ -0,0 +1,105 @@ +// create code for line blitter + +#include +#include + +char *vram=(char *)0xa0000000L; + +FILE *out; + +int isor; + +void line(int x1,int y1,int x2,int y2) +{ + int xd=x2-x1; + int yd=y2-y1; + int a,d,x,y; + memset(vram,0,16*320); + if(xd>yd) + { + d=-xd/2; + while(x10) + { + d-=xd; + y1++; + } + } + } + else + { + d=-yd/2; + while(x10) + { + d-=yd; + x1++; + } + } + } + //vram[x2+y2*320]=1; + for(y=0;y<16;y++) for(x=0;x<16;x++) if(vram[x+y*320]) + { + if(vram[x+y*320+1]) + { + fprintf(out,"mov ax,gs:[di+%i]\n",x+y*320); + if(isor) fprintf(out,"or ax,dx\n"); + else fprintf(out,"xor ax,dx\n"); + fprintf(out,"mov gs:[di+%i],ax\n",x+y*320); + fprintf(out,"mov es:[di+%i],ax\n",x+y*320); + vram[x+y*320]=vram[x+y*320+1]=0; + } + else + { + fprintf(out,"mov al,gs:[di+%i]\n",x+y*320); + if(isor) fprintf(out,"or al,dl\n"); + else fprintf(out,"xor al,dl\n"); + fprintf(out,"mov gs:[di+%i],al\n",x+y*320); + fprintf(out,"mov es:[di+%i],al\n",x+y*320); + vram[x+y*320]=0; + } + } +} + +main() +{ + int x,y; + _asm mov ax,13h + _asm int 10h + out=fopen("lineblit.inc","wt"); + fprintf(out,";LineBlitter core - created by doline.c\n"); + fprintf(out,"lblt_table LABEL WORD\n"); + for(isor=0;isor>=0;isor--) + { + for(y=0;y<12;y++) + { + for(x=0;x<12;x++) + { + fprintf(out,"dw OFFSET lblt_%i%c%i\n",x,isor?'o':'a',y); + } + } + } + for(isor=0;isor>=0;isor--) + { + for(y=0;y<12;y++) + { + for(x=0;x<12;x++) + { + fprintf(out,"lblt_%i%c%i:\n",x,isor?'o':'a',y); + line(0,0,x,y); + fprintf(out,"ret\n",x,y); + } + } + } + fclose(out); + _asm mov ax,3h + _asm int 10h +} diff --git a/GRID/EYE4.UH b/GRID/EYE4.UH new file mode 100644 index 0000000..e41a320 Binary files /dev/null and b/GRID/EYE4.UH differ diff --git a/GRID/LINEBLIT.ASM b/GRID/LINEBLIT.ASM new file mode 100644 index 0000000..8e3380f --- /dev/null +++ b/GRID/LINEBLIT.ASM @@ -0,0 +1,11 @@ +code SEGMENT para public 'CODE' + ASSUME cs:code +LOCALS +.386 + +PUBLIC lblt_table +include lineblit.inc + +code ENDS + END + \ No newline at end of file diff --git a/GRID/LINEBLIT.INC b/GRID/LINEBLIT.INC new file mode 100644 index 0000000..69c8abe --- /dev/null +++ b/GRID/LINEBLIT.INC @@ -0,0 +1,8146 @@ +;LineBlitter core - created by doline.c +dw OFFSET lblt_1b0 ;only dot +lblt_table LABEL WORD +dw OFFSET lblt_54b56 +dw OFFSET lblt_55b56 +dw OFFSET lblt_56b56 +dw OFFSET lblt_57b56 +dw OFFSET lblt_58b56 +dw OFFSET lblt_59b56 +dw OFFSET lblt_60b56 +dw OFFSET lblt_61b56 +dw OFFSET lblt_62b56 +dw OFFSET lblt_63b56 +dw OFFSET lblt_0b56 +dw OFFSET lblt_1b56 +dw OFFSET lblt_2b56 +dw OFFSET lblt_3b56 +dw OFFSET lblt_4b56 +dw OFFSET lblt_5b56 +dw OFFSET lblt_6b56 +dw OFFSET lblt_7b56 +dw OFFSET lblt_8b56 +dw OFFSET lblt_9b56 +dw OFFSET lblt_10b56 +dw OFFSET lblt_54b57 +dw OFFSET lblt_55b57 +dw OFFSET lblt_56b57 +dw OFFSET lblt_57b57 +dw OFFSET lblt_58b57 +dw OFFSET lblt_59b57 +dw OFFSET lblt_60b57 +dw OFFSET lblt_61b57 +dw OFFSET lblt_62b57 +dw OFFSET lblt_63b57 +dw OFFSET lblt_0b57 +dw OFFSET lblt_1b57 +dw OFFSET lblt_2b57 +dw OFFSET lblt_3b57 +dw OFFSET lblt_4b57 +dw OFFSET lblt_5b57 +dw OFFSET lblt_6b57 +dw OFFSET lblt_7b57 +dw OFFSET lblt_8b57 +dw OFFSET lblt_9b57 +dw OFFSET lblt_10b57 +dw OFFSET lblt_54b58 +dw OFFSET lblt_55b58 +dw OFFSET lblt_56b58 +dw OFFSET lblt_57b58 +dw OFFSET lblt_58b58 +dw OFFSET lblt_59b58 +dw OFFSET lblt_60b58 +dw OFFSET lblt_61b58 +dw OFFSET lblt_62b58 +dw OFFSET lblt_63b58 +dw OFFSET lblt_0b58 +dw OFFSET lblt_1b58 +dw OFFSET lblt_2b58 +dw OFFSET lblt_3b58 +dw OFFSET lblt_4b58 +dw OFFSET lblt_5b58 +dw OFFSET lblt_6b58 +dw OFFSET lblt_7b58 +dw OFFSET lblt_8b58 +dw OFFSET lblt_9b58 +dw OFFSET lblt_10b58 +dw OFFSET lblt_54b59 +dw OFFSET lblt_55b59 +dw OFFSET lblt_56b59 +dw OFFSET lblt_57b59 +dw OFFSET lblt_58b59 +dw OFFSET lblt_59b59 +dw OFFSET lblt_60b59 +dw OFFSET lblt_61b59 +dw OFFSET lblt_62b59 +dw OFFSET lblt_63b59 +dw OFFSET lblt_0b59 +dw OFFSET lblt_1b59 +dw OFFSET lblt_2b59 +dw OFFSET lblt_3b59 +dw OFFSET lblt_4b59 +dw OFFSET lblt_5b59 +dw OFFSET lblt_6b59 +dw OFFSET lblt_7b59 +dw OFFSET lblt_8b59 +dw OFFSET lblt_9b59 +dw OFFSET lblt_10b59 +dw OFFSET lblt_54b60 +dw OFFSET lblt_55b60 +dw OFFSET lblt_56b60 +dw OFFSET lblt_57b60 +dw OFFSET lblt_58b60 +dw OFFSET lblt_59b60 +dw OFFSET lblt_60b60 +dw OFFSET lblt_61b60 +dw OFFSET lblt_62b60 +dw OFFSET lblt_63b60 +dw OFFSET lblt_0b60 +dw OFFSET lblt_1b60 +dw OFFSET lblt_2b60 +dw OFFSET lblt_3b60 +dw OFFSET lblt_4b60 +dw OFFSET lblt_5b60 +dw OFFSET lblt_6b60 +dw OFFSET lblt_7b60 +dw OFFSET lblt_8b60 +dw OFFSET lblt_9b60 +dw OFFSET lblt_10b60 +dw OFFSET lblt_54b61 +dw OFFSET lblt_55b61 +dw OFFSET lblt_56b61 +dw OFFSET lblt_57b61 +dw OFFSET lblt_58b61 +dw OFFSET lblt_59b61 +dw OFFSET lblt_60b61 +dw OFFSET lblt_61b61 +dw OFFSET lblt_62b61 +dw OFFSET lblt_63b61 +dw OFFSET lblt_0b61 +dw OFFSET lblt_1b61 +dw OFFSET lblt_2b61 +dw OFFSET lblt_3b61 +dw OFFSET lblt_4b61 +dw OFFSET lblt_5b61 +dw OFFSET lblt_6b61 +dw OFFSET lblt_7b61 +dw OFFSET lblt_8b61 +dw OFFSET lblt_9b61 +dw OFFSET lblt_10b61 +dw OFFSET lblt_54b62 +dw OFFSET lblt_55b62 +dw OFFSET lblt_56b62 +dw OFFSET lblt_57b62 +dw OFFSET lblt_58b62 +dw OFFSET lblt_59b62 +dw OFFSET lblt_60b62 +dw OFFSET lblt_61b62 +dw OFFSET lblt_62b62 +dw OFFSET lblt_63b62 +dw OFFSET lblt_0b62 +dw OFFSET lblt_1b62 +dw OFFSET lblt_2b62 +dw OFFSET lblt_3b62 +dw OFFSET lblt_4b62 +dw OFFSET lblt_5b62 +dw OFFSET lblt_6b62 +dw OFFSET lblt_7b62 +dw OFFSET lblt_8b62 +dw OFFSET lblt_9b62 +dw OFFSET lblt_10b62 +dw OFFSET lblt_54b63 +dw OFFSET lblt_55b63 +dw OFFSET lblt_56b63 +dw OFFSET lblt_57b63 +dw OFFSET lblt_58b63 +dw OFFSET lblt_59b63 +dw OFFSET lblt_60b63 +dw OFFSET lblt_61b63 +dw OFFSET lblt_62b63 +dw OFFSET lblt_63b63 +dw OFFSET lblt_0b63 +dw OFFSET lblt_1b63 +dw OFFSET lblt_2b63 +dw OFFSET lblt_3b63 +dw OFFSET lblt_4b63 +dw OFFSET lblt_5b63 +dw OFFSET lblt_6b63 +dw OFFSET lblt_7b63 +dw OFFSET lblt_8b63 +dw OFFSET lblt_9b63 +dw OFFSET lblt_10b63 +dw OFFSET lblt_54b0 +dw OFFSET lblt_55b0 +dw OFFSET lblt_56b0 +dw OFFSET lblt_57b0 +dw OFFSET lblt_58b0 +dw OFFSET lblt_59b0 +dw OFFSET lblt_60b0 +dw OFFSET lblt_61b0 +dw OFFSET lblt_62b0 +dw OFFSET lblt_63b0 +dw OFFSET lblt_0b0 +dw OFFSET lblt_1b0 +dw OFFSET lblt_2b0 +dw OFFSET lblt_3b0 +dw OFFSET lblt_4b0 +dw OFFSET lblt_5b0 +dw OFFSET lblt_6b0 +dw OFFSET lblt_7b0 +dw OFFSET lblt_8b0 +dw OFFSET lblt_9b0 +dw OFFSET lblt_10b0 +dw OFFSET lblt_54b1 +dw OFFSET lblt_55b1 +dw OFFSET lblt_56b1 +dw OFFSET lblt_57b1 +dw OFFSET lblt_58b1 +dw OFFSET lblt_59b1 +dw OFFSET lblt_60b1 +dw OFFSET lblt_61b1 +dw OFFSET lblt_62b1 +dw OFFSET lblt_63b1 +dw OFFSET lblt_0b1 +dw OFFSET lblt_1b1 +dw OFFSET lblt_2b1 +dw OFFSET lblt_3b1 +dw OFFSET lblt_4b1 +dw OFFSET lblt_5b1 +dw OFFSET lblt_6b1 +dw OFFSET lblt_7b1 +dw OFFSET lblt_8b1 +dw OFFSET lblt_9b1 +dw OFFSET lblt_10b1 +dw OFFSET lblt_54b2 +dw OFFSET lblt_55b2 +dw OFFSET lblt_56b2 +dw OFFSET lblt_57b2 +dw OFFSET lblt_58b2 +dw OFFSET lblt_59b2 +dw OFFSET lblt_60b2 +dw OFFSET lblt_61b2 +dw OFFSET lblt_62b2 +dw OFFSET lblt_63b2 +dw OFFSET lblt_0b2 +dw OFFSET lblt_1b2 +dw OFFSET lblt_2b2 +dw OFFSET lblt_3b2 +dw OFFSET lblt_4b2 +dw OFFSET lblt_5b2 +dw OFFSET lblt_6b2 +dw OFFSET lblt_7b2 +dw OFFSET lblt_8b2 +dw OFFSET lblt_9b2 +dw OFFSET lblt_10b2 +dw OFFSET lblt_54b3 +dw OFFSET lblt_55b3 +dw OFFSET lblt_56b3 +dw OFFSET lblt_57b3 +dw OFFSET lblt_58b3 +dw OFFSET lblt_59b3 +dw OFFSET lblt_60b3 +dw OFFSET lblt_61b3 +dw OFFSET lblt_62b3 +dw OFFSET lblt_63b3 +dw OFFSET lblt_0b3 +dw OFFSET lblt_1b3 +dw OFFSET lblt_2b3 +dw OFFSET lblt_3b3 +dw OFFSET lblt_4b3 +dw OFFSET lblt_5b3 +dw OFFSET lblt_6b3 +dw OFFSET lblt_7b3 +dw OFFSET lblt_8b3 +dw OFFSET lblt_9b3 +dw OFFSET lblt_10b3 +dw OFFSET lblt_54b4 +dw OFFSET lblt_55b4 +dw OFFSET lblt_56b4 +dw OFFSET lblt_57b4 +dw OFFSET lblt_58b4 +dw OFFSET lblt_59b4 +dw OFFSET lblt_60b4 +dw OFFSET lblt_61b4 +dw OFFSET lblt_62b4 +dw OFFSET lblt_63b4 +dw OFFSET lblt_0b4 +dw OFFSET lblt_1b4 +dw OFFSET lblt_2b4 +dw OFFSET lblt_3b4 +dw OFFSET lblt_4b4 +dw OFFSET lblt_5b4 +dw OFFSET lblt_6b4 +dw OFFSET lblt_7b4 +dw OFFSET lblt_8b4 +dw OFFSET lblt_9b4 +dw OFFSET lblt_10b4 +dw OFFSET lblt_54b5 +dw OFFSET lblt_55b5 +dw OFFSET lblt_56b5 +dw OFFSET lblt_57b5 +dw OFFSET lblt_58b5 +dw OFFSET lblt_59b5 +dw OFFSET lblt_60b5 +dw OFFSET lblt_61b5 +dw OFFSET lblt_62b5 +dw OFFSET lblt_63b5 +dw OFFSET lblt_0b5 +dw OFFSET lblt_1b5 +dw OFFSET lblt_2b5 +dw OFFSET lblt_3b5 +dw OFFSET lblt_4b5 +dw OFFSET lblt_5b5 +dw OFFSET lblt_6b5 +dw OFFSET lblt_7b5 +dw OFFSET lblt_8b5 +dw OFFSET lblt_9b5 +dw OFFSET lblt_10b5 +dw OFFSET lblt_54b6 +dw OFFSET lblt_55b6 +dw OFFSET lblt_56b6 +dw OFFSET lblt_57b6 +dw OFFSET lblt_58b6 +dw OFFSET lblt_59b6 +dw OFFSET lblt_60b6 +dw OFFSET lblt_61b6 +dw OFFSET lblt_62b6 +dw OFFSET lblt_63b6 +dw OFFSET lblt_0b6 +dw OFFSET lblt_1b6 +dw OFFSET lblt_2b6 +dw OFFSET lblt_3b6 +dw OFFSET lblt_4b6 +dw OFFSET lblt_5b6 +dw OFFSET lblt_6b6 +dw OFFSET lblt_7b6 +dw OFFSET lblt_8b6 +dw OFFSET lblt_9b6 +dw OFFSET lblt_10b6 +dw OFFSET lblt_54b7 +dw OFFSET lblt_55b7 +dw OFFSET lblt_56b7 +dw OFFSET lblt_57b7 +dw OFFSET lblt_58b7 +dw OFFSET lblt_59b7 +dw OFFSET lblt_60b7 +dw OFFSET lblt_61b7 +dw OFFSET lblt_62b7 +dw OFFSET lblt_63b7 +dw OFFSET lblt_0b7 +dw OFFSET lblt_1b7 +dw OFFSET lblt_2b7 +dw OFFSET lblt_3b7 +dw OFFSET lblt_4b7 +dw OFFSET lblt_5b7 +dw OFFSET lblt_6b7 +dw OFFSET lblt_7b7 +dw OFFSET lblt_8b7 +dw OFFSET lblt_9b7 +dw OFFSET lblt_10b7 +dw OFFSET lblt_54b8 +dw OFFSET lblt_55b8 +dw OFFSET lblt_56b8 +dw OFFSET lblt_57b8 +dw OFFSET lblt_58b8 +dw OFFSET lblt_59b8 +dw OFFSET lblt_60b8 +dw OFFSET lblt_61b8 +dw OFFSET lblt_62b8 +dw OFFSET lblt_63b8 +dw OFFSET lblt_0b8 +dw OFFSET lblt_1b8 +dw OFFSET lblt_2b8 +dw OFFSET lblt_3b8 +dw OFFSET lblt_4b8 +dw OFFSET lblt_5b8 +dw OFFSET lblt_6b8 +dw OFFSET lblt_7b8 +dw OFFSET lblt_8b8 +dw OFFSET lblt_9b8 +dw OFFSET lblt_10b8 +lblt_54b56: +mov al,gs:[di+-2249] +xor al,dl +mov gs:[di+-2249],al +mov es:[di+-2249],al +mov ax,gs:[di+-1928] +xor ax,dx +mov gs:[di+-1928],ax +mov es:[di+-1928],ax +mov al,gs:[di+-1606] +xor al,dl +mov gs:[di+-1606],al +mov es:[di+-1606],al +mov al,gs:[di+-1285] +xor al,dl +mov gs:[di+-1285],al +mov es:[di+-1285],al +mov al,gs:[di+-964] +xor al,dl +mov gs:[di+-964],al +mov es:[di+-964],al +mov ax,gs:[di+-643] +xor ax,dx +mov gs:[di+-643],ax +mov es:[di+-643],ax +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_55b56: +mov al,gs:[di+-2248] +xor al,dl +mov gs:[di+-2248],al +mov es:[di+-2248],al +mov al,gs:[di+-1927] +xor al,dl +mov gs:[di+-1927],al +mov es:[di+-1927],al +mov al,gs:[di+-1606] +xor al,dl +mov gs:[di+-1606],al +mov es:[di+-1606],al +mov ax,gs:[di+-1285] +xor ax,dx +mov gs:[di+-1285],ax +mov es:[di+-1285],ax +mov al,gs:[di+-963] +xor al,dl +mov gs:[di+-963],al +mov es:[di+-963],al +mov al,gs:[di+-642] +xor al,dl +mov gs:[di+-642],al +mov es:[di+-642],al +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_56b56: +mov al,gs:[di+-2247] +xor al,dl +mov gs:[di+-2247],al +mov es:[di+-2247],al +mov al,gs:[di+-1926] +xor al,dl +mov gs:[di+-1926],al +mov es:[di+-1926],al +mov al,gs:[di+-1605] +xor al,dl +mov gs:[di+-1605],al +mov es:[di+-1605],al +mov al,gs:[di+-1284] +xor al,dl +mov gs:[di+-1284],al +mov es:[di+-1284],al +mov al,gs:[di+-963] +xor al,dl +mov gs:[di+-963],al +mov es:[di+-963],al +mov al,gs:[di+-642] +xor al,dl +mov gs:[di+-642],al +mov es:[di+-642],al +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_57b56: +mov al,gs:[di+-2246] +xor al,dl +mov gs:[di+-2246],al +mov es:[di+-2246],al +mov al,gs:[di+-1925] +xor al,dl +mov gs:[di+-1925],al +mov es:[di+-1925],al +mov al,gs:[di+-1604] +xor al,dl +mov gs:[di+-1604],al +mov es:[di+-1604],al +mov al,gs:[di+-1283] +xor al,dl +mov gs:[di+-1283],al +mov es:[di+-1283],al +mov al,gs:[di+-963] +xor al,dl +mov gs:[di+-963],al +mov es:[di+-963],al +mov al,gs:[di+-642] +xor al,dl +mov gs:[di+-642],al +mov es:[di+-642],al +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_58b56: +mov al,gs:[di+-2245] +xor al,dl +mov gs:[di+-2245],al +mov es:[di+-2245],al +mov al,gs:[di+-1924] +xor al,dl +mov gs:[di+-1924],al +mov es:[di+-1924],al +mov al,gs:[di+-1604] +xor al,dl +mov gs:[di+-1604],al +mov es:[di+-1604],al +mov al,gs:[di+-1283] +xor al,dl +mov gs:[di+-1283],al +mov es:[di+-1283],al +mov al,gs:[di+-962] +xor al,dl +mov gs:[di+-962],al +mov es:[di+-962],al +mov al,gs:[di+-641] +xor al,dl +mov gs:[di+-641],al +mov es:[di+-641],al +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_59b56: +mov al,gs:[di+-2244] +xor al,dl +mov gs:[di+-2244],al +mov es:[di+-2244],al +mov al,gs:[di+-1924] +xor al,dl +mov gs:[di+-1924],al +mov es:[di+-1924],al +mov al,gs:[di+-1603] +xor al,dl +mov gs:[di+-1603],al +mov es:[di+-1603],al +mov al,gs:[di+-1282] +xor al,dl +mov gs:[di+-1282],al +mov es:[di+-1282],al +mov al,gs:[di+-962] +xor al,dl +mov gs:[di+-962],al +mov es:[di+-962],al +mov al,gs:[di+-641] +xor al,dl +mov gs:[di+-641],al +mov es:[di+-641],al +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_60b56: +mov al,gs:[di+-2243] +xor al,dl +mov gs:[di+-2243],al +mov es:[di+-2243],al +mov al,gs:[di+-1923] +xor al,dl +mov gs:[di+-1923],al +mov es:[di+-1923],al +mov al,gs:[di+-1602] +xor al,dl +mov gs:[di+-1602],al +mov es:[di+-1602],al +mov al,gs:[di+-1282] +xor al,dl +mov gs:[di+-1282],al +mov es:[di+-1282],al +mov al,gs:[di+-961] +xor al,dl +mov gs:[di+-961],al +mov es:[di+-961],al +mov al,gs:[di+-641] +xor al,dl +mov gs:[di+-641],al +mov es:[di+-641],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_61b56: +mov al,gs:[di+-2243] +xor al,dl +mov gs:[di+-2243],al +mov es:[di+-2243],al +mov al,gs:[di+-1922] +xor al,dl +mov gs:[di+-1922],al +mov es:[di+-1922],al +mov al,gs:[di+-1602] +xor al,dl +mov gs:[di+-1602],al +mov es:[di+-1602],al +mov al,gs:[di+-1281] +xor al,dl +mov gs:[di+-1281],al +mov es:[di+-1281],al +mov al,gs:[di+-961] +xor al,dl +mov gs:[di+-961],al +mov es:[di+-961],al +mov al,gs:[di+-641] +xor al,dl +mov gs:[di+-641],al +mov es:[di+-641],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_62b56: +mov al,gs:[di+-2242] +xor al,dl +mov gs:[di+-2242],al +mov es:[di+-2242],al +mov al,gs:[di+-1921] +xor al,dl +mov gs:[di+-1921],al +mov es:[di+-1921],al +mov al,gs:[di+-1601] +xor al,dl +mov gs:[di+-1601],al +mov es:[di+-1601],al +mov al,gs:[di+-1281] +xor al,dl +mov gs:[di+-1281],al +mov es:[di+-1281],al +mov al,gs:[di+-961] +xor al,dl +mov gs:[di+-961],al +mov es:[di+-961],al +mov al,gs:[di+-640] +xor al,dl +mov gs:[di+-640],al +mov es:[di+-640],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_63b56: +mov al,gs:[di+-2241] +xor al,dl +mov gs:[di+-2241],al +mov es:[di+-2241],al +mov al,gs:[di+-1921] +xor al,dl +mov gs:[di+-1921],al +mov es:[di+-1921],al +mov al,gs:[di+-1601] +xor al,dl +mov gs:[di+-1601],al +mov es:[di+-1601],al +mov al,gs:[di+-1280] +xor al,dl +mov gs:[di+-1280],al +mov es:[di+-1280],al +mov al,gs:[di+-960] +xor al,dl +mov gs:[di+-960],al +mov es:[di+-960],al +mov al,gs:[di+-640] +xor al,dl +mov gs:[di+-640],al +mov es:[di+-640],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_0b56: +mov al,gs:[di+-2240] +xor al,dl +mov gs:[di+-2240],al +mov es:[di+-2240],al +mov al,gs:[di+-1920] +xor al,dl +mov gs:[di+-1920],al +mov es:[di+-1920],al +mov al,gs:[di+-1600] +xor al,dl +mov gs:[di+-1600],al +mov es:[di+-1600],al +mov al,gs:[di+-1280] +xor al,dl +mov gs:[di+-1280],al +mov es:[di+-1280],al +mov al,gs:[di+-960] +xor al,dl +mov gs:[di+-960],al +mov es:[di+-960],al +mov al,gs:[di+-640] +xor al,dl +mov gs:[di+-640],al +mov es:[di+-640],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_1b56: +mov al,gs:[di+-2239] +xor al,dl +mov gs:[di+-2239],al +mov es:[di+-2239],al +mov al,gs:[di+-1919] +xor al,dl +mov gs:[di+-1919],al +mov es:[di+-1919],al +mov al,gs:[di+-1599] +xor al,dl +mov gs:[di+-1599],al +mov es:[di+-1599],al +mov al,gs:[di+-1280] +xor al,dl +mov gs:[di+-1280],al +mov es:[di+-1280],al +mov al,gs:[di+-960] +xor al,dl +mov gs:[di+-960],al +mov es:[di+-960],al +mov al,gs:[di+-640] +xor al,dl +mov gs:[di+-640],al +mov es:[di+-640],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_2b56: +mov al,gs:[di+-2238] +xor al,dl +mov gs:[di+-2238],al +mov es:[di+-2238],al +mov al,gs:[di+-1919] +xor al,dl +mov gs:[di+-1919],al +mov es:[di+-1919],al +mov al,gs:[di+-1599] +xor al,dl +mov gs:[di+-1599],al +mov es:[di+-1599],al +mov al,gs:[di+-1279] +xor al,dl +mov gs:[di+-1279],al +mov es:[di+-1279],al +mov al,gs:[di+-959] +xor al,dl +mov gs:[di+-959],al +mov es:[di+-959],al +mov al,gs:[di+-640] +xor al,dl +mov gs:[di+-640],al +mov es:[di+-640],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_3b56: +mov al,gs:[di+-2237] +xor al,dl +mov gs:[di+-2237],al +mov es:[di+-2237],al +mov al,gs:[di+-1918] +xor al,dl +mov gs:[di+-1918],al +mov es:[di+-1918],al +mov al,gs:[di+-1598] +xor al,dl +mov gs:[di+-1598],al +mov es:[di+-1598],al +mov al,gs:[di+-1279] +xor al,dl +mov gs:[di+-1279],al +mov es:[di+-1279],al +mov al,gs:[di+-959] +xor al,dl +mov gs:[di+-959],al +mov es:[di+-959],al +mov al,gs:[di+-639] +xor al,dl +mov gs:[di+-639],al +mov es:[di+-639],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_4b56: +mov al,gs:[di+-2237] +xor al,dl +mov gs:[di+-2237],al +mov es:[di+-2237],al +mov al,gs:[di+-1917] +xor al,dl +mov gs:[di+-1917],al +mov es:[di+-1917],al +mov al,gs:[di+-1598] +xor al,dl +mov gs:[di+-1598],al +mov es:[di+-1598],al +mov al,gs:[di+-1278] +xor al,dl +mov gs:[di+-1278],al +mov es:[di+-1278],al +mov al,gs:[di+-959] +xor al,dl +mov gs:[di+-959],al +mov es:[di+-959],al +mov al,gs:[di+-639] +xor al,dl +mov gs:[di+-639],al +mov es:[di+-639],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_5b56: +mov al,gs:[di+-2236] +xor al,dl +mov gs:[di+-2236],al +mov es:[di+-2236],al +mov al,gs:[di+-1916] +xor al,dl +mov gs:[di+-1916],al +mov es:[di+-1916],al +mov al,gs:[di+-1597] +xor al,dl +mov gs:[di+-1597],al +mov es:[di+-1597],al +mov al,gs:[di+-1278] +xor al,dl +mov gs:[di+-1278],al +mov es:[di+-1278],al +mov al,gs:[di+-958] +xor al,dl +mov gs:[di+-958],al +mov es:[di+-958],al +mov al,gs:[di+-639] +xor al,dl +mov gs:[di+-639],al +mov es:[di+-639],al +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_6b56: +mov al,gs:[di+-2235] +xor al,dl +mov gs:[di+-2235],al +mov es:[di+-2235],al +mov al,gs:[di+-1916] +xor al,dl +mov gs:[di+-1916],al +mov es:[di+-1916],al +mov al,gs:[di+-1596] +xor al,dl +mov gs:[di+-1596],al +mov es:[di+-1596],al +mov al,gs:[di+-1277] +xor al,dl +mov gs:[di+-1277],al +mov es:[di+-1277],al +mov al,gs:[di+-958] +xor al,dl +mov gs:[di+-958],al +mov es:[di+-958],al +mov al,gs:[di+-639] +xor al,dl +mov gs:[di+-639],al +mov es:[di+-639],al +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_7b56: +mov al,gs:[di+-2234] +xor al,dl +mov gs:[di+-2234],al +mov es:[di+-2234],al +mov al,gs:[di+-1915] +xor al,dl +mov gs:[di+-1915],al +mov es:[di+-1915],al +mov al,gs:[di+-1596] +xor al,dl +mov gs:[di+-1596],al +mov es:[di+-1596],al +mov al,gs:[di+-1277] +xor al,dl +mov gs:[di+-1277],al +mov es:[di+-1277],al +mov al,gs:[di+-957] +xor al,dl +mov gs:[di+-957],al +mov es:[di+-957],al +mov al,gs:[di+-638] +xor al,dl +mov gs:[di+-638],al +mov es:[di+-638],al +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_8b56: +mov al,gs:[di+-2233] +xor al,dl +mov gs:[di+-2233],al +mov es:[di+-2233],al +mov al,gs:[di+-1914] +xor al,dl +mov gs:[di+-1914],al +mov es:[di+-1914],al +mov al,gs:[di+-1595] +xor al,dl +mov gs:[di+-1595],al +mov es:[di+-1595],al +mov al,gs:[di+-1276] +xor al,dl +mov gs:[di+-1276],al +mov es:[di+-1276],al +mov al,gs:[di+-957] +xor al,dl +mov gs:[di+-957],al +mov es:[di+-957],al +mov al,gs:[di+-638] +xor al,dl +mov gs:[di+-638],al +mov es:[di+-638],al +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_9b56: +mov al,gs:[di+-2232] +xor al,dl +mov gs:[di+-2232],al +mov es:[di+-2232],al +mov al,gs:[di+-1913] +xor al,dl +mov gs:[di+-1913],al +mov es:[di+-1913],al +mov al,gs:[di+-1594] +xor al,dl +mov gs:[di+-1594],al +mov es:[di+-1594],al +mov ax,gs:[di+-1276] +xor ax,dx +mov gs:[di+-1276],ax +mov es:[di+-1276],ax +mov al,gs:[di+-957] +xor al,dl +mov gs:[di+-957],al +mov es:[di+-957],al +mov al,gs:[di+-638] +xor al,dl +mov gs:[di+-638],al +mov es:[di+-638],al +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_10b56: +mov al,gs:[di+-2231] +xor al,dl +mov gs:[di+-2231],al +mov es:[di+-2231],al +mov ax,gs:[di+-1913] +xor ax,dx +mov gs:[di+-1913],ax +mov es:[di+-1913],ax +mov al,gs:[di+-1594] +xor al,dl +mov gs:[di+-1594],al +mov es:[di+-1594],al +mov al,gs:[di+-1275] +xor al,dl +mov gs:[di+-1275],al +mov es:[di+-1275],al +mov al,gs:[di+-956] +xor al,dl +mov gs:[di+-956],al +mov es:[di+-956],al +mov ax,gs:[di+-638] +xor ax,dx +mov gs:[di+-638],ax +mov es:[di+-638],ax +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_54b57: +mov ax,gs:[di+-1929] +xor ax,dx +mov gs:[di+-1929],ax +mov es:[di+-1929],ax +mov al,gs:[di+-1607] +xor al,dl +mov gs:[di+-1607],al +mov es:[di+-1607],al +mov al,gs:[di+-1286] +xor al,dl +mov gs:[di+-1286],al +mov es:[di+-1286],al +mov ax,gs:[di+-965] +xor ax,dx +mov gs:[di+-965],ax +mov es:[di+-965],ax +mov al,gs:[di+-643] +xor al,dl +mov gs:[di+-643],al +mov es:[di+-643],al +mov ax,gs:[di+-322] +xor ax,dx +mov gs:[di+-322],ax +mov es:[di+-322],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_55b57: +mov al,gs:[di+-1928] +xor al,dl +mov gs:[di+-1928],al +mov es:[di+-1928],al +mov ax,gs:[di+-1607] +xor ax,dx +mov gs:[di+-1607],ax +mov es:[di+-1607],ax +mov al,gs:[di+-1285] +xor al,dl +mov gs:[di+-1285],al +mov es:[di+-1285],al +mov al,gs:[di+-964] +xor al,dl +mov gs:[di+-964],al +mov es:[di+-964],al +mov ax,gs:[di+-643] +xor ax,dx +mov gs:[di+-643],ax +mov es:[di+-643],ax +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_56b57: +mov al,gs:[di+-1927] +xor al,dl +mov gs:[di+-1927],al +mov es:[di+-1927],al +mov al,gs:[di+-1606] +xor al,dl +mov gs:[di+-1606],al +mov es:[di+-1606],al +mov al,gs:[di+-1285] +xor al,dl +mov gs:[di+-1285],al +mov es:[di+-1285],al +mov ax,gs:[di+-964] +xor ax,dx +mov gs:[di+-964],ax +mov es:[di+-964],ax +mov al,gs:[di+-642] +xor al,dl +mov gs:[di+-642],al +mov es:[di+-642],al +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_57b57: +mov al,gs:[di+-1926] +xor al,dl +mov gs:[di+-1926],al +mov es:[di+-1926],al +mov al,gs:[di+-1605] +xor al,dl +mov gs:[di+-1605],al +mov es:[di+-1605],al +mov al,gs:[di+-1284] +xor al,dl +mov gs:[di+-1284],al +mov es:[di+-1284],al +mov al,gs:[di+-963] +xor al,dl +mov gs:[di+-963],al +mov es:[di+-963],al +mov al,gs:[di+-642] +xor al,dl +mov gs:[di+-642],al +mov es:[di+-642],al +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_58b57: +mov al,gs:[di+-1925] +xor al,dl +mov gs:[di+-1925],al +mov es:[di+-1925],al +mov al,gs:[di+-1604] +xor al,dl +mov gs:[di+-1604],al +mov es:[di+-1604],al +mov al,gs:[di+-1283] +xor al,dl +mov gs:[di+-1283],al +mov es:[di+-1283],al +mov al,gs:[di+-963] +xor al,dl +mov gs:[di+-963],al +mov es:[di+-963],al +mov al,gs:[di+-642] +xor al,dl +mov gs:[di+-642],al +mov es:[di+-642],al +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_59b57: +mov al,gs:[di+-1924] +xor al,dl +mov gs:[di+-1924],al +mov es:[di+-1924],al +mov al,gs:[di+-1604] +xor al,dl +mov gs:[di+-1604],al +mov es:[di+-1604],al +mov al,gs:[di+-1283] +xor al,dl +mov gs:[di+-1283],al +mov es:[di+-1283],al +mov al,gs:[di+-962] +xor al,dl +mov gs:[di+-962],al +mov es:[di+-962],al +mov al,gs:[di+-641] +xor al,dl +mov gs:[di+-641],al +mov es:[di+-641],al +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_60b57: +mov al,gs:[di+-1923] +xor al,dl +mov gs:[di+-1923],al +mov es:[di+-1923],al +mov al,gs:[di+-1603] +xor al,dl +mov gs:[di+-1603],al +mov es:[di+-1603],al +mov al,gs:[di+-1282] +xor al,dl +mov gs:[di+-1282],al +mov es:[di+-1282],al +mov al,gs:[di+-962] +xor al,dl +mov gs:[di+-962],al +mov es:[di+-962],al +mov al,gs:[di+-641] +xor al,dl +mov gs:[di+-641],al +mov es:[di+-641],al +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_61b57: +mov al,gs:[di+-1923] +xor al,dl +mov gs:[di+-1923],al +mov es:[di+-1923],al +mov al,gs:[di+-1602] +xor al,dl +mov gs:[di+-1602],al +mov es:[di+-1602],al +mov al,gs:[di+-1282] +xor al,dl +mov gs:[di+-1282],al +mov es:[di+-1282],al +mov al,gs:[di+-961] +xor al,dl +mov gs:[di+-961],al +mov es:[di+-961],al +mov al,gs:[di+-641] +xor al,dl +mov gs:[di+-641],al +mov es:[di+-641],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_62b57: +mov al,gs:[di+-1922] +xor al,dl +mov gs:[di+-1922],al +mov es:[di+-1922],al +mov al,gs:[di+-1601] +xor al,dl +mov gs:[di+-1601],al +mov es:[di+-1601],al +mov al,gs:[di+-1281] +xor al,dl +mov gs:[di+-1281],al +mov es:[di+-1281],al +mov al,gs:[di+-961] +xor al,dl +mov gs:[di+-961],al +mov es:[di+-961],al +mov al,gs:[di+-641] +xor al,dl +mov gs:[di+-641],al +mov es:[di+-641],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_63b57: +mov al,gs:[di+-1921] +xor al,dl +mov gs:[di+-1921],al +mov es:[di+-1921],al +mov al,gs:[di+-1601] +xor al,dl +mov gs:[di+-1601],al +mov es:[di+-1601],al +mov al,gs:[di+-1281] +xor al,dl +mov gs:[di+-1281],al +mov es:[di+-1281],al +mov al,gs:[di+-960] +xor al,dl +mov gs:[di+-960],al +mov es:[di+-960],al +mov al,gs:[di+-640] +xor al,dl +mov gs:[di+-640],al +mov es:[di+-640],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_0b57: +mov al,gs:[di+-1920] +xor al,dl +mov gs:[di+-1920],al +mov es:[di+-1920],al +mov al,gs:[di+-1600] +xor al,dl +mov gs:[di+-1600],al +mov es:[di+-1600],al +mov al,gs:[di+-1280] +xor al,dl +mov gs:[di+-1280],al +mov es:[di+-1280],al +mov al,gs:[di+-960] +xor al,dl +mov gs:[di+-960],al +mov es:[di+-960],al +mov al,gs:[di+-640] +xor al,dl +mov gs:[di+-640],al +mov es:[di+-640],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_1b57: +mov al,gs:[di+-1919] +xor al,dl +mov gs:[di+-1919],al +mov es:[di+-1919],al +mov al,gs:[di+-1599] +xor al,dl +mov gs:[di+-1599],al +mov es:[di+-1599],al +mov al,gs:[di+-1279] +xor al,dl +mov gs:[di+-1279],al +mov es:[di+-1279],al +mov al,gs:[di+-960] +xor al,dl +mov gs:[di+-960],al +mov es:[di+-960],al +mov al,gs:[di+-640] +xor al,dl +mov gs:[di+-640],al +mov es:[di+-640],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_2b57: +mov al,gs:[di+-1918] +xor al,dl +mov gs:[di+-1918],al +mov es:[di+-1918],al +mov al,gs:[di+-1599] +xor al,dl +mov gs:[di+-1599],al +mov es:[di+-1599],al +mov al,gs:[di+-1279] +xor al,dl +mov gs:[di+-1279],al +mov es:[di+-1279],al +mov al,gs:[di+-959] +xor al,dl +mov gs:[di+-959],al +mov es:[di+-959],al +mov al,gs:[di+-639] +xor al,dl +mov gs:[di+-639],al +mov es:[di+-639],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_3b57: +mov al,gs:[di+-1917] +xor al,dl +mov gs:[di+-1917],al +mov es:[di+-1917],al +mov al,gs:[di+-1598] +xor al,dl +mov gs:[di+-1598],al +mov es:[di+-1598],al +mov al,gs:[di+-1278] +xor al,dl +mov gs:[di+-1278],al +mov es:[di+-1278],al +mov al,gs:[di+-959] +xor al,dl +mov gs:[di+-959],al +mov es:[di+-959],al +mov al,gs:[di+-639] +xor al,dl +mov gs:[di+-639],al +mov es:[di+-639],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_4b57: +mov al,gs:[di+-1917] +xor al,dl +mov gs:[di+-1917],al +mov es:[di+-1917],al +mov al,gs:[di+-1597] +xor al,dl +mov gs:[di+-1597],al +mov es:[di+-1597],al +mov al,gs:[di+-1278] +xor al,dl +mov gs:[di+-1278],al +mov es:[di+-1278],al +mov al,gs:[di+-958] +xor al,dl +mov gs:[di+-958],al +mov es:[di+-958],al +mov al,gs:[di+-639] +xor al,dl +mov gs:[di+-639],al +mov es:[di+-639],al +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_5b57: +mov al,gs:[di+-1916] +xor al,dl +mov gs:[di+-1916],al +mov es:[di+-1916],al +mov al,gs:[di+-1596] +xor al,dl +mov gs:[di+-1596],al +mov es:[di+-1596],al +mov al,gs:[di+-1277] +xor al,dl +mov gs:[di+-1277],al +mov es:[di+-1277],al +mov al,gs:[di+-958] +xor al,dl +mov gs:[di+-958],al +mov es:[di+-958],al +mov al,gs:[di+-639] +xor al,dl +mov gs:[di+-639],al +mov es:[di+-639],al +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_6b57: +mov al,gs:[di+-1915] +xor al,dl +mov gs:[di+-1915],al +mov es:[di+-1915],al +mov al,gs:[di+-1596] +xor al,dl +mov gs:[di+-1596],al +mov es:[di+-1596],al +mov al,gs:[di+-1277] +xor al,dl +mov gs:[di+-1277],al +mov es:[di+-1277],al +mov al,gs:[di+-957] +xor al,dl +mov gs:[di+-957],al +mov es:[di+-957],al +mov al,gs:[di+-638] +xor al,dl +mov gs:[di+-638],al +mov es:[di+-638],al +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_7b57: +mov al,gs:[di+-1914] +xor al,dl +mov gs:[di+-1914],al +mov es:[di+-1914],al +mov al,gs:[di+-1595] +xor al,dl +mov gs:[di+-1595],al +mov es:[di+-1595],al +mov al,gs:[di+-1276] +xor al,dl +mov gs:[di+-1276],al +mov es:[di+-1276],al +mov al,gs:[di+-957] +xor al,dl +mov gs:[di+-957],al +mov es:[di+-957],al +mov al,gs:[di+-638] +xor al,dl +mov gs:[di+-638],al +mov es:[di+-638],al +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_8b57: +mov al,gs:[di+-1913] +xor al,dl +mov gs:[di+-1913],al +mov es:[di+-1913],al +mov al,gs:[di+-1594] +xor al,dl +mov gs:[di+-1594],al +mov es:[di+-1594],al +mov al,gs:[di+-1275] +xor al,dl +mov gs:[di+-1275],al +mov es:[di+-1275],al +mov ax,gs:[di+-957] +xor ax,dx +mov gs:[di+-957],ax +mov es:[di+-957],ax +mov al,gs:[di+-638] +xor al,dl +mov gs:[di+-638],al +mov es:[di+-638],al +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_9b57: +mov al,gs:[di+-1912] +xor al,dl +mov gs:[di+-1912],al +mov es:[di+-1912],al +mov ax,gs:[di+-1594] +xor ax,dx +mov gs:[di+-1594],ax +mov es:[di+-1594],ax +mov al,gs:[di+-1275] +xor al,dl +mov gs:[di+-1275],al +mov es:[di+-1275],al +mov al,gs:[di+-956] +xor al,dl +mov gs:[di+-956],al +mov es:[di+-956],al +mov ax,gs:[di+-638] +xor ax,dx +mov gs:[di+-638],ax +mov es:[di+-638],ax +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_10b57: +mov ax,gs:[di+-1912] +xor ax,dx +mov gs:[di+-1912],ax +mov es:[di+-1912],ax +mov al,gs:[di+-1593] +xor al,dl +mov gs:[di+-1593],al +mov es:[di+-1593],al +mov al,gs:[di+-1274] +xor al,dl +mov gs:[di+-1274],al +mov es:[di+-1274],al +mov ax,gs:[di+-956] +xor ax,dx +mov gs:[di+-956],ax +mov es:[di+-956],ax +mov al,gs:[di+-637] +xor al,dl +mov gs:[di+-637],al +mov es:[di+-637],al +mov ax,gs:[di+-319] +xor ax,dx +mov gs:[di+-319],ax +mov es:[di+-319],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_54b58: +mov ax,gs:[di+-1609] +xor ax,dx +mov gs:[di+-1609],ax +mov es:[di+-1609],ax +mov ax,gs:[di+-1287] +xor ax,dx +mov gs:[di+-1287],ax +mov es:[di+-1287],ax +mov al,gs:[di+-965] +xor al,dl +mov gs:[di+-965],al +mov es:[di+-965],al +mov ax,gs:[di+-644] +xor ax,dx +mov gs:[di+-644],ax +mov es:[di+-644],ax +mov ax,gs:[di+-322] +xor ax,dx +mov gs:[di+-322],ax +mov es:[di+-322],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_55b58: +mov ax,gs:[di+-1608] +xor ax,dx +mov gs:[di+-1608],ax +mov es:[di+-1608],ax +mov al,gs:[di+-1286] +xor al,dl +mov gs:[di+-1286],al +mov es:[di+-1286],al +mov ax,gs:[di+-965] +xor ax,dx +mov gs:[di+-965],ax +mov es:[di+-965],ax +mov al,gs:[di+-643] +xor al,dl +mov gs:[di+-643],al +mov es:[di+-643],al +mov ax,gs:[di+-322] +xor ax,dx +mov gs:[di+-322],ax +mov es:[di+-322],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_56b58: +mov al,gs:[di+-1607] +xor al,dl +mov gs:[di+-1607],al +mov es:[di+-1607],al +mov ax,gs:[di+-1286] +xor ax,dx +mov gs:[di+-1286],ax +mov es:[di+-1286],ax +mov al,gs:[di+-964] +xor al,dl +mov gs:[di+-964],al +mov es:[di+-964],al +mov al,gs:[di+-643] +xor al,dl +mov gs:[di+-643],al +mov es:[di+-643],al +mov ax,gs:[di+-322] +xor ax,dx +mov gs:[di+-322],ax +mov es:[di+-322],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_57b58: +mov al,gs:[di+-1606] +xor al,dl +mov gs:[di+-1606],al +mov es:[di+-1606],al +mov al,gs:[di+-1285] +xor al,dl +mov gs:[di+-1285],al +mov es:[di+-1285],al +mov ax,gs:[di+-964] +xor ax,dx +mov gs:[di+-964],ax +mov es:[di+-964],ax +mov al,gs:[di+-642] +xor al,dl +mov gs:[di+-642],al +mov es:[di+-642],al +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_58b58: +mov al,gs:[di+-1605] +xor al,dl +mov gs:[di+-1605],al +mov es:[di+-1605],al +mov al,gs:[di+-1284] +xor al,dl +mov gs:[di+-1284],al +mov es:[di+-1284],al +mov al,gs:[di+-963] +xor al,dl +mov gs:[di+-963],al +mov es:[di+-963],al +mov al,gs:[di+-642] +xor al,dl +mov gs:[di+-642],al +mov es:[di+-642],al +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_59b58: +mov al,gs:[di+-1604] +xor al,dl +mov gs:[di+-1604],al +mov es:[di+-1604],al +mov al,gs:[di+-1283] +xor al,dl +mov gs:[di+-1283],al +mov es:[di+-1283],al +mov al,gs:[di+-962] +xor al,dl +mov gs:[di+-962],al +mov es:[di+-962],al +mov al,gs:[di+-642] +xor al,dl +mov gs:[di+-642],al +mov es:[di+-642],al +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_60b58: +mov al,gs:[di+-1603] +xor al,dl +mov gs:[di+-1603],al +mov es:[di+-1603],al +mov al,gs:[di+-1283] +xor al,dl +mov gs:[di+-1283],al +mov es:[di+-1283],al +mov al,gs:[di+-962] +xor al,dl +mov gs:[di+-962],al +mov es:[di+-962],al +mov al,gs:[di+-641] +xor al,dl +mov gs:[di+-641],al +mov es:[di+-641],al +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_61b58: +mov al,gs:[di+-1602] +xor al,dl +mov gs:[di+-1602],al +mov es:[di+-1602],al +mov al,gs:[di+-1282] +xor al,dl +mov gs:[di+-1282],al +mov es:[di+-1282],al +mov al,gs:[di+-961] +xor al,dl +mov gs:[di+-961],al +mov es:[di+-961],al +mov al,gs:[di+-641] +xor al,dl +mov gs:[di+-641],al +mov es:[di+-641],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_62b58: +mov al,gs:[di+-1602] +xor al,dl +mov gs:[di+-1602],al +mov es:[di+-1602],al +mov al,gs:[di+-1281] +xor al,dl +mov gs:[di+-1281],al +mov es:[di+-1281],al +mov al,gs:[di+-961] +xor al,dl +mov gs:[di+-961],al +mov es:[di+-961],al +mov al,gs:[di+-641] +xor al,dl +mov gs:[di+-641],al +mov es:[di+-641],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_63b58: +mov al,gs:[di+-1601] +xor al,dl +mov gs:[di+-1601],al +mov es:[di+-1601],al +mov al,gs:[di+-1281] +xor al,dl +mov gs:[di+-1281],al +mov es:[di+-1281],al +mov al,gs:[di+-960] +xor al,dl +mov gs:[di+-960],al +mov es:[di+-960],al +mov al,gs:[di+-640] +xor al,dl +mov gs:[di+-640],al +mov es:[di+-640],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_0b58: +mov al,gs:[di+-1600] +xor al,dl +mov gs:[di+-1600],al +mov es:[di+-1600],al +mov al,gs:[di+-1280] +xor al,dl +mov gs:[di+-1280],al +mov es:[di+-1280],al +mov al,gs:[di+-960] +xor al,dl +mov gs:[di+-960],al +mov es:[di+-960],al +mov al,gs:[di+-640] +xor al,dl +mov gs:[di+-640],al +mov es:[di+-640],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_1b58: +mov al,gs:[di+-1599] +xor al,dl +mov gs:[di+-1599],al +mov es:[di+-1599],al +mov al,gs:[di+-1279] +xor al,dl +mov gs:[di+-1279],al +mov es:[di+-1279],al +mov al,gs:[di+-960] +xor al,dl +mov gs:[di+-960],al +mov es:[di+-960],al +mov al,gs:[di+-640] +xor al,dl +mov gs:[di+-640],al +mov es:[di+-640],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_2b58: +mov al,gs:[di+-1598] +xor al,dl +mov gs:[di+-1598],al +mov es:[di+-1598],al +mov al,gs:[di+-1279] +xor al,dl +mov gs:[di+-1279],al +mov es:[di+-1279],al +mov al,gs:[di+-959] +xor al,dl +mov gs:[di+-959],al +mov es:[di+-959],al +mov al,gs:[di+-639] +xor al,dl +mov gs:[di+-639],al +mov es:[di+-639],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_3b58: +mov al,gs:[di+-1598] +xor al,dl +mov gs:[di+-1598],al +mov es:[di+-1598],al +mov al,gs:[di+-1278] +xor al,dl +mov gs:[di+-1278],al +mov es:[di+-1278],al +mov al,gs:[di+-959] +xor al,dl +mov gs:[di+-959],al +mov es:[di+-959],al +mov al,gs:[di+-639] +xor al,dl +mov gs:[di+-639],al +mov es:[di+-639],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_4b58: +mov al,gs:[di+-1597] +xor al,dl +mov gs:[di+-1597],al +mov es:[di+-1597],al +mov al,gs:[di+-1277] +xor al,dl +mov gs:[di+-1277],al +mov es:[di+-1277],al +mov al,gs:[di+-958] +xor al,dl +mov gs:[di+-958],al +mov es:[di+-958],al +mov al,gs:[di+-639] +xor al,dl +mov gs:[di+-639],al +mov es:[di+-639],al +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_5b58: +mov al,gs:[di+-1596] +xor al,dl +mov gs:[di+-1596],al +mov es:[di+-1596],al +mov al,gs:[di+-1277] +xor al,dl +mov gs:[di+-1277],al +mov es:[di+-1277],al +mov al,gs:[di+-958] +xor al,dl +mov gs:[di+-958],al +mov es:[di+-958],al +mov al,gs:[di+-638] +xor al,dl +mov gs:[di+-638],al +mov es:[di+-638],al +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_6b58: +mov al,gs:[di+-1595] +xor al,dl +mov gs:[di+-1595],al +mov es:[di+-1595],al +mov al,gs:[di+-1276] +xor al,dl +mov gs:[di+-1276],al +mov es:[di+-1276],al +mov al,gs:[di+-957] +xor al,dl +mov gs:[di+-957],al +mov es:[di+-957],al +mov al,gs:[di+-638] +xor al,dl +mov gs:[di+-638],al +mov es:[di+-638],al +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_7b58: +mov al,gs:[di+-1594] +xor al,dl +mov gs:[di+-1594],al +mov es:[di+-1594],al +mov al,gs:[di+-1275] +xor al,dl +mov gs:[di+-1275],al +mov es:[di+-1275],al +mov ax,gs:[di+-957] +xor ax,dx +mov gs:[di+-957],ax +mov es:[di+-957],ax +mov al,gs:[di+-638] +xor al,dl +mov gs:[di+-638],al +mov es:[di+-638],al +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_8b58: +mov al,gs:[di+-1593] +xor al,dl +mov gs:[di+-1593],al +mov es:[di+-1593],al +mov ax,gs:[di+-1275] +xor ax,dx +mov gs:[di+-1275],ax +mov es:[di+-1275],ax +mov al,gs:[di+-956] +xor al,dl +mov gs:[di+-956],al +mov es:[di+-956],al +mov al,gs:[di+-637] +xor al,dl +mov gs:[di+-637],al +mov es:[di+-637],al +mov ax,gs:[di+-319] +xor ax,dx +mov gs:[di+-319],ax +mov es:[di+-319],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_9b58: +mov ax,gs:[di+-1593] +xor ax,dx +mov gs:[di+-1593],ax +mov es:[di+-1593],ax +mov al,gs:[di+-1274] +xor al,dl +mov gs:[di+-1274],al +mov es:[di+-1274],al +mov ax,gs:[di+-956] +xor ax,dx +mov gs:[di+-956],ax +mov es:[di+-956],ax +mov al,gs:[di+-637] +xor al,dl +mov gs:[di+-637],al +mov es:[di+-637],al +mov ax,gs:[di+-319] +xor ax,dx +mov gs:[di+-319],ax +mov es:[di+-319],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_10b58: +mov ax,gs:[di+-1592] +xor ax,dx +mov gs:[di+-1592],ax +mov es:[di+-1592],ax +mov ax,gs:[di+-1274] +xor ax,dx +mov gs:[di+-1274],ax +mov es:[di+-1274],ax +mov al,gs:[di+-955] +xor al,dl +mov gs:[di+-955],al +mov es:[di+-955],al +mov ax,gs:[di+-637] +xor ax,dx +mov gs:[di+-637],ax +mov es:[di+-637],ax +mov ax,gs:[di+-319] +xor ax,dx +mov gs:[di+-319],ax +mov es:[di+-319],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_54b59: +mov ax,gs:[di+-1289] +xor ax,dx +mov gs:[di+-1289],ax +mov es:[di+-1289],ax +mov ax,gs:[di+-967] +xor ax,dx +mov gs:[di+-967],ax +mov es:[di+-967],ax +mov ax,gs:[di+-645] +xor ax,dx +mov gs:[di+-645],ax +mov es:[di+-645],ax +mov ax,gs:[di+-323] +xor ax,dx +mov gs:[di+-323],ax +mov es:[di+-323],ax +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_55b59: +mov ax,gs:[di+-1288] +xor ax,dx +mov gs:[di+-1288],ax +mov es:[di+-1288],ax +mov ax,gs:[di+-966] +xor ax,dx +mov gs:[di+-966],ax +mov es:[di+-966],ax +mov ax,gs:[di+-644] +xor ax,dx +mov gs:[di+-644],ax +mov es:[di+-644],ax +mov ax,gs:[di+-322] +xor ax,dx +mov gs:[di+-322],ax +mov es:[di+-322],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_56b59: +mov ax,gs:[di+-1287] +xor ax,dx +mov gs:[di+-1287],ax +mov es:[di+-1287],ax +mov al,gs:[di+-965] +xor al,dl +mov gs:[di+-965],al +mov es:[di+-965],al +mov ax,gs:[di+-644] +xor ax,dx +mov gs:[di+-644],ax +mov es:[di+-644],ax +mov ax,gs:[di+-322] +xor ax,dx +mov gs:[di+-322],ax +mov es:[di+-322],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_57b59: +mov ax,gs:[di+-1286] +xor ax,dx +mov gs:[di+-1286],ax +mov es:[di+-1286],ax +mov al,gs:[di+-964] +xor al,dl +mov gs:[di+-964],al +mov es:[di+-964],al +mov al,gs:[di+-643] +xor al,dl +mov gs:[di+-643],al +mov es:[di+-643],al +mov ax,gs:[di+-322] +xor ax,dx +mov gs:[di+-322],ax +mov es:[di+-322],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_58b59: +mov al,gs:[di+-1285] +xor al,dl +mov gs:[di+-1285],al +mov es:[di+-1285],al +mov al,gs:[di+-964] +xor al,dl +mov gs:[di+-964],al +mov es:[di+-964],al +mov ax,gs:[di+-643] +xor ax,dx +mov gs:[di+-643],ax +mov es:[di+-643],ax +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_59b59: +mov al,gs:[di+-1284] +xor al,dl +mov gs:[di+-1284],al +mov es:[di+-1284],al +mov al,gs:[di+-963] +xor al,dl +mov gs:[di+-963],al +mov es:[di+-963],al +mov al,gs:[di+-642] +xor al,dl +mov gs:[di+-642],al +mov es:[di+-642],al +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_60b59: +mov al,gs:[di+-1283] +xor al,dl +mov gs:[di+-1283],al +mov es:[di+-1283],al +mov al,gs:[di+-962] +xor al,dl +mov gs:[di+-962],al +mov es:[di+-962],al +mov al,gs:[di+-642] +xor al,dl +mov gs:[di+-642],al +mov es:[di+-642],al +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_61b59: +mov al,gs:[di+-1282] +xor al,dl +mov gs:[di+-1282],al +mov es:[di+-1282],al +mov al,gs:[di+-962] +xor al,dl +mov gs:[di+-962],al +mov es:[di+-962],al +mov al,gs:[di+-641] +xor al,dl +mov gs:[di+-641],al +mov es:[di+-641],al +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_62b59: +mov al,gs:[di+-1282] +xor al,dl +mov gs:[di+-1282],al +mov es:[di+-1282],al +mov al,gs:[di+-961] +xor al,dl +mov gs:[di+-961],al +mov es:[di+-961],al +mov al,gs:[di+-641] +xor al,dl +mov gs:[di+-641],al +mov es:[di+-641],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_63b59: +mov al,gs:[di+-1281] +xor al,dl +mov gs:[di+-1281],al +mov es:[di+-1281],al +mov al,gs:[di+-961] +xor al,dl +mov gs:[di+-961],al +mov es:[di+-961],al +mov al,gs:[di+-640] +xor al,dl +mov gs:[di+-640],al +mov es:[di+-640],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_0b59: +mov al,gs:[di+-1280] +xor al,dl +mov gs:[di+-1280],al +mov es:[di+-1280],al +mov al,gs:[di+-960] +xor al,dl +mov gs:[di+-960],al +mov es:[di+-960],al +mov al,gs:[di+-640] +xor al,dl +mov gs:[di+-640],al +mov es:[di+-640],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_1b59: +mov al,gs:[di+-1279] +xor al,dl +mov gs:[di+-1279],al +mov es:[di+-1279],al +mov al,gs:[di+-959] +xor al,dl +mov gs:[di+-959],al +mov es:[di+-959],al +mov al,gs:[di+-640] +xor al,dl +mov gs:[di+-640],al +mov es:[di+-640],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_2b59: +mov al,gs:[di+-1278] +xor al,dl +mov gs:[di+-1278],al +mov es:[di+-1278],al +mov al,gs:[di+-959] +xor al,dl +mov gs:[di+-959],al +mov es:[di+-959],al +mov al,gs:[di+-639] +xor al,dl +mov gs:[di+-639],al +mov es:[di+-639],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_3b59: +mov al,gs:[di+-1278] +xor al,dl +mov gs:[di+-1278],al +mov es:[di+-1278],al +mov al,gs:[di+-958] +xor al,dl +mov gs:[di+-958],al +mov es:[di+-958],al +mov al,gs:[di+-639] +xor al,dl +mov gs:[di+-639],al +mov es:[di+-639],al +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_4b59: +mov al,gs:[di+-1277] +xor al,dl +mov gs:[di+-1277],al +mov es:[di+-1277],al +mov al,gs:[di+-958] +xor al,dl +mov gs:[di+-958],al +mov es:[di+-958],al +mov al,gs:[di+-638] +xor al,dl +mov gs:[di+-638],al +mov es:[di+-638],al +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_5b59: +mov al,gs:[di+-1276] +xor al,dl +mov gs:[di+-1276],al +mov es:[di+-1276],al +mov al,gs:[di+-957] +xor al,dl +mov gs:[di+-957],al +mov es:[di+-957],al +mov al,gs:[di+-638] +xor al,dl +mov gs:[di+-638],al +mov es:[di+-638],al +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_6b59: +mov al,gs:[di+-1275] +xor al,dl +mov gs:[di+-1275],al +mov es:[di+-1275],al +mov al,gs:[di+-956] +xor al,dl +mov gs:[di+-956],al +mov es:[di+-956],al +mov ax,gs:[di+-638] +xor ax,dx +mov gs:[di+-638],ax +mov es:[di+-638],ax +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_7b59: +mov ax,gs:[di+-1275] +xor ax,dx +mov gs:[di+-1275],ax +mov es:[di+-1275],ax +mov al,gs:[di+-956] +xor al,dl +mov gs:[di+-956],al +mov es:[di+-956],al +mov al,gs:[di+-637] +xor al,dl +mov gs:[di+-637],al +mov es:[di+-637],al +mov ax,gs:[di+-319] +xor ax,dx +mov gs:[di+-319],ax +mov es:[di+-319],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_8b59: +mov ax,gs:[di+-1274] +xor ax,dx +mov gs:[di+-1274],ax +mov es:[di+-1274],ax +mov al,gs:[di+-955] +xor al,dl +mov gs:[di+-955],al +mov es:[di+-955],al +mov ax,gs:[di+-637] +xor ax,dx +mov gs:[di+-637],ax +mov es:[di+-637],ax +mov ax,gs:[di+-319] +xor ax,dx +mov gs:[di+-319],ax +mov es:[di+-319],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_9b59: +mov ax,gs:[di+-1273] +xor ax,dx +mov gs:[di+-1273],ax +mov es:[di+-1273],ax +mov ax,gs:[di+-955] +xor ax,dx +mov gs:[di+-955],ax +mov es:[di+-955],ax +mov ax,gs:[di+-637] +xor ax,dx +mov gs:[di+-637],ax +mov es:[di+-637],ax +mov ax,gs:[di+-319] +xor ax,dx +mov gs:[di+-319],ax +mov es:[di+-319],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_10b59: +mov ax,gs:[di+-1272] +xor ax,dx +mov gs:[di+-1272],ax +mov es:[di+-1272],ax +mov ax,gs:[di+-954] +xor ax,dx +mov gs:[di+-954],ax +mov es:[di+-954],ax +mov ax,gs:[di+-636] +xor ax,dx +mov gs:[di+-636],ax +mov es:[di+-636],ax +mov ax,gs:[di+-318] +xor ax,dx +mov gs:[di+-318],ax +mov es:[di+-318],ax +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +ret +lblt_54b60: +mov al,gs:[di+-1289] +xor al,dl +mov gs:[di+-1289],al +mov es:[di+-1289],al +mov ax,gs:[di+-968] +xor ax,dx +mov gs:[di+-968],ax +mov es:[di+-968],ax +mov ax,gs:[di+-646] +xor ax,dx +mov gs:[di+-646],ax +mov es:[di+-646],ax +mov al,gs:[di+-644] +xor al,dl +mov gs:[di+-644],al +mov es:[di+-644],al +mov ax,gs:[di+-323] +xor ax,dx +mov gs:[di+-323],ax +mov es:[di+-323],ax +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_55b60: +mov al,gs:[di+-1288] +xor al,dl +mov gs:[di+-1288],al +mov es:[di+-1288],al +mov ax,gs:[di+-967] +xor ax,dx +mov gs:[di+-967],ax +mov es:[di+-967],ax +mov ax,gs:[di+-645] +xor ax,dx +mov gs:[di+-645],ax +mov es:[di+-645],ax +mov ax,gs:[di+-323] +xor ax,dx +mov gs:[di+-323],ax +mov es:[di+-323],ax +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_56b60: +mov ax,gs:[di+-967] +xor ax,dx +mov gs:[di+-967],ax +mov es:[di+-967],ax +mov ax,gs:[di+-645] +xor ax,dx +mov gs:[di+-645],ax +mov es:[di+-645],ax +mov ax,gs:[di+-323] +xor ax,dx +mov gs:[di+-323],ax +mov es:[di+-323],ax +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_57b60: +mov ax,gs:[di+-966] +xor ax,dx +mov gs:[di+-966],ax +mov es:[di+-966],ax +mov ax,gs:[di+-644] +xor ax,dx +mov gs:[di+-644],ax +mov es:[di+-644],ax +mov ax,gs:[di+-322] +xor ax,dx +mov gs:[di+-322],ax +mov es:[di+-322],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_58b60: +mov ax,gs:[di+-965] +xor ax,dx +mov gs:[di+-965],ax +mov es:[di+-965],ax +mov al,gs:[di+-643] +xor al,dl +mov gs:[di+-643],al +mov es:[di+-643],al +mov ax,gs:[di+-322] +xor ax,dx +mov gs:[di+-322],ax +mov es:[di+-322],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_59b60: +mov al,gs:[di+-964] +xor al,dl +mov gs:[di+-964],al +mov es:[di+-964],al +mov ax,gs:[di+-643] +xor ax,dx +mov gs:[di+-643],ax +mov es:[di+-643],ax +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_60b60: +mov al,gs:[di+-963] +xor al,dl +mov gs:[di+-963],al +mov es:[di+-963],al +mov al,gs:[di+-642] +xor al,dl +mov gs:[di+-642],al +mov es:[di+-642],al +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_61b60: +mov al,gs:[di+-962] +xor al,dl +mov gs:[di+-962],al +mov es:[di+-962],al +mov al,gs:[di+-641] +xor al,dl +mov gs:[di+-641],al +mov es:[di+-641],al +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_62b60: +mov al,gs:[di+-961] +xor al,dl +mov gs:[di+-961],al +mov es:[di+-961],al +mov al,gs:[di+-641] +xor al,dl +mov gs:[di+-641],al +mov es:[di+-641],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_63b60: +mov al,gs:[di+-961] +xor al,dl +mov gs:[di+-961],al +mov es:[di+-961],al +mov al,gs:[di+-640] +xor al,dl +mov gs:[di+-640],al +mov es:[di+-640],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_0b60: +mov al,gs:[di+-960] +xor al,dl +mov gs:[di+-960],al +mov es:[di+-960],al +mov al,gs:[di+-640] +xor al,dl +mov gs:[di+-640],al +mov es:[di+-640],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_1b60: +mov al,gs:[di+-959] +xor al,dl +mov gs:[di+-959],al +mov es:[di+-959],al +mov al,gs:[di+-640] +xor al,dl +mov gs:[di+-640],al +mov es:[di+-640],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_2b60: +mov al,gs:[di+-959] +xor al,dl +mov gs:[di+-959],al +mov es:[di+-959],al +mov al,gs:[di+-639] +xor al,dl +mov gs:[di+-639],al +mov es:[di+-639],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_3b60: +mov al,gs:[di+-958] +xor al,dl +mov gs:[di+-958],al +mov es:[di+-958],al +mov al,gs:[di+-639] +xor al,dl +mov gs:[di+-639],al +mov es:[di+-639],al +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_4b60: +mov al,gs:[di+-957] +xor al,dl +mov gs:[di+-957],al +mov es:[di+-957],al +mov al,gs:[di+-638] +xor al,dl +mov gs:[di+-638],al +mov es:[di+-638],al +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_5b60: +mov al,gs:[di+-956] +xor al,dl +mov gs:[di+-956],al +mov es:[di+-956],al +mov ax,gs:[di+-638] +xor ax,dx +mov gs:[di+-638],ax +mov es:[di+-638],ax +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_6b60: +mov ax,gs:[di+-956] +xor ax,dx +mov gs:[di+-956],ax +mov es:[di+-956],ax +mov al,gs:[di+-637] +xor al,dl +mov gs:[di+-637],al +mov es:[di+-637],al +mov ax,gs:[di+-319] +xor ax,dx +mov gs:[di+-319],ax +mov es:[di+-319],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_7b60: +mov ax,gs:[di+-955] +xor ax,dx +mov gs:[di+-955],ax +mov es:[di+-955],ax +mov ax,gs:[di+-637] +xor ax,dx +mov gs:[di+-637],ax +mov es:[di+-637],ax +mov ax,gs:[di+-319] +xor ax,dx +mov gs:[di+-319],ax +mov es:[di+-319],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_8b60: +mov ax,gs:[di+-954] +xor ax,dx +mov gs:[di+-954],ax +mov es:[di+-954],ax +mov ax,gs:[di+-636] +xor ax,dx +mov gs:[di+-636],ax +mov es:[di+-636],ax +mov ax,gs:[di+-318] +xor ax,dx +mov gs:[di+-318],ax +mov es:[di+-318],ax +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +ret +lblt_9b60: +mov al,gs:[di+-1272] +xor al,dl +mov gs:[di+-1272],al +mov es:[di+-1272],al +mov ax,gs:[di+-954] +xor ax,dx +mov gs:[di+-954],ax +mov es:[di+-954],ax +mov ax,gs:[di+-636] +xor ax,dx +mov gs:[di+-636],ax +mov es:[di+-636],ax +mov ax,gs:[di+-318] +xor ax,dx +mov gs:[di+-318],ax +mov es:[di+-318],ax +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +ret +lblt_10b60: +mov al,gs:[di+-1271] +xor al,dl +mov gs:[di+-1271],al +mov es:[di+-1271],al +mov ax,gs:[di+-953] +xor ax,dx +mov gs:[di+-953],ax +mov es:[di+-953],ax +mov ax,gs:[di+-636] +xor ax,dx +mov gs:[di+-636],ax +mov es:[di+-636],ax +mov al,gs:[di+-634] +xor al,dl +mov gs:[di+-634],al +mov es:[di+-634],al +mov ax,gs:[di+-318] +xor ax,dx +mov gs:[di+-318],ax +mov es:[di+-318],ax +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +ret +lblt_54b61: +mov al,gs:[di+-969] +xor al,dl +mov gs:[di+-969],al +mov es:[di+-969],al +mov ax,gs:[di+-648] +xor ax,dx +mov gs:[di+-648],ax +mov es:[di+-648],ax +mov al,gs:[di+-646] +xor al,dl +mov gs:[di+-646],al +mov es:[di+-646],al +mov ax,gs:[di+-325] +xor ax,dx +mov gs:[di+-325],ax +mov es:[di+-325],ax +mov ax,gs:[di+-323] +xor ax,dx +mov gs:[di+-323],ax +mov es:[di+-323],ax +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_55b61: +mov al,gs:[di+-968] +xor al,dl +mov gs:[di+-968],al +mov es:[di+-968],al +mov ax,gs:[di+-647] +xor ax,dx +mov gs:[di+-647],ax +mov es:[di+-647],ax +mov al,gs:[di+-645] +xor al,dl +mov gs:[di+-645],al +mov es:[di+-645],al +mov ax,gs:[di+-324] +xor ax,dx +mov gs:[di+-324],ax +mov es:[di+-324],ax +mov al,gs:[di+-322] +xor al,dl +mov gs:[di+-322],al +mov es:[di+-322],al +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_56b61: +mov al,gs:[di+-967] +xor al,dl +mov gs:[di+-967],al +mov es:[di+-967],al +mov ax,gs:[di+-646] +xor ax,dx +mov gs:[di+-646],ax +mov es:[di+-646],ax +mov ax,gs:[di+-324] +xor ax,dx +mov gs:[di+-324],ax +mov es:[di+-324],ax +mov al,gs:[di+-322] +xor al,dl +mov gs:[di+-322],al +mov es:[di+-322],al +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_57b61: +mov al,gs:[di+-966] +xor al,dl +mov gs:[di+-966],al +mov es:[di+-966],al +mov ax,gs:[di+-645] +xor ax,dx +mov gs:[di+-645],ax +mov es:[di+-645],ax +mov ax,gs:[di+-323] +xor ax,dx +mov gs:[di+-323],ax +mov es:[di+-323],ax +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_58b61: +mov ax,gs:[di+-645] +xor ax,dx +mov gs:[di+-645],ax +mov es:[di+-645],ax +mov ax,gs:[di+-323] +xor ax,dx +mov gs:[di+-323],ax +mov es:[di+-323],ax +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_59b61: +mov ax,gs:[di+-644] +xor ax,dx +mov gs:[di+-644],ax +mov es:[di+-644],ax +mov ax,gs:[di+-322] +xor ax,dx +mov gs:[di+-322],ax +mov es:[di+-322],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_60b61: +mov al,gs:[di+-643] +xor al,dl +mov gs:[di+-643],al +mov es:[di+-643],al +mov ax,gs:[di+-322] +xor ax,dx +mov gs:[di+-322],ax +mov es:[di+-322],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_61b61: +mov al,gs:[di+-642] +xor al,dl +mov gs:[di+-642],al +mov es:[di+-642],al +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_62b61: +mov al,gs:[di+-641] +xor al,dl +mov gs:[di+-641],al +mov es:[di+-641],al +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_63b61: +mov al,gs:[di+-641] +xor al,dl +mov gs:[di+-641],al +mov es:[di+-641],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_0b61: +mov al,gs:[di+-640] +xor al,dl +mov gs:[di+-640],al +mov es:[di+-640],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_1b61: +mov al,gs:[di+-639] +xor al,dl +mov gs:[di+-639],al +mov es:[di+-639],al +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_2b61: +mov al,gs:[di+-639] +xor al,dl +mov gs:[di+-639],al +mov es:[di+-639],al +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_3b61: +mov al,gs:[di+-638] +xor al,dl +mov gs:[di+-638],al +mov es:[di+-638],al +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_4b61: +mov al,gs:[di+-637] +xor al,dl +mov gs:[di+-637],al +mov es:[di+-637],al +mov ax,gs:[di+-319] +xor ax,dx +mov gs:[di+-319],ax +mov es:[di+-319],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_5b61: +mov ax,gs:[di+-637] +xor ax,dx +mov gs:[di+-637],ax +mov es:[di+-637],ax +mov ax,gs:[di+-319] +xor ax,dx +mov gs:[di+-319],ax +mov es:[di+-319],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_6b61: +mov ax,gs:[di+-636] +xor ax,dx +mov gs:[di+-636],ax +mov es:[di+-636],ax +mov ax,gs:[di+-318] +xor ax,dx +mov gs:[di+-318],ax +mov es:[di+-318],ax +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +ret +lblt_7b61: +mov al,gs:[di+-954] +xor al,dl +mov gs:[di+-954],al +mov es:[di+-954],al +mov ax,gs:[di+-636] +xor ax,dx +mov gs:[di+-636],ax +mov es:[di+-636],ax +mov ax,gs:[di+-318] +xor ax,dx +mov gs:[di+-318],ax +mov es:[di+-318],ax +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +ret +lblt_8b61: +mov al,gs:[di+-953] +xor al,dl +mov gs:[di+-953],al +mov es:[di+-953],al +mov ax,gs:[di+-635] +xor ax,dx +mov gs:[di+-635],ax +mov es:[di+-635],ax +mov ax,gs:[di+-318] +xor ax,dx +mov gs:[di+-318],ax +mov es:[di+-318],ax +mov al,gs:[di+-316] +xor al,dl +mov gs:[di+-316],al +mov es:[di+-316],al +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +ret +lblt_9b61: +mov al,gs:[di+-952] +xor al,dl +mov gs:[di+-952],al +mov es:[di+-952],al +mov ax,gs:[di+-635] +xor ax,dx +mov gs:[di+-635],ax +mov es:[di+-635],ax +mov al,gs:[di+-633] +xor al,dl +mov gs:[di+-633],al +mov es:[di+-633],al +mov ax,gs:[di+-318] +xor ax,dx +mov gs:[di+-318],ax +mov es:[di+-318],ax +mov al,gs:[di+-316] +xor al,dl +mov gs:[di+-316],al +mov es:[di+-316],al +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +ret +lblt_10b61: +mov al,gs:[di+-951] +xor al,dl +mov gs:[di+-951],al +mov es:[di+-951],al +mov ax,gs:[di+-634] +xor ax,dx +mov gs:[di+-634],ax +mov es:[di+-634],ax +mov al,gs:[di+-632] +xor al,dl +mov gs:[di+-632],al +mov es:[di+-632],al +mov ax,gs:[di+-318] +xor ax,dx +mov gs:[di+-318],ax +mov es:[di+-318],ax +mov ax,gs:[di+-316] +xor ax,dx +mov gs:[di+-316],ax +mov es:[di+-316],ax +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +ret +lblt_54b62: +mov ax,gs:[di+-649] +xor ax,dx +mov gs:[di+-649],ax +mov es:[di+-649],ax +mov ax,gs:[di+-327] +xor ax,dx +mov gs:[di+-327],ax +mov es:[di+-327],ax +mov ax,gs:[di+-325] +xor ax,dx +mov gs:[di+-325],ax +mov es:[di+-325],ax +mov al,gs:[di+-323] +xor al,dl +mov gs:[di+-323],al +mov es:[di+-323],al +mov ax,gs:[di+-2] +xor ax,dx +mov gs:[di+-2],ax +mov es:[di+-2],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_55b62: +mov ax,gs:[di+-648] +xor ax,dx +mov gs:[di+-648],ax +mov es:[di+-648],ax +mov ax,gs:[di+-326] +xor ax,dx +mov gs:[di+-326],ax +mov es:[di+-326],ax +mov ax,gs:[di+-324] +xor ax,dx +mov gs:[di+-324],ax +mov es:[di+-324],ax +mov ax,gs:[di+-2] +xor ax,dx +mov gs:[di+-2],ax +mov es:[di+-2],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_56b62: +mov al,gs:[di+-647] +xor al,dl +mov gs:[di+-647],al +mov es:[di+-647],al +mov ax,gs:[di+-326] +xor ax,dx +mov gs:[di+-326],ax +mov es:[di+-326],ax +mov ax,gs:[di+-324] +xor ax,dx +mov gs:[di+-324],ax +mov es:[di+-324],ax +mov ax,gs:[di+-2] +xor ax,dx +mov gs:[di+-2],ax +mov es:[di+-2],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_57b62: +mov al,gs:[di+-646] +xor al,dl +mov gs:[di+-646],al +mov es:[di+-646],al +mov ax,gs:[di+-325] +xor ax,dx +mov gs:[di+-325],ax +mov es:[di+-325],ax +mov ax,gs:[di+-323] +xor ax,dx +mov gs:[di+-323],ax +mov es:[di+-323],ax +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_58b62: +mov al,gs:[di+-645] +xor al,dl +mov gs:[di+-645],al +mov es:[di+-645],al +mov ax,gs:[di+-324] +xor ax,dx +mov gs:[di+-324],ax +mov es:[di+-324],ax +mov al,gs:[di+-322] +xor al,dl +mov gs:[di+-322],al +mov es:[di+-322],al +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_59b62: +mov al,gs:[di+-644] +xor al,dl +mov gs:[di+-644],al +mov es:[di+-644],al +mov ax,gs:[di+-323] +xor ax,dx +mov gs:[di+-323],ax +mov es:[di+-323],ax +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_60b62: +mov ax,gs:[di+-323] +xor ax,dx +mov gs:[di+-323],ax +mov es:[di+-323],ax +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_61b62: +mov ax,gs:[di+-322] +xor ax,dx +mov gs:[di+-322],ax +mov es:[di+-322],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_62b62: +mov al,gs:[di+-321] +xor al,dl +mov gs:[di+-321],al +mov es:[di+-321],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_63b62: +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_0b62: +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_1b62: +mov al,gs:[di+-320] +xor al,dl +mov gs:[di+-320],al +mov es:[di+-320],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_2b62: +mov al,gs:[di+-319] +xor al,dl +mov gs:[di+-319],al +mov es:[di+-319],al +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_3b62: +mov ax,gs:[di+-319] +xor ax,dx +mov gs:[di+-319],ax +mov es:[di+-319],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_4b62: +mov ax,gs:[di+-318] +xor ax,dx +mov gs:[di+-318],ax +mov es:[di+-318],ax +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +ret +lblt_5b62: +mov al,gs:[di+-636] +xor al,dl +mov gs:[di+-636],al +mov es:[di+-636],al +mov ax,gs:[di+-318] +xor ax,dx +mov gs:[di+-318],ax +mov es:[di+-318],ax +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +ret +lblt_6b62: +mov al,gs:[di+-635] +xor al,dl +mov gs:[di+-635],al +mov es:[di+-635],al +mov ax,gs:[di+-318] +xor ax,dx +mov gs:[di+-318],ax +mov es:[di+-318],ax +mov al,gs:[di+-316] +xor al,dl +mov gs:[di+-316],al +mov es:[di+-316],al +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +ret +lblt_7b62: +mov al,gs:[di+-634] +xor al,dl +mov gs:[di+-634],al +mov es:[di+-634],al +mov ax,gs:[di+-318] +xor ax,dx +mov gs:[di+-318],ax +mov es:[di+-318],ax +mov ax,gs:[di+-316] +xor ax,dx +mov gs:[di+-316],ax +mov es:[di+-316],ax +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +ret +lblt_8b62: +mov al,gs:[di+-633] +xor al,dl +mov gs:[di+-633],al +mov es:[di+-633],al +mov ax,gs:[di+-317] +xor ax,dx +mov gs:[di+-317],ax +mov es:[di+-317],ax +mov ax,gs:[di+-315] +xor ax,dx +mov gs:[di+-315],ax +mov es:[di+-315],ax +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov al,gs:[di+2] +xor al,dl +mov gs:[di+2],al +mov es:[di+2],al +ret +lblt_9b62: +mov ax,gs:[di+-633] +xor ax,dx +mov gs:[di+-633],ax +mov es:[di+-633],ax +mov ax,gs:[di+-317] +xor ax,dx +mov gs:[di+-317],ax +mov es:[di+-317],ax +mov ax,gs:[di+-315] +xor ax,dx +mov gs:[di+-315],ax +mov es:[di+-315],ax +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov al,gs:[di+2] +xor al,dl +mov gs:[di+2],al +mov es:[di+2],al +ret +lblt_10b62: +mov ax,gs:[di+-632] +xor ax,dx +mov gs:[di+-632],ax +mov es:[di+-632],ax +mov ax,gs:[di+-317] +xor ax,dx +mov gs:[di+-317],ax +mov es:[di+-317],ax +mov ax,gs:[di+-315] +xor ax,dx +mov gs:[di+-315],ax +mov es:[di+-315],ax +mov al,gs:[di+-313] +xor al,dl +mov gs:[di+-313],al +mov es:[di+-313],al +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov al,gs:[di+2] +xor al,dl +mov gs:[di+2],al +mov es:[di+2],al +ret +lblt_54b63: +mov ax,gs:[di+-329] +xor ax,dx +mov gs:[di+-329],ax +mov es:[di+-329],ax +mov ax,gs:[di+-327] +xor ax,dx +mov gs:[di+-327],ax +mov es:[di+-327],ax +mov ax,gs:[di+-5] +xor ax,dx +mov gs:[di+-5],ax +mov es:[di+-5],ax +mov ax,gs:[di+-3] +xor ax,dx +mov gs:[di+-3],ax +mov es:[di+-3],ax +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_55b63: +mov ax,gs:[di+-328] +xor ax,dx +mov gs:[di+-328],ax +mov es:[di+-328],ax +mov ax,gs:[di+-326] +xor ax,dx +mov gs:[di+-326],ax +mov es:[di+-326],ax +mov ax,gs:[di+-4] +xor ax,dx +mov gs:[di+-4],ax +mov es:[di+-4],ax +mov ax,gs:[di+-2] +xor ax,dx +mov gs:[di+-2],ax +mov es:[di+-2],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_56b63: +mov ax,gs:[di+-327] +xor ax,dx +mov gs:[di+-327],ax +mov es:[di+-327],ax +mov al,gs:[di+-325] +xor al,dl +mov gs:[di+-325],al +mov es:[di+-325],al +mov ax,gs:[di+-4] +xor ax,dx +mov gs:[di+-4],ax +mov es:[di+-4],ax +mov ax,gs:[di+-2] +xor ax,dx +mov gs:[di+-2],ax +mov es:[di+-2],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_57b63: +mov ax,gs:[di+-326] +xor ax,dx +mov gs:[di+-326],ax +mov es:[di+-326],ax +mov al,gs:[di+-324] +xor al,dl +mov gs:[di+-324],al +mov es:[di+-324],al +mov ax,gs:[di+-3] +xor ax,dx +mov gs:[di+-3],ax +mov es:[di+-3],ax +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_58b63: +mov ax,gs:[di+-325] +xor ax,dx +mov gs:[di+-325],ax +mov es:[di+-325],ax +mov ax,gs:[di+-3] +xor ax,dx +mov gs:[di+-3],ax +mov es:[di+-3],ax +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_59b63: +mov ax,gs:[di+-324] +xor ax,dx +mov gs:[di+-324],ax +mov es:[di+-324],ax +mov ax,gs:[di+-2] +xor ax,dx +mov gs:[di+-2],ax +mov es:[di+-2],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_60b63: +mov al,gs:[di+-323] +xor al,dl +mov gs:[di+-323],al +mov es:[di+-323],al +mov ax,gs:[di+-2] +xor ax,dx +mov gs:[di+-2],ax +mov es:[di+-2],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_61b63: +mov al,gs:[di+-322] +xor al,dl +mov gs:[di+-322],al +mov es:[di+-322],al +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_62b63: +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_63b63: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_0b63: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_1b63: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_2b63: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +ret +lblt_3b63: +mov al,gs:[di+-318] +xor al,dl +mov gs:[di+-318],al +mov es:[di+-318],al +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +ret +lblt_4b63: +mov al,gs:[di+-317] +xor al,dl +mov gs:[di+-317],al +mov es:[di+-317],al +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov al,gs:[di+2] +xor al,dl +mov gs:[di+2],al +mov es:[di+2],al +ret +lblt_5b63: +mov ax,gs:[di+-317] +xor ax,dx +mov gs:[di+-317],ax +mov es:[di+-317],ax +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov al,gs:[di+2] +xor al,dl +mov gs:[di+2],al +mov es:[di+2],al +ret +lblt_6b63: +mov ax,gs:[di+-316] +xor ax,dx +mov gs:[di+-316],ax +mov es:[di+-316],ax +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+2] +xor ax,dx +mov gs:[di+2],ax +mov es:[di+2],ax +ret +lblt_7b63: +mov ax,gs:[di+-316] +xor ax,dx +mov gs:[di+-316],ax +mov es:[di+-316],ax +mov al,gs:[di+-314] +xor al,dl +mov gs:[di+-314],al +mov es:[di+-314],al +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+2] +xor ax,dx +mov gs:[di+2],ax +mov es:[di+2],ax +ret +lblt_8b63: +mov ax,gs:[di+-315] +xor ax,dx +mov gs:[di+-315],ax +mov es:[di+-315],ax +mov al,gs:[di+-313] +xor al,dl +mov gs:[di+-313],al +mov es:[di+-313],al +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+2] +xor ax,dx +mov gs:[di+2],ax +mov es:[di+2],ax +mov al,gs:[di+4] +xor al,dl +mov gs:[di+4],al +mov es:[di+4],al +ret +lblt_9b63: +mov ax,gs:[di+-315] +xor ax,dx +mov gs:[di+-315],ax +mov es:[di+-315],ax +mov ax,gs:[di+-313] +xor ax,dx +mov gs:[di+-313],ax +mov es:[di+-313],ax +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+2] +xor ax,dx +mov gs:[di+2],ax +mov es:[di+2],ax +mov al,gs:[di+4] +xor al,dl +mov gs:[di+4],al +mov es:[di+4],al +ret +lblt_10b63: +mov ax,gs:[di+-314] +xor ax,dx +mov gs:[di+-314],ax +mov es:[di+-314],ax +mov ax,gs:[di+-312] +xor ax,dx +mov gs:[di+-312],ax +mov es:[di+-312],ax +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+2] +xor ax,dx +mov gs:[di+2],ax +mov es:[di+2],ax +mov ax,gs:[di+4] +xor ax,dx +mov gs:[di+4],ax +mov es:[di+4],ax +ret +lblt_54b0: +mov ax,gs:[di+-9] +xor ax,dx +mov gs:[di+-9],ax +mov es:[di+-9],ax +mov ax,gs:[di+-7] +xor ax,dx +mov gs:[di+-7],ax +mov es:[di+-7],ax +mov ax,gs:[di+-5] +xor ax,dx +mov gs:[di+-5],ax +mov es:[di+-5],ax +mov ax,gs:[di+-3] +xor ax,dx +mov gs:[di+-3],ax +mov es:[di+-3],ax +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_55b0: +mov ax,gs:[di+-8] +xor ax,dx +mov gs:[di+-8],ax +mov es:[di+-8],ax +mov ax,gs:[di+-6] +xor ax,dx +mov gs:[di+-6],ax +mov es:[di+-6],ax +mov ax,gs:[di+-4] +xor ax,dx +mov gs:[di+-4],ax +mov es:[di+-4],ax +mov ax,gs:[di+-2] +xor ax,dx +mov gs:[di+-2],ax +mov es:[di+-2],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_56b0: +mov ax,gs:[di+-7] +xor ax,dx +mov gs:[di+-7],ax +mov es:[di+-7],ax +mov ax,gs:[di+-5] +xor ax,dx +mov gs:[di+-5],ax +mov es:[di+-5],ax +mov ax,gs:[di+-3] +xor ax,dx +mov gs:[di+-3],ax +mov es:[di+-3],ax +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_57b0: +mov ax,gs:[di+-6] +xor ax,dx +mov gs:[di+-6],ax +mov es:[di+-6],ax +mov ax,gs:[di+-4] +xor ax,dx +mov gs:[di+-4],ax +mov es:[di+-4],ax +mov ax,gs:[di+-2] +xor ax,dx +mov gs:[di+-2],ax +mov es:[di+-2],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_58b0: +mov ax,gs:[di+-5] +xor ax,dx +mov gs:[di+-5],ax +mov es:[di+-5],ax +mov ax,gs:[di+-3] +xor ax,dx +mov gs:[di+-3],ax +mov es:[di+-3],ax +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_59b0: +mov ax,gs:[di+-4] +xor ax,dx +mov gs:[di+-4],ax +mov es:[di+-4],ax +mov ax,gs:[di+-2] +xor ax,dx +mov gs:[di+-2],ax +mov es:[di+-2],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_60b0: +mov ax,gs:[di+-3] +xor ax,dx +mov gs:[di+-3],ax +mov es:[di+-3],ax +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_61b0: +mov ax,gs:[di+-2] +xor ax,dx +mov gs:[di+-2],ax +mov es:[di+-2],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_62b0: +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_63b0: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_0b0: +ret +lblt_1b0: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_2b0: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +ret +lblt_3b0: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov al,gs:[di+2] +xor al,dl +mov gs:[di+2],al +mov es:[di+2],al +ret +lblt_4b0: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+2] +xor ax,dx +mov gs:[di+2],ax +mov es:[di+2],ax +ret +lblt_5b0: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+2] +xor ax,dx +mov gs:[di+2],ax +mov es:[di+2],ax +mov al,gs:[di+4] +xor al,dl +mov gs:[di+4],al +mov es:[di+4],al +ret +lblt_6b0: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+2] +xor ax,dx +mov gs:[di+2],ax +mov es:[di+2],ax +mov ax,gs:[di+4] +xor ax,dx +mov gs:[di+4],ax +mov es:[di+4],ax +ret +lblt_7b0: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+2] +xor ax,dx +mov gs:[di+2],ax +mov es:[di+2],ax +mov ax,gs:[di+4] +xor ax,dx +mov gs:[di+4],ax +mov es:[di+4],ax +mov al,gs:[di+6] +xor al,dl +mov gs:[di+6],al +mov es:[di+6],al +ret +lblt_8b0: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+2] +xor ax,dx +mov gs:[di+2],ax +mov es:[di+2],ax +mov ax,gs:[di+4] +xor ax,dx +mov gs:[di+4],ax +mov es:[di+4],ax +mov ax,gs:[di+6] +xor ax,dx +mov gs:[di+6],ax +mov es:[di+6],ax +ret +lblt_9b0: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+2] +xor ax,dx +mov gs:[di+2],ax +mov es:[di+2],ax +mov ax,gs:[di+4] +xor ax,dx +mov gs:[di+4],ax +mov es:[di+4],ax +mov ax,gs:[di+6] +xor ax,dx +mov gs:[di+6],ax +mov es:[di+6],ax +mov al,gs:[di+8] +xor al,dl +mov gs:[di+8],al +mov es:[di+8],al +ret +lblt_10b0: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+2] +xor ax,dx +mov gs:[di+2],ax +mov es:[di+2],ax +mov ax,gs:[di+4] +xor ax,dx +mov gs:[di+4],ax +mov es:[di+4],ax +mov ax,gs:[di+6] +xor ax,dx +mov gs:[di+6],ax +mov es:[di+6],ax +mov ax,gs:[di+8] +xor ax,dx +mov gs:[di+8],ax +mov es:[di+8],ax +ret +lblt_54b1: +mov ax,gs:[di+-5] +xor ax,dx +mov gs:[di+-5],ax +mov es:[di+-5],ax +mov ax,gs:[di+-3] +xor ax,dx +mov gs:[di+-3],ax +mov es:[di+-3],ax +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +mov ax,gs:[di+311] +xor ax,dx +mov gs:[di+311],ax +mov es:[di+311],ax +mov ax,gs:[di+313] +xor ax,dx +mov gs:[di+313],ax +mov es:[di+313],ax +ret +lblt_55b1: +mov ax,gs:[di+-4] +xor ax,dx +mov gs:[di+-4],ax +mov es:[di+-4],ax +mov ax,gs:[di+-2] +xor ax,dx +mov gs:[di+-2],ax +mov es:[di+-2],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+312] +xor ax,dx +mov gs:[di+312],ax +mov es:[di+312],ax +mov ax,gs:[di+314] +xor ax,dx +mov gs:[di+314],ax +mov es:[di+314],ax +ret +lblt_56b1: +mov ax,gs:[di+-4] +xor ax,dx +mov gs:[di+-4],ax +mov es:[di+-4],ax +mov ax,gs:[di+-2] +xor ax,dx +mov gs:[di+-2],ax +mov es:[di+-2],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+313] +xor ax,dx +mov gs:[di+313],ax +mov es:[di+313],ax +mov al,gs:[di+315] +xor al,dl +mov gs:[di+315],al +mov es:[di+315],al +ret +lblt_57b1: +mov ax,gs:[di+-3] +xor ax,dx +mov gs:[di+-3],ax +mov es:[di+-3],ax +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +mov ax,gs:[di+314] +xor ax,dx +mov gs:[di+314],ax +mov es:[di+314],ax +mov al,gs:[di+316] +xor al,dl +mov gs:[di+316],al +mov es:[di+316],al +ret +lblt_58b1: +mov ax,gs:[di+-3] +xor ax,dx +mov gs:[di+-3],ax +mov es:[di+-3],ax +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +mov ax,gs:[di+315] +xor ax,dx +mov gs:[di+315],ax +mov es:[di+315],ax +ret +lblt_59b1: +mov ax,gs:[di+-2] +xor ax,dx +mov gs:[di+-2],ax +mov es:[di+-2],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+316] +xor ax,dx +mov gs:[di+316],ax +mov es:[di+316],ax +ret +lblt_60b1: +mov ax,gs:[di+-2] +xor ax,dx +mov gs:[di+-2],ax +mov es:[di+-2],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+317] +xor al,dl +mov gs:[di+317],al +mov es:[di+317],al +ret +lblt_61b1: +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +mov al,gs:[di+318] +xor al,dl +mov gs:[di+318],al +mov es:[di+318],al +ret +lblt_62b1: +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +ret +lblt_63b1: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_0b1: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_1b1: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +ret +lblt_2b1: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +ret +lblt_3b1: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov al,gs:[di+322] +xor al,dl +mov gs:[di+322],al +mov es:[di+322],al +ret +lblt_4b1: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov al,gs:[di+2] +xor al,dl +mov gs:[di+2],al +mov es:[di+2],al +mov al,gs:[di+323] +xor al,dl +mov gs:[di+323],al +mov es:[di+323],al +ret +lblt_5b1: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov al,gs:[di+2] +xor al,dl +mov gs:[di+2],al +mov es:[di+2],al +mov ax,gs:[di+323] +xor ax,dx +mov gs:[di+323],ax +mov es:[di+323],ax +ret +lblt_6b1: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+2] +xor ax,dx +mov gs:[di+2],ax +mov es:[di+2],ax +mov ax,gs:[di+324] +xor ax,dx +mov gs:[di+324],ax +mov es:[di+324],ax +ret +lblt_7b1: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+2] +xor ax,dx +mov gs:[di+2],ax +mov es:[di+2],ax +mov ax,gs:[di+324] +xor ax,dx +mov gs:[di+324],ax +mov es:[di+324],ax +mov al,gs:[di+326] +xor al,dl +mov gs:[di+326],al +mov es:[di+326],al +ret +lblt_8b1: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+2] +xor ax,dx +mov gs:[di+2],ax +mov es:[di+2],ax +mov al,gs:[di+4] +xor al,dl +mov gs:[di+4],al +mov es:[di+4],al +mov ax,gs:[di+325] +xor ax,dx +mov gs:[di+325],ax +mov es:[di+325],ax +mov al,gs:[di+327] +xor al,dl +mov gs:[di+327],al +mov es:[di+327],al +ret +lblt_9b1: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+2] +xor ax,dx +mov gs:[di+2],ax +mov es:[di+2],ax +mov al,gs:[di+4] +xor al,dl +mov gs:[di+4],al +mov es:[di+4],al +mov ax,gs:[di+325] +xor ax,dx +mov gs:[di+325],ax +mov es:[di+325],ax +mov ax,gs:[di+327] +xor ax,dx +mov gs:[di+327],ax +mov es:[di+327],ax +ret +lblt_10b1: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+2] +xor ax,dx +mov gs:[di+2],ax +mov es:[di+2],ax +mov ax,gs:[di+4] +xor ax,dx +mov gs:[di+4],ax +mov es:[di+4],ax +mov ax,gs:[di+326] +xor ax,dx +mov gs:[di+326],ax +mov es:[di+326],ax +mov ax,gs:[di+328] +xor ax,dx +mov gs:[di+328],ax +mov es:[di+328],ax +ret +lblt_54b2: +mov ax,gs:[di+-2] +xor ax,dx +mov gs:[di+-2],ax +mov es:[di+-2],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+313] +xor ax,dx +mov gs:[di+313],ax +mov es:[di+313],ax +mov ax,gs:[di+315] +xor ax,dx +mov gs:[di+315],ax +mov es:[di+315],ax +mov al,gs:[di+317] +xor al,dl +mov gs:[di+317],al +mov es:[di+317],al +mov ax,gs:[di+631] +xor ax,dx +mov gs:[di+631],ax +mov es:[di+631],ax +ret +lblt_55b2: +mov ax,gs:[di+-2] +xor ax,dx +mov gs:[di+-2],ax +mov es:[di+-2],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+314] +xor ax,dx +mov gs:[di+314],ax +mov es:[di+314],ax +mov ax,gs:[di+316] +xor ax,dx +mov gs:[di+316],ax +mov es:[di+316],ax +mov ax,gs:[di+632] +xor ax,dx +mov gs:[di+632],ax +mov es:[di+632],ax +ret +lblt_56b2: +mov ax,gs:[di+-2] +xor ax,dx +mov gs:[di+-2],ax +mov es:[di+-2],ax +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+314] +xor ax,dx +mov gs:[di+314],ax +mov es:[di+314],ax +mov ax,gs:[di+316] +xor ax,dx +mov gs:[di+316],ax +mov es:[di+316],ax +mov al,gs:[di+633] +xor al,dl +mov gs:[di+633],al +mov es:[di+633],al +ret +lblt_57b2: +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +mov ax,gs:[di+315] +xor ax,dx +mov gs:[di+315],ax +mov es:[di+315],ax +mov ax,gs:[di+317] +xor ax,dx +mov gs:[di+317],ax +mov es:[di+317],ax +mov al,gs:[di+634] +xor al,dl +mov gs:[di+634],al +mov es:[di+634],al +ret +lblt_58b2: +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +mov ax,gs:[di+316] +xor ax,dx +mov gs:[di+316],ax +mov es:[di+316],ax +mov al,gs:[di+318] +xor al,dl +mov gs:[di+318],al +mov es:[di+318],al +mov al,gs:[di+635] +xor al,dl +mov gs:[di+635],al +mov es:[di+635],al +ret +lblt_59b2: +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +mov ax,gs:[di+317] +xor ax,dx +mov gs:[di+317],ax +mov es:[di+317],ax +mov al,gs:[di+636] +xor al,dl +mov gs:[di+636],al +mov es:[di+636],al +ret +lblt_60b2: +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +mov ax,gs:[di+317] +xor ax,dx +mov gs:[di+317],ax +mov es:[di+317],ax +ret +lblt_61b2: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+318] +xor ax,dx +mov gs:[di+318],ax +mov es:[di+318],ax +ret +lblt_62b2: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +ret +lblt_63b2: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +ret +lblt_0b2: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +ret +lblt_1b2: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +ret +lblt_2b2: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +ret +lblt_3b2: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+321] +xor ax,dx +mov gs:[di+321],ax +mov es:[di+321],ax +ret +lblt_4b2: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+322] +xor ax,dx +mov gs:[di+322],ax +mov es:[di+322],ax +ret +lblt_5b2: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+322] +xor ax,dx +mov gs:[di+322],ax +mov es:[di+322],ax +mov al,gs:[di+644] +xor al,dl +mov gs:[di+644],al +mov es:[di+644],al +ret +lblt_6b2: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+322] +xor ax,dx +mov gs:[di+322],ax +mov es:[di+322],ax +mov al,gs:[di+324] +xor al,dl +mov gs:[di+324],al +mov es:[di+324],al +mov al,gs:[di+645] +xor al,dl +mov gs:[di+645],al +mov es:[di+645],al +ret +lblt_7b2: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+322] +xor ax,dx +mov gs:[di+322],ax +mov es:[di+322],ax +mov ax,gs:[di+324] +xor ax,dx +mov gs:[di+324],ax +mov es:[di+324],ax +mov al,gs:[di+646] +xor al,dl +mov gs:[di+646],al +mov es:[di+646],al +ret +lblt_8b2: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov al,gs:[di+2] +xor al,dl +mov gs:[di+2],al +mov es:[di+2],al +mov ax,gs:[di+323] +xor ax,dx +mov gs:[di+323],ax +mov es:[di+323],ax +mov ax,gs:[di+325] +xor ax,dx +mov gs:[di+325],ax +mov es:[di+325],ax +mov al,gs:[di+647] +xor al,dl +mov gs:[di+647],al +mov es:[di+647],al +ret +lblt_9b2: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov al,gs:[di+2] +xor al,dl +mov gs:[di+2],al +mov es:[di+2],al +mov ax,gs:[di+323] +xor ax,dx +mov gs:[di+323],ax +mov es:[di+323],ax +mov ax,gs:[di+325] +xor ax,dx +mov gs:[di+325],ax +mov es:[di+325],ax +mov ax,gs:[di+647] +xor ax,dx +mov gs:[di+647],ax +mov es:[di+647],ax +ret +lblt_10b2: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov al,gs:[di+2] +xor al,dl +mov gs:[di+2],al +mov es:[di+2],al +mov ax,gs:[di+323] +xor ax,dx +mov gs:[di+323],ax +mov es:[di+323],ax +mov ax,gs:[di+325] +xor ax,dx +mov gs:[di+325],ax +mov es:[di+325],ax +mov al,gs:[di+327] +xor al,dl +mov gs:[di+327],al +mov es:[di+327],al +mov ax,gs:[di+648] +xor ax,dx +mov gs:[di+648],ax +mov es:[di+648],ax +ret +lblt_54b3: +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +mov ax,gs:[di+315] +xor ax,dx +mov gs:[di+315],ax +mov es:[di+315],ax +mov ax,gs:[di+317] +xor ax,dx +mov gs:[di+317],ax +mov es:[di+317],ax +mov ax,gs:[di+632] +xor ax,dx +mov gs:[di+632],ax +mov es:[di+632],ax +mov al,gs:[di+634] +xor al,dl +mov gs:[di+634],al +mov es:[di+634],al +mov al,gs:[di+951] +xor al,dl +mov gs:[di+951],al +mov es:[di+951],al +ret +lblt_55b3: +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +mov ax,gs:[di+316] +xor ax,dx +mov gs:[di+316],ax +mov es:[di+316],ax +mov al,gs:[di+318] +xor al,dl +mov gs:[di+318],al +mov es:[di+318],al +mov ax,gs:[di+633] +xor ax,dx +mov gs:[di+633],ax +mov es:[di+633],ax +mov al,gs:[di+635] +xor al,dl +mov gs:[di+635],al +mov es:[di+635],al +mov al,gs:[di+952] +xor al,dl +mov gs:[di+952],al +mov es:[di+952],al +ret +lblt_56b3: +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +mov ax,gs:[di+316] +xor ax,dx +mov gs:[di+316],ax +mov es:[di+316],ax +mov al,gs:[di+318] +xor al,dl +mov gs:[di+318],al +mov es:[di+318],al +mov ax,gs:[di+634] +xor ax,dx +mov gs:[di+634],ax +mov es:[di+634],ax +mov al,gs:[di+953] +xor al,dl +mov gs:[di+953],al +mov es:[di+953],al +ret +lblt_57b3: +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +mov ax,gs:[di+317] +xor ax,dx +mov gs:[di+317],ax +mov es:[di+317],ax +mov ax,gs:[di+635] +xor ax,dx +mov gs:[di+635],ax +mov es:[di+635],ax +mov al,gs:[di+954] +xor al,dl +mov gs:[di+954],al +mov es:[di+954],al +ret +lblt_58b3: +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +mov ax,gs:[di+317] +xor ax,dx +mov gs:[di+317],ax +mov es:[di+317],ax +mov ax,gs:[di+635] +xor ax,dx +mov gs:[di+635],ax +mov es:[di+635],ax +ret +lblt_59b3: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+318] +xor ax,dx +mov gs:[di+318],ax +mov es:[di+318],ax +mov ax,gs:[di+636] +xor ax,dx +mov gs:[di+636],ax +mov es:[di+636],ax +ret +lblt_60b3: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+318] +xor ax,dx +mov gs:[di+318],ax +mov es:[di+318],ax +mov al,gs:[di+637] +xor al,dl +mov gs:[di+637],al +mov es:[di+637],al +ret +lblt_61b3: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov al,gs:[di+638] +xor al,dl +mov gs:[di+638],al +mov es:[di+638],al +ret +lblt_62b3: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov al,gs:[di+639] +xor al,dl +mov gs:[di+639],al +mov es:[di+639],al +ret +lblt_63b3: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+639] +xor al,dl +mov gs:[di+639],al +mov es:[di+639],al +ret +lblt_0b3: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+640] +xor al,dl +mov gs:[di+640],al +mov es:[di+640],al +ret +lblt_1b3: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+641] +xor al,dl +mov gs:[di+641],al +mov es:[di+641],al +ret +lblt_2b3: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov al,gs:[di+641] +xor al,dl +mov gs:[di+641],al +mov es:[di+641],al +ret +lblt_3b3: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov al,gs:[di+642] +xor al,dl +mov gs:[di+642],al +mov es:[di+642],al +ret +lblt_4b3: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+321] +xor ax,dx +mov gs:[di+321],ax +mov es:[di+321],ax +mov al,gs:[di+643] +xor al,dl +mov gs:[di+643],al +mov es:[di+643],al +ret +lblt_5b3: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+321] +xor ax,dx +mov gs:[di+321],ax +mov es:[di+321],ax +mov ax,gs:[di+643] +xor ax,dx +mov gs:[di+643],ax +mov es:[di+643],ax +ret +lblt_6b3: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+322] +xor ax,dx +mov gs:[di+322],ax +mov es:[di+322],ax +mov ax,gs:[di+644] +xor ax,dx +mov gs:[di+644],ax +mov es:[di+644],ax +ret +lblt_7b3: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+322] +xor ax,dx +mov gs:[di+322],ax +mov es:[di+322],ax +mov ax,gs:[di+644] +xor ax,dx +mov gs:[di+644],ax +mov es:[di+644],ax +mov al,gs:[di+966] +xor al,dl +mov gs:[di+966],al +mov es:[di+966],al +ret +lblt_8b3: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+322] +xor ax,dx +mov gs:[di+322],ax +mov es:[di+322],ax +mov al,gs:[di+324] +xor al,dl +mov gs:[di+324],al +mov es:[di+324],al +mov ax,gs:[di+645] +xor ax,dx +mov gs:[di+645],ax +mov es:[di+645],ax +mov al,gs:[di+967] +xor al,dl +mov gs:[di+967],al +mov es:[di+967],al +ret +lblt_9b3: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+322] +xor ax,dx +mov gs:[di+322],ax +mov es:[di+322],ax +mov al,gs:[di+324] +xor al,dl +mov gs:[di+324],al +mov es:[di+324],al +mov ax,gs:[di+645] +xor ax,dx +mov gs:[di+645],ax +mov es:[di+645],ax +mov al,gs:[di+647] +xor al,dl +mov gs:[di+647],al +mov es:[di+647],al +mov al,gs:[di+968] +xor al,dl +mov gs:[di+968],al +mov es:[di+968],al +ret +lblt_10b3: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+322] +xor ax,dx +mov gs:[di+322],ax +mov es:[di+322],ax +mov ax,gs:[di+324] +xor ax,dx +mov gs:[di+324],ax +mov es:[di+324],ax +mov ax,gs:[di+646] +xor ax,dx +mov gs:[di+646],ax +mov es:[di+646],ax +mov al,gs:[di+648] +xor al,dl +mov gs:[di+648],al +mov es:[di+648],al +mov al,gs:[di+969] +xor al,dl +mov gs:[di+969],al +mov es:[di+969],al +ret +lblt_54b4: +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +mov ax,gs:[di+317] +xor ax,dx +mov gs:[di+317],ax +mov es:[di+317],ax +mov ax,gs:[di+634] +xor ax,dx +mov gs:[di+634],ax +mov es:[di+634],ax +mov al,gs:[di+636] +xor al,dl +mov gs:[di+636],al +mov es:[di+636],al +mov ax,gs:[di+952] +xor ax,dx +mov gs:[di+952],ax +mov es:[di+952],ax +mov al,gs:[di+1271] +xor al,dl +mov gs:[di+1271],al +mov es:[di+1271],al +ret +lblt_55b4: +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +mov ax,gs:[di+317] +xor ax,dx +mov gs:[di+317],ax +mov es:[di+317],ax +mov ax,gs:[di+635] +xor ax,dx +mov gs:[di+635],ax +mov es:[di+635],ax +mov ax,gs:[di+953] +xor ax,dx +mov gs:[di+953],ax +mov es:[di+953],ax +mov al,gs:[di+1272] +xor al,dl +mov gs:[di+1272],al +mov es:[di+1272],al +ret +lblt_56b4: +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +mov ax,gs:[di+317] +xor ax,dx +mov gs:[di+317],ax +mov es:[di+317],ax +mov ax,gs:[di+635] +xor ax,dx +mov gs:[di+635],ax +mov es:[di+635],ax +mov ax,gs:[di+953] +xor ax,dx +mov gs:[di+953],ax +mov es:[di+953],ax +ret +lblt_57b4: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+318] +xor ax,dx +mov gs:[di+318],ax +mov es:[di+318],ax +mov ax,gs:[di+636] +xor ax,dx +mov gs:[di+636],ax +mov es:[di+636],ax +mov ax,gs:[di+954] +xor ax,dx +mov gs:[di+954],ax +mov es:[di+954],ax +ret +lblt_58b4: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+318] +xor ax,dx +mov gs:[di+318],ax +mov es:[di+318],ax +mov al,gs:[di+637] +xor al,dl +mov gs:[di+637],al +mov es:[di+637],al +mov ax,gs:[di+955] +xor ax,dx +mov gs:[di+955],ax +mov es:[di+955],ax +ret +lblt_59b4: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov ax,gs:[di+637] +xor ax,dx +mov gs:[di+637],ax +mov es:[di+637],ax +mov al,gs:[di+956] +xor al,dl +mov gs:[di+956],al +mov es:[di+956],al +ret +lblt_60b4: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov al,gs:[di+638] +xor al,dl +mov gs:[di+638],al +mov es:[di+638],al +mov al,gs:[di+957] +xor al,dl +mov gs:[di+957],al +mov es:[di+957],al +ret +lblt_61b4: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov al,gs:[di+639] +xor al,dl +mov gs:[di+639],al +mov es:[di+639],al +mov al,gs:[di+958] +xor al,dl +mov gs:[di+958],al +mov es:[di+958],al +ret +lblt_62b4: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+639] +xor al,dl +mov gs:[di+639],al +mov es:[di+639],al +mov al,gs:[di+959] +xor al,dl +mov gs:[di+959],al +mov es:[di+959],al +ret +lblt_63b4: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+640] +xor al,dl +mov gs:[di+640],al +mov es:[di+640],al +mov al,gs:[di+959] +xor al,dl +mov gs:[di+959],al +mov es:[di+959],al +ret +lblt_0b4: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+640] +xor al,dl +mov gs:[di+640],al +mov es:[di+640],al +mov al,gs:[di+960] +xor al,dl +mov gs:[di+960],al +mov es:[di+960],al +ret +lblt_1b4: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+640] +xor al,dl +mov gs:[di+640],al +mov es:[di+640],al +mov al,gs:[di+961] +xor al,dl +mov gs:[di+961],al +mov es:[di+961],al +ret +lblt_2b4: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+641] +xor al,dl +mov gs:[di+641],al +mov es:[di+641],al +mov al,gs:[di+961] +xor al,dl +mov gs:[di+961],al +mov es:[di+961],al +ret +lblt_3b4: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov al,gs:[di+641] +xor al,dl +mov gs:[di+641],al +mov es:[di+641],al +mov al,gs:[di+962] +xor al,dl +mov gs:[di+962],al +mov es:[di+962],al +ret +lblt_4b4: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov al,gs:[di+642] +xor al,dl +mov gs:[di+642],al +mov es:[di+642],al +mov al,gs:[di+963] +xor al,dl +mov gs:[di+963],al +mov es:[di+963],al +ret +lblt_5b4: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov ax,gs:[di+642] +xor ax,dx +mov gs:[di+642],ax +mov es:[di+642],ax +mov al,gs:[di+964] +xor al,dl +mov gs:[di+964],al +mov es:[di+964],al +ret +lblt_6b4: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+321] +xor ax,dx +mov gs:[di+321],ax +mov es:[di+321],ax +mov al,gs:[di+643] +xor al,dl +mov gs:[di+643],al +mov es:[di+643],al +mov ax,gs:[di+964] +xor ax,dx +mov gs:[di+964],ax +mov es:[di+964],ax +ret +lblt_7b4: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+321] +xor ax,dx +mov gs:[di+321],ax +mov es:[di+321],ax +mov ax,gs:[di+643] +xor ax,dx +mov gs:[di+643],ax +mov es:[di+643],ax +mov ax,gs:[di+965] +xor ax,dx +mov gs:[di+965],ax +mov es:[di+965],ax +ret +lblt_8b4: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+322] +xor ax,dx +mov gs:[di+322],ax +mov es:[di+322],ax +mov ax,gs:[di+644] +xor ax,dx +mov gs:[di+644],ax +mov es:[di+644],ax +mov ax,gs:[di+966] +xor ax,dx +mov gs:[di+966],ax +mov es:[di+966],ax +ret +lblt_9b4: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+322] +xor ax,dx +mov gs:[di+322],ax +mov es:[di+322],ax +mov ax,gs:[di+644] +xor ax,dx +mov gs:[di+644],ax +mov es:[di+644],ax +mov ax,gs:[di+966] +xor ax,dx +mov gs:[di+966],ax +mov es:[di+966],ax +mov al,gs:[di+1288] +xor al,dl +mov gs:[di+1288],al +mov es:[di+1288],al +ret +lblt_10b4: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+322] +xor ax,dx +mov gs:[di+322],ax +mov es:[di+322],ax +mov ax,gs:[di+644] +xor ax,dx +mov gs:[di+644],ax +mov es:[di+644],ax +mov al,gs:[di+646] +xor al,dl +mov gs:[di+646],al +mov es:[di+646],al +mov ax,gs:[di+967] +xor ax,dx +mov gs:[di+967],ax +mov es:[di+967],ax +mov al,gs:[di+1289] +xor al,dl +mov gs:[di+1289],al +mov es:[di+1289],al +ret +lblt_54b5: +mov ax,gs:[di+-1] +xor ax,dx +mov gs:[di+-1],ax +mov es:[di+-1],ax +mov ax,gs:[di+317] +xor ax,dx +mov gs:[di+317],ax +mov es:[di+317],ax +mov ax,gs:[di+635] +xor ax,dx +mov gs:[di+635],ax +mov es:[di+635],ax +mov ax,gs:[di+953] +xor ax,dx +mov gs:[di+953],ax +mov es:[di+953],ax +mov ax,gs:[di+1271] +xor ax,dx +mov gs:[di+1271],ax +mov es:[di+1271],ax +ret +lblt_55b5: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+318] +xor ax,dx +mov gs:[di+318],ax +mov es:[di+318],ax +mov ax,gs:[di+636] +xor ax,dx +mov gs:[di+636],ax +mov es:[di+636],ax +mov ax,gs:[di+954] +xor ax,dx +mov gs:[di+954],ax +mov es:[di+954],ax +mov ax,gs:[di+1272] +xor ax,dx +mov gs:[di+1272],ax +mov es:[di+1272],ax +ret +lblt_56b5: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+318] +xor ax,dx +mov gs:[di+318],ax +mov es:[di+318],ax +mov ax,gs:[di+636] +xor ax,dx +mov gs:[di+636],ax +mov es:[di+636],ax +mov al,gs:[di+955] +xor al,dl +mov gs:[di+955],al +mov es:[di+955],al +mov ax,gs:[di+1273] +xor ax,dx +mov gs:[di+1273],ax +mov es:[di+1273],ax +ret +lblt_57b5: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+318] +xor ax,dx +mov gs:[di+318],ax +mov es:[di+318],ax +mov al,gs:[di+637] +xor al,dl +mov gs:[di+637],al +mov es:[di+637],al +mov al,gs:[di+956] +xor al,dl +mov gs:[di+956],al +mov es:[di+956],al +mov ax,gs:[di+1274] +xor ax,dx +mov gs:[di+1274],ax +mov es:[di+1274],ax +ret +lblt_58b5: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov ax,gs:[di+637] +xor ax,dx +mov gs:[di+637],ax +mov es:[di+637],ax +mov al,gs:[di+956] +xor al,dl +mov gs:[di+956],al +mov es:[di+956],al +mov al,gs:[di+1275] +xor al,dl +mov gs:[di+1275],al +mov es:[di+1275],al +ret +lblt_59b5: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov al,gs:[di+638] +xor al,dl +mov gs:[di+638],al +mov es:[di+638],al +mov al,gs:[di+957] +xor al,dl +mov gs:[di+957],al +mov es:[di+957],al +mov al,gs:[di+1276] +xor al,dl +mov gs:[di+1276],al +mov es:[di+1276],al +ret +lblt_60b5: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov al,gs:[di+638] +xor al,dl +mov gs:[di+638],al +mov es:[di+638],al +mov al,gs:[di+958] +xor al,dl +mov gs:[di+958],al +mov es:[di+958],al +mov al,gs:[di+1277] +xor al,dl +mov gs:[di+1277],al +mov es:[di+1277],al +ret +lblt_61b5: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov al,gs:[di+639] +xor al,dl +mov gs:[di+639],al +mov es:[di+639],al +mov al,gs:[di+958] +xor al,dl +mov gs:[di+958],al +mov es:[di+958],al +mov al,gs:[di+1278] +xor al,dl +mov gs:[di+1278],al +mov es:[di+1278],al +ret +lblt_62b5: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+639] +xor al,dl +mov gs:[di+639],al +mov es:[di+639],al +mov al,gs:[di+959] +xor al,dl +mov gs:[di+959],al +mov es:[di+959],al +mov al,gs:[di+1278] +xor al,dl +mov gs:[di+1278],al +mov es:[di+1278],al +ret +lblt_63b5: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+640] +xor al,dl +mov gs:[di+640],al +mov es:[di+640],al +mov al,gs:[di+959] +xor al,dl +mov gs:[di+959],al +mov es:[di+959],al +mov al,gs:[di+1279] +xor al,dl +mov gs:[di+1279],al +mov es:[di+1279],al +ret +lblt_0b5: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+640] +xor al,dl +mov gs:[di+640],al +mov es:[di+640],al +mov al,gs:[di+960] +xor al,dl +mov gs:[di+960],al +mov es:[di+960],al +mov al,gs:[di+1280] +xor al,dl +mov gs:[di+1280],al +mov es:[di+1280],al +ret +lblt_1b5: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+640] +xor al,dl +mov gs:[di+640],al +mov es:[di+640],al +mov al,gs:[di+961] +xor al,dl +mov gs:[di+961],al +mov es:[di+961],al +mov al,gs:[di+1281] +xor al,dl +mov gs:[di+1281],al +mov es:[di+1281],al +ret +lblt_2b5: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+641] +xor al,dl +mov gs:[di+641],al +mov es:[di+641],al +mov al,gs:[di+961] +xor al,dl +mov gs:[di+961],al +mov es:[di+961],al +mov al,gs:[di+1282] +xor al,dl +mov gs:[di+1282],al +mov es:[di+1282],al +ret +lblt_3b5: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov al,gs:[di+641] +xor al,dl +mov gs:[di+641],al +mov es:[di+641],al +mov al,gs:[di+962] +xor al,dl +mov gs:[di+962],al +mov es:[di+962],al +mov al,gs:[di+1282] +xor al,dl +mov gs:[di+1282],al +mov es:[di+1282],al +ret +lblt_4b5: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov al,gs:[di+642] +xor al,dl +mov gs:[di+642],al +mov es:[di+642],al +mov al,gs:[di+962] +xor al,dl +mov gs:[di+962],al +mov es:[di+962],al +mov al,gs:[di+1283] +xor al,dl +mov gs:[di+1283],al +mov es:[di+1283],al +ret +lblt_5b5: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov al,gs:[di+642] +xor al,dl +mov gs:[di+642],al +mov es:[di+642],al +mov al,gs:[di+963] +xor al,dl +mov gs:[di+963],al +mov es:[di+963],al +mov al,gs:[di+1284] +xor al,dl +mov gs:[di+1284],al +mov es:[di+1284],al +ret +lblt_6b5: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov ax,gs:[di+642] +xor ax,dx +mov gs:[di+642],ax +mov es:[di+642],ax +mov al,gs:[di+964] +xor al,dl +mov gs:[di+964],al +mov es:[di+964],al +mov al,gs:[di+1285] +xor al,dl +mov gs:[di+1285],al +mov es:[di+1285],al +ret +lblt_7b5: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+321] +xor ax,dx +mov gs:[di+321],ax +mov es:[di+321],ax +mov al,gs:[di+643] +xor al,dl +mov gs:[di+643],al +mov es:[di+643],al +mov al,gs:[di+964] +xor al,dl +mov gs:[di+964],al +mov es:[di+964],al +mov ax,gs:[di+1285] +xor ax,dx +mov gs:[di+1285],ax +mov es:[di+1285],ax +ret +lblt_8b5: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+321] +xor ax,dx +mov gs:[di+321],ax +mov es:[di+321],ax +mov ax,gs:[di+643] +xor ax,dx +mov gs:[di+643],ax +mov es:[di+643],ax +mov al,gs:[di+965] +xor al,dl +mov gs:[di+965],al +mov es:[di+965],al +mov ax,gs:[di+1286] +xor ax,dx +mov gs:[di+1286],ax +mov es:[di+1286],ax +ret +lblt_9b5: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+321] +xor ax,dx +mov gs:[di+321],ax +mov es:[di+321],ax +mov ax,gs:[di+643] +xor ax,dx +mov gs:[di+643],ax +mov es:[di+643],ax +mov ax,gs:[di+965] +xor ax,dx +mov gs:[di+965],ax +mov es:[di+965],ax +mov ax,gs:[di+1287] +xor ax,dx +mov gs:[di+1287],ax +mov es:[di+1287],ax +ret +lblt_10b5: +mov ax,gs:[di+0] +xor ax,dx +mov gs:[di+0],ax +mov es:[di+0],ax +mov ax,gs:[di+322] +xor ax,dx +mov gs:[di+322],ax +mov es:[di+322],ax +mov ax,gs:[di+644] +xor ax,dx +mov gs:[di+644],ax +mov es:[di+644],ax +mov ax,gs:[di+966] +xor ax,dx +mov gs:[di+966],ax +mov es:[di+966],ax +mov ax,gs:[di+1288] +xor ax,dx +mov gs:[di+1288],ax +mov es:[di+1288],ax +ret +lblt_54b6: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+318] +xor ax,dx +mov gs:[di+318],ax +mov es:[di+318],ax +mov ax,gs:[di+636] +xor ax,dx +mov gs:[di+636],ax +mov es:[di+636],ax +mov al,gs:[di+955] +xor al,dl +mov gs:[di+955],al +mov es:[di+955],al +mov ax,gs:[di+1273] +xor ax,dx +mov gs:[di+1273],ax +mov es:[di+1273],ax +mov ax,gs:[di+1591] +xor ax,dx +mov gs:[di+1591],ax +mov es:[di+1591],ax +ret +lblt_55b6: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+318] +xor ax,dx +mov gs:[di+318],ax +mov es:[di+318],ax +mov al,gs:[di+637] +xor al,dl +mov gs:[di+637],al +mov es:[di+637],al +mov ax,gs:[di+955] +xor ax,dx +mov gs:[di+955],ax +mov es:[di+955],ax +mov al,gs:[di+1274] +xor al,dl +mov gs:[di+1274],al +mov es:[di+1274],al +mov ax,gs:[di+1592] +xor ax,dx +mov gs:[di+1592],ax +mov es:[di+1592],ax +ret +lblt_56b6: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+318] +xor ax,dx +mov gs:[di+318],ax +mov es:[di+318],ax +mov al,gs:[di+637] +xor al,dl +mov gs:[di+637],al +mov es:[di+637],al +mov al,gs:[di+956] +xor al,dl +mov gs:[di+956],al +mov es:[di+956],al +mov ax,gs:[di+1274] +xor ax,dx +mov gs:[di+1274],ax +mov es:[di+1274],ax +mov al,gs:[di+1593] +xor al,dl +mov gs:[di+1593],al +mov es:[di+1593],al +ret +lblt_57b6: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov al,gs:[di+638] +xor al,dl +mov gs:[di+638],al +mov es:[di+638],al +mov ax,gs:[di+956] +xor ax,dx +mov gs:[di+956],ax +mov es:[di+956],ax +mov al,gs:[di+1275] +xor al,dl +mov gs:[di+1275],al +mov es:[di+1275],al +mov al,gs:[di+1594] +xor al,dl +mov gs:[di+1594],al +mov es:[di+1594],al +ret +lblt_58b6: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov al,gs:[di+638] +xor al,dl +mov gs:[di+638],al +mov es:[di+638],al +mov al,gs:[di+957] +xor al,dl +mov gs:[di+957],al +mov es:[di+957],al +mov al,gs:[di+1276] +xor al,dl +mov gs:[di+1276],al +mov es:[di+1276],al +mov al,gs:[di+1595] +xor al,dl +mov gs:[di+1595],al +mov es:[di+1595],al +ret +lblt_59b6: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov al,gs:[di+638] +xor al,dl +mov gs:[di+638],al +mov es:[di+638],al +mov al,gs:[di+958] +xor al,dl +mov gs:[di+958],al +mov es:[di+958],al +mov al,gs:[di+1277] +xor al,dl +mov gs:[di+1277],al +mov es:[di+1277],al +mov al,gs:[di+1596] +xor al,dl +mov gs:[di+1596],al +mov es:[di+1596],al +ret +lblt_60b6: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov al,gs:[di+639] +xor al,dl +mov gs:[di+639],al +mov es:[di+639],al +mov al,gs:[di+958] +xor al,dl +mov gs:[di+958],al +mov es:[di+958],al +mov al,gs:[di+1277] +xor al,dl +mov gs:[di+1277],al +mov es:[di+1277],al +mov al,gs:[di+1597] +xor al,dl +mov gs:[di+1597],al +mov es:[di+1597],al +ret +lblt_61b6: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+639] +xor al,dl +mov gs:[di+639],al +mov es:[di+639],al +mov al,gs:[di+959] +xor al,dl +mov gs:[di+959],al +mov es:[di+959],al +mov al,gs:[di+1278] +xor al,dl +mov gs:[di+1278],al +mov es:[di+1278],al +mov al,gs:[di+1598] +xor al,dl +mov gs:[di+1598],al +mov es:[di+1598],al +ret +lblt_62b6: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+639] +xor al,dl +mov gs:[di+639],al +mov es:[di+639],al +mov al,gs:[di+959] +xor al,dl +mov gs:[di+959],al +mov es:[di+959],al +mov al,gs:[di+1279] +xor al,dl +mov gs:[di+1279],al +mov es:[di+1279],al +mov al,gs:[di+1598] +xor al,dl +mov gs:[di+1598],al +mov es:[di+1598],al +ret +lblt_63b6: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+640] +xor al,dl +mov gs:[di+640],al +mov es:[di+640],al +mov al,gs:[di+960] +xor al,dl +mov gs:[di+960],al +mov es:[di+960],al +mov al,gs:[di+1279] +xor al,dl +mov gs:[di+1279],al +mov es:[di+1279],al +mov al,gs:[di+1599] +xor al,dl +mov gs:[di+1599],al +mov es:[di+1599],al +ret +lblt_0b6: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+640] +xor al,dl +mov gs:[di+640],al +mov es:[di+640],al +mov al,gs:[di+960] +xor al,dl +mov gs:[di+960],al +mov es:[di+960],al +mov al,gs:[di+1280] +xor al,dl +mov gs:[di+1280],al +mov es:[di+1280],al +mov al,gs:[di+1600] +xor al,dl +mov gs:[di+1600],al +mov es:[di+1600],al +ret +lblt_1b6: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+640] +xor al,dl +mov gs:[di+640],al +mov es:[di+640],al +mov al,gs:[di+960] +xor al,dl +mov gs:[di+960],al +mov es:[di+960],al +mov al,gs:[di+1281] +xor al,dl +mov gs:[di+1281],al +mov es:[di+1281],al +mov al,gs:[di+1601] +xor al,dl +mov gs:[di+1601],al +mov es:[di+1601],al +ret +lblt_2b6: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+641] +xor al,dl +mov gs:[di+641],al +mov es:[di+641],al +mov al,gs:[di+961] +xor al,dl +mov gs:[di+961],al +mov es:[di+961],al +mov al,gs:[di+1281] +xor al,dl +mov gs:[di+1281],al +mov es:[di+1281],al +mov al,gs:[di+1602] +xor al,dl +mov gs:[di+1602],al +mov es:[di+1602],al +ret +lblt_3b6: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+641] +xor al,dl +mov gs:[di+641],al +mov es:[di+641],al +mov al,gs:[di+961] +xor al,dl +mov gs:[di+961],al +mov es:[di+961],al +mov al,gs:[di+1282] +xor al,dl +mov gs:[di+1282],al +mov es:[di+1282],al +mov al,gs:[di+1602] +xor al,dl +mov gs:[di+1602],al +mov es:[di+1602],al +ret +lblt_4b6: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov al,gs:[di+641] +xor al,dl +mov gs:[di+641],al +mov es:[di+641],al +mov al,gs:[di+962] +xor al,dl +mov gs:[di+962],al +mov es:[di+962],al +mov al,gs:[di+1283] +xor al,dl +mov gs:[di+1283],al +mov es:[di+1283],al +mov al,gs:[di+1603] +xor al,dl +mov gs:[di+1603],al +mov es:[di+1603],al +ret +lblt_5b6: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov al,gs:[di+642] +xor al,dl +mov gs:[di+642],al +mov es:[di+642],al +mov al,gs:[di+962] +xor al,dl +mov gs:[di+962],al +mov es:[di+962],al +mov al,gs:[di+1283] +xor al,dl +mov gs:[di+1283],al +mov es:[di+1283],al +mov al,gs:[di+1604] +xor al,dl +mov gs:[di+1604],al +mov es:[di+1604],al +ret +lblt_6b6: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov al,gs:[di+642] +xor al,dl +mov gs:[di+642],al +mov es:[di+642],al +mov al,gs:[di+963] +xor al,dl +mov gs:[di+963],al +mov es:[di+963],al +mov al,gs:[di+1284] +xor al,dl +mov gs:[di+1284],al +mov es:[di+1284],al +mov al,gs:[di+1605] +xor al,dl +mov gs:[di+1605],al +mov es:[di+1605],al +ret +lblt_7b6: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov al,gs:[di+642] +xor al,dl +mov gs:[di+642],al +mov es:[di+642],al +mov ax,gs:[di+963] +xor ax,dx +mov gs:[di+963],ax +mov es:[di+963],ax +mov al,gs:[di+1285] +xor al,dl +mov gs:[di+1285],al +mov es:[di+1285],al +mov al,gs:[di+1606] +xor al,dl +mov gs:[di+1606],al +mov es:[di+1606],al +ret +lblt_8b6: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+321] +xor ax,dx +mov gs:[di+321],ax +mov es:[di+321],ax +mov al,gs:[di+643] +xor al,dl +mov gs:[di+643],al +mov es:[di+643],al +mov al,gs:[di+964] +xor al,dl +mov gs:[di+964],al +mov es:[di+964],al +mov ax,gs:[di+1285] +xor ax,dx +mov gs:[di+1285],ax +mov es:[di+1285],ax +mov al,gs:[di+1607] +xor al,dl +mov gs:[di+1607],al +mov es:[di+1607],al +ret +lblt_9b6: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+321] +xor ax,dx +mov gs:[di+321],ax +mov es:[di+321],ax +mov al,gs:[di+643] +xor al,dl +mov gs:[di+643],al +mov es:[di+643],al +mov ax,gs:[di+964] +xor ax,dx +mov gs:[di+964],ax +mov es:[di+964],ax +mov al,gs:[di+1286] +xor al,dl +mov gs:[di+1286],al +mov es:[di+1286],al +mov ax,gs:[di+1607] +xor ax,dx +mov gs:[di+1607],ax +mov es:[di+1607],ax +ret +lblt_10b6: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+321] +xor ax,dx +mov gs:[di+321],ax +mov es:[di+321],ax +mov ax,gs:[di+643] +xor ax,dx +mov gs:[di+643],ax +mov es:[di+643],ax +mov al,gs:[di+965] +xor al,dl +mov gs:[di+965],al +mov es:[di+965],al +mov ax,gs:[di+1286] +xor ax,dx +mov gs:[di+1286],ax +mov es:[di+1286],ax +mov ax,gs:[di+1608] +xor ax,dx +mov gs:[di+1608],ax +mov es:[di+1608],ax +ret +lblt_54b7: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+318] +xor ax,dx +mov gs:[di+318],ax +mov es:[di+318],ax +mov al,gs:[di+637] +xor al,dl +mov gs:[di+637],al +mov es:[di+637],al +mov ax,gs:[di+955] +xor ax,dx +mov gs:[di+955],ax +mov es:[di+955],ax +mov al,gs:[di+1274] +xor al,dl +mov gs:[di+1274],al +mov es:[di+1274],al +mov al,gs:[di+1593] +xor al,dl +mov gs:[di+1593],al +mov es:[di+1593],al +mov ax,gs:[di+1911] +xor ax,dx +mov gs:[di+1911],ax +mov es:[di+1911],ax +ret +lblt_55b7: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov ax,gs:[di+637] +xor ax,dx +mov gs:[di+637],ax +mov es:[di+637],ax +mov al,gs:[di+956] +xor al,dl +mov gs:[di+956],al +mov es:[di+956],al +mov al,gs:[di+1275] +xor al,dl +mov gs:[di+1275],al +mov es:[di+1275],al +mov ax,gs:[di+1593] +xor ax,dx +mov gs:[di+1593],ax +mov es:[di+1593],ax +mov al,gs:[di+1912] +xor al,dl +mov gs:[di+1912],al +mov es:[di+1912],al +ret +lblt_56b7: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov al,gs:[di+638] +xor al,dl +mov gs:[di+638],al +mov es:[di+638],al +mov ax,gs:[di+956] +xor ax,dx +mov gs:[di+956],ax +mov es:[di+956],ax +mov al,gs:[di+1275] +xor al,dl +mov gs:[di+1275],al +mov es:[di+1275],al +mov al,gs:[di+1594] +xor al,dl +mov gs:[di+1594],al +mov es:[di+1594],al +mov al,gs:[di+1913] +xor al,dl +mov gs:[di+1913],al +mov es:[di+1913],al +ret +lblt_57b7: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov al,gs:[di+638] +xor al,dl +mov gs:[di+638],al +mov es:[di+638],al +mov al,gs:[di+957] +xor al,dl +mov gs:[di+957],al +mov es:[di+957],al +mov al,gs:[di+1276] +xor al,dl +mov gs:[di+1276],al +mov es:[di+1276],al +mov al,gs:[di+1595] +xor al,dl +mov gs:[di+1595],al +mov es:[di+1595],al +mov al,gs:[di+1914] +xor al,dl +mov gs:[di+1914],al +mov es:[di+1914],al +ret +lblt_58b7: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov al,gs:[di+638] +xor al,dl +mov gs:[di+638],al +mov es:[di+638],al +mov al,gs:[di+957] +xor al,dl +mov gs:[di+957],al +mov es:[di+957],al +mov al,gs:[di+1277] +xor al,dl +mov gs:[di+1277],al +mov es:[di+1277],al +mov al,gs:[di+1596] +xor al,dl +mov gs:[di+1596],al +mov es:[di+1596],al +mov al,gs:[di+1915] +xor al,dl +mov gs:[di+1915],al +mov es:[di+1915],al +ret +lblt_59b7: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov al,gs:[di+639] +xor al,dl +mov gs:[di+639],al +mov es:[di+639],al +mov al,gs:[di+958] +xor al,dl +mov gs:[di+958],al +mov es:[di+958],al +mov al,gs:[di+1277] +xor al,dl +mov gs:[di+1277],al +mov es:[di+1277],al +mov al,gs:[di+1596] +xor al,dl +mov gs:[di+1596],al +mov es:[di+1596],al +mov al,gs:[di+1916] +xor al,dl +mov gs:[di+1916],al +mov es:[di+1916],al +ret +lblt_60b7: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov al,gs:[di+639] +xor al,dl +mov gs:[di+639],al +mov es:[di+639],al +mov al,gs:[di+958] +xor al,dl +mov gs:[di+958],al +mov es:[di+958],al +mov al,gs:[di+1278] +xor al,dl +mov gs:[di+1278],al +mov es:[di+1278],al +mov al,gs:[di+1597] +xor al,dl +mov gs:[di+1597],al +mov es:[di+1597],al +mov al,gs:[di+1917] +xor al,dl +mov gs:[di+1917],al +mov es:[di+1917],al +ret +lblt_61b7: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+639] +xor al,dl +mov gs:[di+639],al +mov es:[di+639],al +mov al,gs:[di+959] +xor al,dl +mov gs:[di+959],al +mov es:[di+959],al +mov al,gs:[di+1278] +xor al,dl +mov gs:[di+1278],al +mov es:[di+1278],al +mov al,gs:[di+1598] +xor al,dl +mov gs:[di+1598],al +mov es:[di+1598],al +mov al,gs:[di+1917] +xor al,dl +mov gs:[di+1917],al +mov es:[di+1917],al +ret +lblt_62b7: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+639] +xor al,dl +mov gs:[di+639],al +mov es:[di+639],al +mov al,gs:[di+959] +xor al,dl +mov gs:[di+959],al +mov es:[di+959],al +mov al,gs:[di+1279] +xor al,dl +mov gs:[di+1279],al +mov es:[di+1279],al +mov al,gs:[di+1599] +xor al,dl +mov gs:[di+1599],al +mov es:[di+1599],al +mov al,gs:[di+1918] +xor al,dl +mov gs:[di+1918],al +mov es:[di+1918],al +ret +lblt_63b7: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+640] +xor al,dl +mov gs:[di+640],al +mov es:[di+640],al +mov al,gs:[di+960] +xor al,dl +mov gs:[di+960],al +mov es:[di+960],al +mov al,gs:[di+1279] +xor al,dl +mov gs:[di+1279],al +mov es:[di+1279],al +mov al,gs:[di+1599] +xor al,dl +mov gs:[di+1599],al +mov es:[di+1599],al +mov al,gs:[di+1919] +xor al,dl +mov gs:[di+1919],al +mov es:[di+1919],al +ret +lblt_0b7: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+640] +xor al,dl +mov gs:[di+640],al +mov es:[di+640],al +mov al,gs:[di+960] +xor al,dl +mov gs:[di+960],al +mov es:[di+960],al +mov al,gs:[di+1280] +xor al,dl +mov gs:[di+1280],al +mov es:[di+1280],al +mov al,gs:[di+1600] +xor al,dl +mov gs:[di+1600],al +mov es:[di+1600],al +mov al,gs:[di+1920] +xor al,dl +mov gs:[di+1920],al +mov es:[di+1920],al +ret +lblt_1b7: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+640] +xor al,dl +mov gs:[di+640],al +mov es:[di+640],al +mov al,gs:[di+960] +xor al,dl +mov gs:[di+960],al +mov es:[di+960],al +mov al,gs:[di+1281] +xor al,dl +mov gs:[di+1281],al +mov es:[di+1281],al +mov al,gs:[di+1601] +xor al,dl +mov gs:[di+1601],al +mov es:[di+1601],al +mov al,gs:[di+1921] +xor al,dl +mov gs:[di+1921],al +mov es:[di+1921],al +ret +lblt_2b7: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+641] +xor al,dl +mov gs:[di+641],al +mov es:[di+641],al +mov al,gs:[di+961] +xor al,dl +mov gs:[di+961],al +mov es:[di+961],al +mov al,gs:[di+1281] +xor al,dl +mov gs:[di+1281],al +mov es:[di+1281],al +mov al,gs:[di+1601] +xor al,dl +mov gs:[di+1601],al +mov es:[di+1601],al +mov al,gs:[di+1922] +xor al,dl +mov gs:[di+1922],al +mov es:[di+1922],al +ret +lblt_3b7: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+641] +xor al,dl +mov gs:[di+641],al +mov es:[di+641],al +mov al,gs:[di+961] +xor al,dl +mov gs:[di+961],al +mov es:[di+961],al +mov al,gs:[di+1282] +xor al,dl +mov gs:[di+1282],al +mov es:[di+1282],al +mov al,gs:[di+1602] +xor al,dl +mov gs:[di+1602],al +mov es:[di+1602],al +mov al,gs:[di+1923] +xor al,dl +mov gs:[di+1923],al +mov es:[di+1923],al +ret +lblt_4b7: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov al,gs:[di+641] +xor al,dl +mov gs:[di+641],al +mov es:[di+641],al +mov al,gs:[di+962] +xor al,dl +mov gs:[di+962],al +mov es:[di+962],al +mov al,gs:[di+1282] +xor al,dl +mov gs:[di+1282],al +mov es:[di+1282],al +mov al,gs:[di+1603] +xor al,dl +mov gs:[di+1603],al +mov es:[di+1603],al +mov al,gs:[di+1923] +xor al,dl +mov gs:[di+1923],al +mov es:[di+1923],al +ret +lblt_5b7: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov al,gs:[di+641] +xor al,dl +mov gs:[di+641],al +mov es:[di+641],al +mov al,gs:[di+962] +xor al,dl +mov gs:[di+962],al +mov es:[di+962],al +mov al,gs:[di+1283] +xor al,dl +mov gs:[di+1283],al +mov es:[di+1283],al +mov al,gs:[di+1604] +xor al,dl +mov gs:[di+1604],al +mov es:[di+1604],al +mov al,gs:[di+1924] +xor al,dl +mov gs:[di+1924],al +mov es:[di+1924],al +ret +lblt_6b7: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov al,gs:[di+642] +xor al,dl +mov gs:[di+642],al +mov es:[di+642],al +mov al,gs:[di+963] +xor al,dl +mov gs:[di+963],al +mov es:[di+963],al +mov al,gs:[di+1283] +xor al,dl +mov gs:[di+1283],al +mov es:[di+1283],al +mov al,gs:[di+1604] +xor al,dl +mov gs:[di+1604],al +mov es:[di+1604],al +mov al,gs:[di+1925] +xor al,dl +mov gs:[di+1925],al +mov es:[di+1925],al +ret +lblt_7b7: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov al,gs:[di+642] +xor al,dl +mov gs:[di+642],al +mov es:[di+642],al +mov al,gs:[di+963] +xor al,dl +mov gs:[di+963],al +mov es:[di+963],al +mov al,gs:[di+1284] +xor al,dl +mov gs:[di+1284],al +mov es:[di+1284],al +mov al,gs:[di+1605] +xor al,dl +mov gs:[di+1605],al +mov es:[di+1605],al +mov al,gs:[di+1926] +xor al,dl +mov gs:[di+1926],al +mov es:[di+1926],al +ret +lblt_8b7: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov al,gs:[di+642] +xor al,dl +mov gs:[di+642],al +mov es:[di+642],al +mov ax,gs:[di+963] +xor ax,dx +mov gs:[di+963],ax +mov es:[di+963],ax +mov al,gs:[di+1285] +xor al,dl +mov gs:[di+1285],al +mov es:[di+1285],al +mov al,gs:[di+1606] +xor al,dl +mov gs:[di+1606],al +mov es:[di+1606],al +mov al,gs:[di+1927] +xor al,dl +mov gs:[di+1927],al +mov es:[di+1927],al +ret +lblt_9b7: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov ax,gs:[di+642] +xor ax,dx +mov gs:[di+642],ax +mov es:[di+642],ax +mov al,gs:[di+964] +xor al,dl +mov gs:[di+964],al +mov es:[di+964],al +mov al,gs:[di+1285] +xor al,dl +mov gs:[di+1285],al +mov es:[di+1285],al +mov ax,gs:[di+1606] +xor ax,dx +mov gs:[di+1606],ax +mov es:[di+1606],ax +mov al,gs:[di+1928] +xor al,dl +mov gs:[di+1928],al +mov es:[di+1928],al +ret +lblt_10b7: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov ax,gs:[di+321] +xor ax,dx +mov gs:[di+321],ax +mov es:[di+321],ax +mov al,gs:[di+643] +xor al,dl +mov gs:[di+643],al +mov es:[di+643],al +mov ax,gs:[di+964] +xor ax,dx +mov gs:[di+964],ax +mov es:[di+964],ax +mov al,gs:[di+1286] +xor al,dl +mov gs:[di+1286],al +mov es:[di+1286],al +mov al,gs:[di+1607] +xor al,dl +mov gs:[di+1607],al +mov es:[di+1607],al +mov ax,gs:[di+1928] +xor ax,dx +mov gs:[di+1928],ax +mov es:[di+1928],ax +ret +lblt_54b8: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov ax,gs:[di+637] +xor ax,dx +mov gs:[di+637],ax +mov es:[di+637],ax +mov al,gs:[di+956] +xor al,dl +mov gs:[di+956],al +mov es:[di+956],al +mov al,gs:[di+1275] +xor al,dl +mov gs:[di+1275],al +mov es:[di+1275],al +mov al,gs:[di+1594] +xor al,dl +mov gs:[di+1594],al +mov es:[di+1594],al +mov ax,gs:[di+1912] +xor ax,dx +mov gs:[di+1912],ax +mov es:[di+1912],ax +mov al,gs:[di+2231] +xor al,dl +mov gs:[di+2231],al +mov es:[di+2231],al +ret +lblt_55b8: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov al,gs:[di+638] +xor al,dl +mov gs:[di+638],al +mov es:[di+638],al +mov al,gs:[di+957] +xor al,dl +mov gs:[di+957],al +mov es:[di+957],al +mov ax,gs:[di+1275] +xor ax,dx +mov gs:[di+1275],ax +mov es:[di+1275],ax +mov al,gs:[di+1594] +xor al,dl +mov gs:[di+1594],al +mov es:[di+1594],al +mov al,gs:[di+1913] +xor al,dl +mov gs:[di+1913],al +mov es:[di+1913],al +mov al,gs:[di+2232] +xor al,dl +mov gs:[di+2232],al +mov es:[di+2232],al +ret +lblt_56b8: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov al,gs:[di+638] +xor al,dl +mov gs:[di+638],al +mov es:[di+638],al +mov al,gs:[di+957] +xor al,dl +mov gs:[di+957],al +mov es:[di+957],al +mov al,gs:[di+1276] +xor al,dl +mov gs:[di+1276],al +mov es:[di+1276],al +mov al,gs:[di+1595] +xor al,dl +mov gs:[di+1595],al +mov es:[di+1595],al +mov al,gs:[di+1914] +xor al,dl +mov gs:[di+1914],al +mov es:[di+1914],al +mov al,gs:[di+2233] +xor al,dl +mov gs:[di+2233],al +mov es:[di+2233],al +ret +lblt_57b8: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov al,gs:[di+638] +xor al,dl +mov gs:[di+638],al +mov es:[di+638],al +mov al,gs:[di+957] +xor al,dl +mov gs:[di+957],al +mov es:[di+957],al +mov al,gs:[di+1277] +xor al,dl +mov gs:[di+1277],al +mov es:[di+1277],al +mov al,gs:[di+1596] +xor al,dl +mov gs:[di+1596],al +mov es:[di+1596],al +mov al,gs:[di+1915] +xor al,dl +mov gs:[di+1915],al +mov es:[di+1915],al +mov al,gs:[di+2234] +xor al,dl +mov gs:[di+2234],al +mov es:[di+2234],al +ret +lblt_58b8: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov al,gs:[di+639] +xor al,dl +mov gs:[di+639],al +mov es:[di+639],al +mov al,gs:[di+958] +xor al,dl +mov gs:[di+958],al +mov es:[di+958],al +mov al,gs:[di+1277] +xor al,dl +mov gs:[di+1277],al +mov es:[di+1277],al +mov al,gs:[di+1596] +xor al,dl +mov gs:[di+1596],al +mov es:[di+1596],al +mov al,gs:[di+1916] +xor al,dl +mov gs:[di+1916],al +mov es:[di+1916],al +mov al,gs:[di+2235] +xor al,dl +mov gs:[di+2235],al +mov es:[di+2235],al +ret +lblt_59b8: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+319] +xor al,dl +mov gs:[di+319],al +mov es:[di+319],al +mov al,gs:[di+639] +xor al,dl +mov gs:[di+639],al +mov es:[di+639],al +mov al,gs:[di+958] +xor al,dl +mov gs:[di+958],al +mov es:[di+958],al +mov al,gs:[di+1278] +xor al,dl +mov gs:[di+1278],al +mov es:[di+1278],al +mov al,gs:[di+1597] +xor al,dl +mov gs:[di+1597],al +mov es:[di+1597],al +mov al,gs:[di+1916] +xor al,dl +mov gs:[di+1916],al +mov es:[di+1916],al +mov al,gs:[di+2236] +xor al,dl +mov gs:[di+2236],al +mov es:[di+2236],al +ret +lblt_60b8: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+639] +xor al,dl +mov gs:[di+639],al +mov es:[di+639],al +mov al,gs:[di+959] +xor al,dl +mov gs:[di+959],al +mov es:[di+959],al +mov al,gs:[di+1278] +xor al,dl +mov gs:[di+1278],al +mov es:[di+1278],al +mov al,gs:[di+1598] +xor al,dl +mov gs:[di+1598],al +mov es:[di+1598],al +mov al,gs:[di+1917] +xor al,dl +mov gs:[di+1917],al +mov es:[di+1917],al +mov al,gs:[di+2237] +xor al,dl +mov gs:[di+2237],al +mov es:[di+2237],al +ret +lblt_61b8: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+639] +xor al,dl +mov gs:[di+639],al +mov es:[di+639],al +mov al,gs:[di+959] +xor al,dl +mov gs:[di+959],al +mov es:[di+959],al +mov al,gs:[di+1279] +xor al,dl +mov gs:[di+1279],al +mov es:[di+1279],al +mov al,gs:[di+1598] +xor al,dl +mov gs:[di+1598],al +mov es:[di+1598],al +mov al,gs:[di+1918] +xor al,dl +mov gs:[di+1918],al +mov es:[di+1918],al +mov al,gs:[di+2237] +xor al,dl +mov gs:[di+2237],al +mov es:[di+2237],al +ret +lblt_62b8: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+640] +xor al,dl +mov gs:[di+640],al +mov es:[di+640],al +mov al,gs:[di+959] +xor al,dl +mov gs:[di+959],al +mov es:[di+959],al +mov al,gs:[di+1279] +xor al,dl +mov gs:[di+1279],al +mov es:[di+1279],al +mov al,gs:[di+1599] +xor al,dl +mov gs:[di+1599],al +mov es:[di+1599],al +mov al,gs:[di+1919] +xor al,dl +mov gs:[di+1919],al +mov es:[di+1919],al +mov al,gs:[di+2238] +xor al,dl +mov gs:[di+2238],al +mov es:[di+2238],al +ret +lblt_63b8: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+640] +xor al,dl +mov gs:[di+640],al +mov es:[di+640],al +mov al,gs:[di+960] +xor al,dl +mov gs:[di+960],al +mov es:[di+960],al +mov al,gs:[di+1280] +xor al,dl +mov gs:[di+1280],al +mov es:[di+1280],al +mov al,gs:[di+1599] +xor al,dl +mov gs:[di+1599],al +mov es:[di+1599],al +mov al,gs:[di+1919] +xor al,dl +mov gs:[di+1919],al +mov es:[di+1919],al +mov al,gs:[di+2239] +xor al,dl +mov gs:[di+2239],al +mov es:[di+2239],al +ret +lblt_0b8: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+640] +xor al,dl +mov gs:[di+640],al +mov es:[di+640],al +mov al,gs:[di+960] +xor al,dl +mov gs:[di+960],al +mov es:[di+960],al +mov al,gs:[di+1280] +xor al,dl +mov gs:[di+1280],al +mov es:[di+1280],al +mov al,gs:[di+1600] +xor al,dl +mov gs:[di+1600],al +mov es:[di+1600],al +mov al,gs:[di+1920] +xor al,dl +mov gs:[di+1920],al +mov es:[di+1920],al +mov al,gs:[di+2240] +xor al,dl +mov gs:[di+2240],al +mov es:[di+2240],al +ret +lblt_1b8: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+640] +xor al,dl +mov gs:[di+640],al +mov es:[di+640],al +mov al,gs:[di+960] +xor al,dl +mov gs:[di+960],al +mov es:[di+960],al +mov al,gs:[di+1280] +xor al,dl +mov gs:[di+1280],al +mov es:[di+1280],al +mov al,gs:[di+1601] +xor al,dl +mov gs:[di+1601],al +mov es:[di+1601],al +mov al,gs:[di+1921] +xor al,dl +mov gs:[di+1921],al +mov es:[di+1921],al +mov al,gs:[di+2241] +xor al,dl +mov gs:[di+2241],al +mov es:[di+2241],al +ret +lblt_2b8: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+640] +xor al,dl +mov gs:[di+640],al +mov es:[di+640],al +mov al,gs:[di+961] +xor al,dl +mov gs:[di+961],al +mov es:[di+961],al +mov al,gs:[di+1281] +xor al,dl +mov gs:[di+1281],al +mov es:[di+1281],al +mov al,gs:[di+1601] +xor al,dl +mov gs:[di+1601],al +mov es:[di+1601],al +mov al,gs:[di+1921] +xor al,dl +mov gs:[di+1921],al +mov es:[di+1921],al +mov al,gs:[di+2242] +xor al,dl +mov gs:[di+2242],al +mov es:[di+2242],al +ret +lblt_3b8: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+641] +xor al,dl +mov gs:[di+641],al +mov es:[di+641],al +mov al,gs:[di+961] +xor al,dl +mov gs:[di+961],al +mov es:[di+961],al +mov al,gs:[di+1281] +xor al,dl +mov gs:[di+1281],al +mov es:[di+1281],al +mov al,gs:[di+1602] +xor al,dl +mov gs:[di+1602],al +mov es:[di+1602],al +mov al,gs:[di+1922] +xor al,dl +mov gs:[di+1922],al +mov es:[di+1922],al +mov al,gs:[di+2243] +xor al,dl +mov gs:[di+2243],al +mov es:[di+2243],al +ret +lblt_4b8: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+320] +xor al,dl +mov gs:[di+320],al +mov es:[di+320],al +mov al,gs:[di+641] +xor al,dl +mov gs:[di+641],al +mov es:[di+641],al +mov al,gs:[di+961] +xor al,dl +mov gs:[di+961],al +mov es:[di+961],al +mov al,gs:[di+1282] +xor al,dl +mov gs:[di+1282],al +mov es:[di+1282],al +mov al,gs:[di+1602] +xor al,dl +mov gs:[di+1602],al +mov es:[di+1602],al +mov al,gs:[di+1923] +xor al,dl +mov gs:[di+1923],al +mov es:[di+1923],al +mov al,gs:[di+2243] +xor al,dl +mov gs:[di+2243],al +mov es:[di+2243],al +ret +lblt_5b8: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov al,gs:[di+641] +xor al,dl +mov gs:[di+641],al +mov es:[di+641],al +mov al,gs:[di+962] +xor al,dl +mov gs:[di+962],al +mov es:[di+962],al +mov al,gs:[di+1282] +xor al,dl +mov gs:[di+1282],al +mov es:[di+1282],al +mov al,gs:[di+1603] +xor al,dl +mov gs:[di+1603],al +mov es:[di+1603],al +mov al,gs:[di+1924] +xor al,dl +mov gs:[di+1924],al +mov es:[di+1924],al +mov al,gs:[di+2244] +xor al,dl +mov gs:[di+2244],al +mov es:[di+2244],al +ret +lblt_6b8: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov al,gs:[di+641] +xor al,dl +mov gs:[di+641],al +mov es:[di+641],al +mov al,gs:[di+962] +xor al,dl +mov gs:[di+962],al +mov es:[di+962],al +mov al,gs:[di+1283] +xor al,dl +mov gs:[di+1283],al +mov es:[di+1283],al +mov al,gs:[di+1604] +xor al,dl +mov gs:[di+1604],al +mov es:[di+1604],al +mov al,gs:[di+1924] +xor al,dl +mov gs:[di+1924],al +mov es:[di+1924],al +mov al,gs:[di+2245] +xor al,dl +mov gs:[di+2245],al +mov es:[di+2245],al +ret +lblt_7b8: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov al,gs:[di+642] +xor al,dl +mov gs:[di+642],al +mov es:[di+642],al +mov al,gs:[di+963] +xor al,dl +mov gs:[di+963],al +mov es:[di+963],al +mov al,gs:[di+1283] +xor al,dl +mov gs:[di+1283],al +mov es:[di+1283],al +mov al,gs:[di+1604] +xor al,dl +mov gs:[di+1604],al +mov es:[di+1604],al +mov al,gs:[di+1925] +xor al,dl +mov gs:[di+1925],al +mov es:[di+1925],al +mov al,gs:[di+2246] +xor al,dl +mov gs:[di+2246],al +mov es:[di+2246],al +ret +lblt_8b8: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov al,gs:[di+642] +xor al,dl +mov gs:[di+642],al +mov es:[di+642],al +mov al,gs:[di+963] +xor al,dl +mov gs:[di+963],al +mov es:[di+963],al +mov al,gs:[di+1284] +xor al,dl +mov gs:[di+1284],al +mov es:[di+1284],al +mov al,gs:[di+1605] +xor al,dl +mov gs:[di+1605],al +mov es:[di+1605],al +mov al,gs:[di+1926] +xor al,dl +mov gs:[di+1926],al +mov es:[di+1926],al +mov al,gs:[di+2247] +xor al,dl +mov gs:[di+2247],al +mov es:[di+2247],al +ret +lblt_9b8: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov al,gs:[di+642] +xor al,dl +mov gs:[di+642],al +mov es:[di+642],al +mov al,gs:[di+963] +xor al,dl +mov gs:[di+963],al +mov es:[di+963],al +mov ax,gs:[di+1284] +xor ax,dx +mov gs:[di+1284],ax +mov es:[di+1284],ax +mov al,gs:[di+1606] +xor al,dl +mov gs:[di+1606],al +mov es:[di+1606],al +mov al,gs:[di+1927] +xor al,dl +mov gs:[di+1927],al +mov es:[di+1927],al +mov al,gs:[di+2248] +xor al,dl +mov gs:[di+2248],al +mov es:[di+2248],al +ret +lblt_10b8: +mov al,gs:[di+0] +xor al,dl +mov gs:[di+0],al +mov es:[di+0],al +mov al,gs:[di+321] +xor al,dl +mov gs:[di+321],al +mov es:[di+321],al +mov ax,gs:[di+642] +xor ax,dx +mov gs:[di+642],ax +mov es:[di+642],ax +mov al,gs:[di+964] +xor al,dl +mov gs:[di+964],al +mov es:[di+964],al +mov al,gs:[di+1285] +xor al,dl +mov gs:[di+1285],al +mov es:[di+1285],al +mov al,gs:[di+1606] +xor al,dl +mov gs:[di+1606],al +mov es:[di+1606],al +mov ax,gs:[di+1927] +xor ax,dx +mov gs:[di+1927],ax +mov es:[di+1927],ax +mov al,gs:[di+2249] +xor al,dl +mov gs:[di+2249],al +mov es:[di+2249],al +ret diff --git a/GRID/LINEBLIT.OBJ b/GRID/LINEBLIT.OBJ new file mode 100644 index 0000000..65d7a90 Binary files /dev/null and b/GRID/LINEBLIT.OBJ differ diff --git a/GRID/LINK.TMP b/GRID/LINK.TMP new file mode 100644 index 0000000..8406096 --- /dev/null +++ b/GRID/LINK.TMP @@ -0,0 +1,2 @@ +main.obj asm.obj lineblit.obj + +_eye.obk ..\dis\disc.obj,p.exe,nul; diff --git a/GRID/MAIN.C b/GRID/MAIN.C new file mode 100644 index 0000000..a61a5d9 --- /dev/null +++ b/GRID/MAIN.C @@ -0,0 +1,184 @@ + +#include +#include +#include +#include "..\dis\dis.h" + +char pal[3][768]; + +#define RECLEN (4*4) +extern int plane; +extern char muldata[]; +extern int xyzdata[]; +/**/ +extern void setpalette(char *); +extern void asminit(void); +extern void asmloop1(void); +extern void setborder(int); +extern char bufdata[]; + +unsigned char far *vram0=(char far *)0xa0000000L; + +extern char eye[]; + +int sin256[256]; +int sin1[1024]; +int sinus1[1024]; +int sinus2[1024]; + +main(int argc,char *argv[]) +{ + FILE *f1; + char *cp; + int a,b,c,d,cx,cy,sip=0,j,k; + int x,y,x1,y1,x2,y2; + int scale=50,scalea=-1; + unsigned u; + double f; + for(a=0;a<256;a++) + { + f=(double)a*3.141592653589*2.0/256.0; + f=sin(f)*64; + sin256[a]=(int)f; + } + for(a=0;a<1024;a++) + { + f=(double)a*3.141592653589*2.0/1024.0; + f=sin(f)*256; + sin1[a]=(int)f; + } + + b=c=0; + for(a=0;a<1024;a++) + { + b+=97; + c+=87; + d+=67; + sinus1[a]=(sin1[(b>>3)&1023]+sin1[(c>>3)&1023]*2+sin1[(d>>3)&1023])/8; + } + for(a=0;a<1024;a++) + { + sinus2[a]=sinus1[(a+277)&1023]*7/10; + } + + dis_partstart(); + { + _asm mov ax,13h + _asm int 10h + } + + #if 0 + memset(vram0,8,64000); + while(dis_muscode(2)!=2 && !dis_exit()); + for(x=319;x>=0;x--) + { + vram0[x+100*320]=0; + if(!(x&15)) dis_waitb(); + } + y1=100; a=100*64; b=0; + while(y1<200) + { + b+=8; + a+=b; + y2=a/64; + if(y2>200) y2=200; + for(y=y1;y>3)*3+0]/4; + b=eye[16+(x>>3)*3+1]/4; + a=eye[16+(x>>3)*3+2]/4; + if(y==0) + { + if(x&1) c+=40; + if(x&4) c+=20; + if(x&2) c+=10; + } + else if(y==1) + { + if(x&2) c+=40; + if(x&1) c+=20; + if(x&4) c+=10; + } + else + { + if(x&4) c+=40; + if(x&2) c+=20; + if(x&1) c+=10; + } + if(c>63) c=63; + pal[y][x*3+0]=c; + pal[y][x*3+1]=b; + pal[y][x*3+2]=a; + } + } + //for(x=0;x<256;x++) vram0[x]=x; + + asminit(); + cp=muldata; + for(x=0;x<256;x++) for(y=0;y<256;y++) + { + _asm mov al,x + _asm mul byte ptr y + _asm mov al,ah + _asm xor ah,ah + _asm mov a,ax + *(cp++)=a; + } + + for(u=784;u<64684;u++) eye[u]<<=3; + memcpy(bufdata,eye+784,64000); + + for(x=0;x<1024;x++) + { + u=x*RECLEN; + xyzdata[u+0]=sinus1[x]+160; + xyzdata[u+1]=sinus2[x]+100; + vram0[xyzdata[u+0]+xyzdata[u+1]*320]=15; + xyzdata[u+2]=0; + xyzdata[u+3]=0; + } + getch(); + + //while(dis_muscode(2)!=2 && !dis_exit()); + memcpy(vram0,eye+768+16,64000); + j=k=0; + while(!dis_exit()) + { + if(dis_muscode(3)==3) break; + c=j; + d=sin1[k&1023]/4+256; + d=0; + j++; + k++; + for(u=0;u<1001*RECLEN;u+=RECLEN) + { + xyzdata[u+0]=sinus1[(c)&1023]+160; + xyzdata[u+1]=sinus2[(d)&1023]+100; + c++; d++; + } + asmloop1(); + setborder(0); + dis_waitb(); + setborder(1); + setpalette(pal[plane]); + } + + if(!dis_indemo()) + { + _asm mov ax,3h + _asm int 10h + } +} diff --git a/GRID/MAIN.CUT b/GRID/MAIN.CUT new file mode 100644 index 0000000..97ff3c9 --- /dev/null +++ b/GRID/MAIN.CUT @@ -0,0 +1,18 @@ + if(y==0) + { + if(x&1) c=63; + else if(x&4) c=31; + else if(x&2) c=15; + } + else if(y==1) + { + if(x&2) c=63; + else if(x&1) c=31; + else if(x&4) c=15; + } + else + { + if(x&4) c=63; + else if(x&2) c=31; + else if(x&1) c=15; + } diff --git a/GRID/MAIN.OBJ b/GRID/MAIN.OBJ new file mode 100644 index 0000000..73f57c7 Binary files /dev/null and b/GRID/MAIN.OBJ differ diff --git a/GRID/MAIN.OK b/GRID/MAIN.OK new file mode 100644 index 0000000..182245b --- /dev/null +++ b/GRID/MAIN.OK @@ -0,0 +1,110 @@ +#include +#include +#include "..\dis\dis.h" + +#define RECLEN (4*4) +extern char muldata[]; +extern int xyzdata[]; +/**/ +extern void asminit(void); +extern void asmloop1(void); +extern void setborder(int); + +unsigned char far *vram0=(char far *)0xa0000000L; + +main(int argc,char *argv[]) +{ + FILE *f1; + char *cp; + int a,b,c; + int x,y,x1,y1,x2,y2; + int scale=50,scalea=-1; + int plane=1; + unsigned u; + + dis_partstart(); + if(!dis_indemo()) + { + _asm mov ax,13h + _asm int 10h + } + + #if 0 + memset(vram0,8,64000); + while(dis_muscode(1)!=1 && !dis_exit()); + for(x=319;x>=0;x--) + { + vram0[x+100*320]=0; + if(!(x&15)) dis_waitb(); + } + y1=100; a=100*64; b=0; + while(y1<200) + { + b+=8; + a+=b; + y2=a/64; + if(y2>200) y2=200; + for(y=y1;y50) scalea=-scalea; + if(scale<30) scalea=-scalea; + setborder(3); + asmloop1(plane); + plane<<=1; if(plane>15) plane=1; + setborder(0); + if(getch()==27) break; + dis_waitb(); + setborder(1); + } + + if(!dis_indemo()) + { + _asm mov ax,3h + _asm int 10h + } +} diff --git a/GRID/MAKEFILE b/GRID/MAKEFILE new file mode 100644 index 0000000..80f2840 --- /dev/null +++ b/GRID/MAKEFILE @@ -0,0 +1,23 @@ +all : p.exe + +objs=main.obj asm.obj lineblit.obj + +odata=_eye.obk + +lineblit.asm : lineblit.inc + +################################################################ + +asm_f = /ML /m2 /s /JJUMPS +c_f = /AL /c /G2 + +.asm.obj : + tasm $(asm_f) $< + +.c.obj : + cl /qc $(c_f) $< + +p.exe : $(objs) + @echo $(objs) + > link.tmp + @echo $(odata) ..\dis\disc.obj,p.exe,nul; >> link.tmp + link /E @link.tmp diff --git a/GRID/OUT.3D b/GRID/OUT.3D new file mode 100644 index 0000000..3b1a1f5 Binary files /dev/null and b/GRID/OUT.3D differ diff --git a/GRID/P.EXE b/GRID/P.EXE new file mode 100644 index 0000000..fa09f62 Binary files /dev/null and b/GRID/P.EXE differ diff --git a/GRID/P.OLD b/GRID/P.OLD new file mode 100644 index 0000000..dcf24ce Binary files /dev/null and b/GRID/P.OLD differ diff --git a/GRID/TMP b/GRID/TMP new file mode 100644 index 0000000..d9c55ee --- /dev/null +++ b/GRID/TMP @@ -0,0 +1,6 @@ +xbufseg SEGMENT para public 'DATA' + ;high=X, low=Y => result=X*Y/256 +PUBLIC _bufdata +_bufdata dw 32768 dup(0) +xbufseg ENDS + diff --git a/GRID/_EYE.OBK b/GRID/_EYE.OBK new file mode 100644 index 0000000..abb47c9 Binary files /dev/null and b/GRID/_EYE.OBK differ diff --git a/HARD/AN_PREFS b/HARD/AN_PREFS new file mode 100644 index 0000000..7fdc1a7 Binary files /dev/null and b/HARD/AN_PREFS differ diff --git a/HARD/ASM.A b/HARD/ASM.A new file mode 100644 index 0000000..843e6b3 --- /dev/null +++ b/HARD/ASM.A @@ -0,0 +1,545 @@ +;FIND "386opt" TO FIND OPTIMIZABLE PLACES NOTED +include clink.inc + +extrn _everyframe:far +extrn _fromasmdraw:far +extrn _toasmdraw:far + +;---------------------------------------------------------------- +data_seg SEGMENT para public 'DATA' + +public sintable16 +public costable16 +public tantable32 +include calcsin.inc + +public _splinecoef +_splinecoef LABEL WORD +include spline.inc + +ALIGN 16 ;temporary working area, used by: +;- polyn() for scanline min/mix storage +public workarea +public borders +workarea LABEL WORD +borders LABEL WORD ;should be enough for 680 normal hlines in group + db 8192 dup(0) +workareaoverflow dw 012fch + +data_seg ENDS +;---------------------------------------------------------------- + +extrn _worldroot +asm_objs SEGMENT para public 'DATA' +;contents in obj.asm +asm_objs ENDS + +asm_text SEGMENT para public 'CODE' + ASSUME cs:asm_text + ASSUME gs:data_seg ;when data used, generally in gs +.386 + +;**************************************************************** +;PUBLICS +;**************************************************************** +PUBLIC _asminit,_asmdeinit,_asm,_asmclear +PUBLIC _testinit +PUBLIC _setborder + +PUBLIC _borders +PUBLIC _autofly + +PUBLIC _horizon + +;**************************************************************** +;GLOBAL VARIABLES +;**************************************************************** + +MAXY equ 159 +MAXX equ 319 + +;vector window coordinates (for clipping) +public _vecwindow +_vecwindow label word +WMINX dw 4 +WMINY dw 4 +WMAXX dw 315 +WMAXY dw 155 + +videot LABEL WORD + dw OFFSET v320x200x256 + dw OFFSET v320x240x256 + dw OFFSET v320x350x256 + dw OFFSET v320x350x256unr + dw OFFSET vtseng640x400x256 + dw OFFSET valien ;5 + +video LABEL WORD +vvinit = cs:video[0] + dw 0 ;init screen +vvswitch = cs:video[2] + dw 0 ;switch pages +vvclear = cs:video[4] + dw 0 ;clear + ;all following gfx routines require: + ;es=vram; OUT 3C4,2 +vvpset = cs:video[6] + dw 0 ;pset (DX,BX),CS:COLOR - plot a plot. Saves DS:SI/CX +vvlineto = cs:video[8] + dw 0 ;lineto - (CX,AX)->(DX,BX),CS:COLOR - draw a line - OPTIMIZE ME!-) +vvhline = cs:video[10] + dw 0 ;hline - (AX,BX)->(DX,BX),CS:COLOR - draw a horizontal line +vvhlinegroup = cs:video[12] + dw 0 ;hlinegroup - GS:SI->list of hlines: + ;word:start row + ;REPT + ;word:X1 (-32767=end of list) + ;word:X2 + ;ENDM +vvthlinegroup = cs:video[14] + dw 0 ;thlinegroup - GS:SI->list of hline, FS=texture segment + ;word:start row + ;REPT + ;word:X1 (-32767=end of list) + ;word:X2 + ;word:TextureX1Y1 + ;word:TextureX2Y2 + ;ENDM +video9 LABEL WORD +public _framebuf ;used by nrm modes (=>vram) +_framebuf dw 0,0 + +PUBLIC _framemul +_framemul dw 0 + +supervga db 1 + db 0 + +ALIGN 4 +rows dw 512 dup(0) +rowsadd dw 0 +truerowsadd dw 0 +vecvram dw ? ;used by vector drawer +public _asmvramseg +_asmvramseg LABEL WORD +truevram dw ? +vram dw 0a5f0h ;-"- old + + +PUBLIC _texture +_texture dw 0,0 + + +color LABEL WORD +color1 db 0 +color2 db 0 +colorl dw 0 +PUBLIC _asmexit +_asmexit db 0 +fatalss dw 0 +fatalsp dw 0 +PUBLIC _inunreal +_inunreal db 0 +PUBLIC _framestaken +_framestaken dw 0 +PUBLIC _subpart +_subpart db 2 +PUBLIC _wireframe,_nohidden,_curlist +_wireframe db 0 +_nohidden db 0 +_curlist dw 0 +PUBLIC _mousedotx,_mousedoty +PUBLIC _mouse0dotx,_mouse0doty +_mousedotx dw 160 +_mousedoty dw 80 +_mouse0dotx dw 160 +_mouse0doty dw 80 + +public _font3x5 +_font3x5 dw 0,0 + +_horizon dw 0,0 +_horizonenabled db 1 + +nowaitborder db 0 +_borders db 0 ;1=show bordertimings +_autofly db 0 + +ALIGN 2 +dataseg dw data_seg +cdataseg dw 0 ;DS of the C routines +public _depthtable +_depthtable dw 0 +depthseg dw 0 + +public _asmdebugmode,_asmvideomode +_asmvideomode dw 0 +_asmdebugmode dw 0 +public _debugw + +;**************************************************************** +;SCREEN ROUTINES: +;waitborder +;LOW LEVEL ROUTINES: +;hline1 (AX,BX)-(DX,BX), color REQ: color1=color2, ds=cs, +; es=vram, OUT 3C4,2, EAXhi=0 +;pset (DX,BX), color REQ: ds=cs, es=vram, OUT 3C4,2 +;?line (DX,BX), color +;**************************************************************** +include vid.asm +;INITIALIZATION ROUTINES & COPPER EMULATION: +include copper.asm ;calls copper_doit() every frame +.386 ;for copper.asm sets .286 + +;**************************************************************** +;POLYGONS: call poly +;polygon with 1 sides is a dot +;polygon with 2 sides is a line +;following variables must be set (used as parameters) +;**************************************************************** +include poly.asm + +;**************************************************************** +;VECTOR ROUTINES: +;doobject +;MACRO sinbx2ax ;ax=sin(bx) req: ds=cs +;MACRO cosbx2ax ;ax=cos(bx) req: ds=cs +;**************************************************************** +include calc.asm +include spline.asm +include vec.asm +include matrix.asm +include horiz.asm + +;**************************************************************** +;(OBJECT) MEMORY MANAGEMENT +;**************************************************************** +include omem.asm + +;**************************************************************** +;C-interface +;**************************************************************** + +copper_doit PROC NEAR + ;called every frame by copper, must save all but AX/BX/CX/DX + sti + pushad + push ds + push es + ;call dos timer + pushf + call cs:oldint8 ;from copper + mov ds,cs:cdataseg + cmp cs:_inunreal,0 + je nodoni + mov ah,9 + int 60h ;musicmixer +nodoni: ;call _everyframe ;if uses scrn, should restore all VGA regs + pop es + pop ds + popad + cli + ret +copper_doit ENDP + +_testinit PROC FAR + CBEG + CEND +_testinit ENDP + +_asmclear PROC FAR + CBEG + call vvclear + CEND +_asmclear ENDP + +ALIGN 2 +INTER equ 0h +oldint dd ? +_asminit PROC FAR + CBEG + mov cs:cdataseg,ds + ; + mov si,cs:_asmvideomode + shl si,1 + mov si,cs:videot[si] + mov di,OFFSET video + cld + mov ax,cs + mov ds,ax + mov es,ax + mov cx,(video9-video)/2 + rep movsw + ; + call vvinit + call vvclear + call vvswitch + cmp cs:_asmdebugmode,0 + je noadm + call tweak320x200 +noadm: + cli + mov ax,0 + mov es,ax + mov ax,es:[INTER*4] + mov WORD PTR cs:[oldint+0],ax + mov ax,es:[INTER*4+2] + mov WORD PTR cs:[oldint+0+2],ax + mov ax,OFFSET intti + mov es:[INTER*4],ax + mov word ptr es:[INTER*4+2],cs + sti + + call clearpal + + ;call testmem + CEND +_asminit ENDP + +_asmdeinit PROC FAR + CBEG + cli + mov ax,0 + mov es,ax + mov ax,WORD PTR cs:[oldint+0] + mov es:[INTER*4],ax + mov ax,WORD PTR cs:[oldint+0+2] + mov es:[INTER*4+2],ax + sti + ;mov ax,3 + ;int 10h + CEND +_asmdeinit ENDP + +m_diverror db 'FATAL: divide overflow',0 +m_workflow db 'FATAL: work area overflow',0 +m_oldpoly db 'FATAL: old style polygons no longer supported',0 +m_outofvx db 'FATAL: too many vertices in object',0 +m_press db ' Press ESC to return to dos ',0 + +dosmsgp dw 0 +dosmsg PROC NEAR + mov ax,cs + mov ds,ax + mov ax,0b800h + mov es,ax + mov di,ds:dosmsgp + mov ah,4eh +doe2: lodsb + cmp al,0 + je doe1 + stosw + jmp doe2 +doe1: add ds:dosmsgp,di + ret +dosmsg ENDP + +intti PROC FAR + ;DIVIDE OVERFLOW + sti + mov si,OFFSET m_diverror + jmp fatalexit +fatalexit: + mov ax,3 + int 10h + call dosmsg + mov si,OFFSET m_press + call dosmsg +iiia: mov ax,0 + int 16h + cmp al,27 + jne iiia + mov cs:_asmexit,1 + mov ss,cs:fatalss + mov sp,cs:fatalsp + CEND +intti ENDP + +public _camera,_tmpxyz +_camera LABEL WORD +dd 0 +dd 0 +dd 0 +dw ?,?,? +dw 0 +dw 0 +dw 0 +_tmpxyz dd -200000000,0,0 + +lastcoppercount dw 0 +clearit dw 1 + +PUBLIC _doclear +_doclear PROC FAR + CBEG + call doclear + CEND +_doclear ENDP + +doclear PROC NEAR + ret + mov dx,3c4h + mov ax,0f02h + out dx,ax + xor di,di + mov ax,0a000h + mov es,ax + mov cx,65535 + xor ax,ax +doc1: mov es:[di],al + nop + inc di + loop doc1 + ret +doclear ENDP + +_asm PROC FAR + CBEG + mov cs:fatalss,ss + mov cs:fatalsp,sp + sti + + cmp cs:_asmvideomode,5 + je nothis1 + mov ds,cs:cdataseg + call _toasmdraw +nothis1: + call cs:video[2] ;switchpages, returns cs:vram + mov ax,cs:vram + mov cs:vecvram,ax + + ;mov ax,cs:vram + ;add ax,02dh ;add 8 rows + ;mov ax,asm_framebuf + ;mov ax,asm_framebuf + ;mov cs:vecvram,ax + ;mov ax,0a000h + ;mov cs:vram,ax + + cmp cs:nowaitborder,0 + jne asm1b + + cmp cs:_inunreal,0 + je asmnormal + ;waitborder with copper +asm2: mov ah,10 + int 60h + cmp ax,cs:lastcoppercount + je asm2 +asm1: mov bx,ax + sub bx,cs:lastcoppercount + mov cs:_framestaken,bx + mov cs:lastcoppercount,ax + jmp asmunr + +asmnormal: + ;waitborder with copper +asm2b: mov ax,cs:coppercount + cmp ax,cs:lastcoppercount + je asm2b +asm1b: mov bx,ax + sub bx,cs:lastcoppercount + mov cs:_framestaken,bx + mov cs:lastcoppercount,ax + +asmunr: setborder 1 + ;mov cs:color,0000h + ;call vecclearscreen + ;enable all planes for debugdots + mov dx,3c4h + mov ax,0f02h + out dx,ax + ;do the vecs + ;call dofirstnew + setborder 2 + call dofirstnrs + setborder 0 + ;do the mousedot + IFDEF MOUSEDOT + mov dx,3c4h + mov al,2 + out dx,al + mov ax,cs:vecvram + mov es,ax + mov ax,cs + mov ds,ax + mov dx,cs:_mouse0dotx + mov bx,cs:_mouse0doty + mov cs:color1,15 + call pset1 + mov dx,cs:_mousedotx + mov bx,cs:_mousedoty + mov cs:color1,14 + call pset1 + ENDIF + ;check workareaoverflow + mov gs,cs:dataseg + cmp gs:workareaoverflow,012fch + je workok + mov si,OFFSET m_workflow + jmp fatalexit +workok: ;done + + cmp cs:_asmvideomode,5 + je nothis2 + mov ds,cs:cdataseg + call _fromasmdraw +nothis2: + CEND +_asm ENDP + +public _softice +_softice PROC FAR + CBEG + mov ah,9 + mov al,11h + mov si,'FG' + mov di,'JM' + movpar ds,1 + movpar dx,0 + int 3 + CEND +_softice ENDP + +copybmap PROC NEAR + ;enable all planes for debugdots + mov ax,OFFSET cbj2 + mov cs:bmapjmp,ax + mov bx,cs:bmapwid + shr bx,1 +cbm3: mov cs:bmapdi,di + mov dx,3c4h + mov ax,0102h +cbm4: push ax + push si + out dx,ax + mov cx,bx + jmp cs:bmapjmp +cbmb: mov di,cs:bmapdi + pop si + pop ax + shl ah,1 + add si,80 + cmp ah,16 + jb cbm4 + sub si,320 + ret +cbj1: rep movsw + jmp cbmb +cbj2: movsb + dec cx + rep movsw + movsb + jmp cbmb +cbj3: rep movsw + movsb + jmp cbmb +cbj4: movsb + rep movsw + jmp cbmb +copybmap ENDP + +.8086 +asm_text ENDS + END + \ No newline at end of file diff --git a/HARD/B.C b/HARD/B.C new file mode 100644 index 0000000..e8b0061 --- /dev/null +++ b/HARD/B.C @@ -0,0 +1,339 @@ +/* blue screen dots */ + +#include +#include +#include +#include +#include +#include "..\dis\dis.h" + +#define NEXTMODE { count=-1; mode++; } + +extern int rows[200]; +extern int dotxyz[]; +extern int dodots(char *,char *); +extern int sin1024[]; + +unsigned char far *vram=(char far *)0xa2d00000L; +unsigned char far *vram0=(char far *)0xa0000000L; + +char pal[768]; +char pal2[768]; +char defpal[768]; + +char *background; + +int mode=0,count=-1,border=0; + +extern int grid1[]; /* _grid1.obj */ +extern char dots1[]; /* _dots1.obj */ +extern char dots2[]; /* _dots1.obj */ +extern char dots3[]; /* _dots1.obj */ +extern char dots4[]; /* _dots1.obj */ +char *dotspnt; +int dotsp; + +int setborder(int c) +{ + if(!border) return(0); + _asm + { + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,11h+20h + out dx,al + mov al,byte ptr c + out dx,al + } +} + +int waitb(void) +{ + dis_waitb(); + #if 0 + _asm + { + mov dx,3dah + l1: in al,dx + test al,8 + jz l1 + l2: in al,dx + test al,8 + jnz l2 + } + #endif +} + +int loadpal(char *pal,int cnt) +{ + _asm + { + push ds + lds si,pal + mov dx,3c8h + xor al,al + out dx,al + inc dx + mov cx,cnt + rep outsb + pop ds + } +} + +void adddot(int a,int b,int x,int y,int c) +{ + static int doti=0,sc=0; + if(!c) dotxyz[doti*6+5]=dotxyz[doti*6+4]=0x100; + else + { + dotxyz[doti*6+0]=x*64+32-(a-x); + dotxyz[doti*6+1]=y*64+32-(b-y); + dotxyz[doti*6+2]=(a-x); + dotxyz[doti*6+3]=(b-y); + dotxyz[doti*6+4]=c+(66)*256; + dotxyz[doti*6+5]=x+y*320; + } + doti++; doti&=2047; /* 2048 */ +} + +int doit1(int x,int y,int col) +{ + int a,x2,y2; + static int flag=0; + flag^=1; + if(flag&1) { x2=x*4; y2=y*4; } + else { x2=x*3; y2=y*3; } + x2+=(rand()&31)-15; + y2+=(rand()&31)-15; + adddot(x+160,y+64,x2+160,y2+64,col); +} + +int doit2(int x,int y,int col) +{ + int a,x2,y2; + static int gx=0; + x2=grid1[gx+0]; + y2=grid1[gx+1]; + gx+=2; + if(gx>=200) gx=0; + adddot(x2,y2,x+160,y+64,col); +} + +#include "bp.c" + +main(int argc,char *argv[]) +{ + int endcnt=0; + FILE *f1; + unsigned u; + int a,b,c,d,e,x,y,x2,y2,y1; + dis_partstart(); + { + _asm mov ax,13h + _asm int 10h + } + waitb(); + memset(vram0,15,64000); + while(dis_muscode(1)!=1 && !dis_exit()); + waitb(); + waitb(); + waitb(); + waitb(); + for(x=319;x>=0;x--) + { + vram0[x+100*320]=0; + if(!(x&15)) waitb(); + } + y1=100; a=100*64; b=0; + while(y1<200) + { + b+=16; + a+=b; + y2=a/64; + if(y2>200) y2=200; + for(y=y1;y0) loadpal(pal,768); + if(mode==5 && count>500-17) loadpal(pal,768-6); + if(mode==6 && count>0 && count<20) loadpal(pal,768-6); + setborder(0); + if(mode<4) dodots(background,vram); + else if(mode==4) dodots2(background,vram); + switch(mode) + { + case 0: + if(count>32) + { + NEXTMODE; + } + break; + case 1: + if(!count) + { + x=0; + part1init(); + } + else part1(); + break; + case 2: + { + NEXTMODE; + if(dotspnt==dots1) { mode=1; dotspnt=dots2; } + else if(dotspnt==dots2) { mode=1; dotspnt=dots3; } + else if(dotspnt==dots3) { mode=1; dotspnt=dots4; } + else for(a=0;a<2048;a++) adddot(0,0,0,0,0); + } + break; + case 3: + if(count>40) NEXTMODE; + break; + case 4: + if(count>400) + { + NEXTMODE; + } + if(!count) + { + pal1colp=1; + memset(background,0,64000); + for(dotsp=a=0;a<2048;a++) + { + dotsp+=4; + switch(dotspnt[dotsp]) + { + case 1 : + case 2 : + case 3 : doit2(dotspnt[dotsp+2],dotspnt[dotsp+3],254); break; + default : dotsp=0; break; + } + } + for(a=3;a<32*3;a+=3) + { + pal[a+0]=0; + pal[a+1]=0; + pal[a+2]=20; + } + } + a=252-pal1colp; + d=a+66; if(d>254) d=254; + c=63; + for(;a100) + { + for(a=0;a<2048;a++) adddot(0,0,0,0,0); + NEXTMODE; + } + break; + case 5: + if(!count) + { + for(u=0;u<128*320;u++) + { + if(vram[u]==254-65) vram[u]=1; + else vram[u]=0; + } + part2init(); + } + else part2(); + break; + case 6: + if(!count) + { + part3init(); + } + else part3(); + break; + case 7: + NEXTMODE; + if(count>100) + { + NEXTMODE; + } + break; + default : + mode=-1; + break; + } + } + if(!dis_indemo()) + { + _asm mov ax,3h + _asm int 10h + } + /* + for(a=0;a<16;a++) + { + printf("%i: %i %i %i\n",a, + points3[2+a*8+0], + points3[2+a*8+1], + points3[2+a*8+4]); + } + */ +} diff --git a/HARD/B.EXE b/HARD/B.EXE new file mode 100644 index 0000000..d6637f8 Binary files /dev/null and b/HARD/B.EXE differ diff --git a/HARD/BA.ASM b/HARD/BA.ASM new file mode 100644 index 0000000..8c43158 --- /dev/null +++ b/HARD/BA.ASM @@ -0,0 +1,284 @@ +text_wa SEGMENT para public 'CODE' + ASSUME cs:text_wa + +.386 +LOCALS + +NUM equ 2048 +public _rows,_dotxyz +_rows dw 200 dup(0) + dw 4 dup(64000) +_dotxyz dw NUM dup(0,32767,0,0,100h,0) + ;dotmode=1: x,y,xa,ya,bytes:color/count,last + +public _sin1024 +include sin1024.inc + +public _dodots +_dodots PROC FAR + push bp + mov bp,sp + push si + push di + push ds + + mov es,[bp+12] + mov ds,[bp+8] + call dot3d + + pop ds + pop di + pop si + pop bp + ret +_dodots ENDP + +public _dodots2 +_dodots2 PROC FAR + push bp + mov bp,sp + push si + push di + push ds + + mov es,[bp+12] + mov ds,[bp+8] + call dot3d2 + + pop ds + pop di + pop si + pop bp + ret +_dodots2 ENDP + +public _do3dots +_do3dots PROC FAR + push bp + mov bp,sp + push si + push di + push ds + + mov es,[bp+12] + mov si,[bp+6] + mov ds,[bp+8] + call do3dots + + pop ds + pop di + pop si + pop bp + ret +_do3dots ENDP + +dot3d PROC NEAR + mov cx,NUM + mov si,OFFSET _dotxyz + xor bx,bx + +a1: mov dx,cs:[si+8] + cmp dl,0 + jne a4 + add si,12 + loop a1 + ret + +a2: mov bx,cs:[si+10] + mov byte ptr ds:[bx],dl + mov byte ptr es:[bx],dl + mov word ptr cs:[si+8],0100h + add si,12 + loop a1 + ret + +a4: ;dec dl + dec dh + jz a2 + mov cs:[si+8],dx + mov bx,cs:[si+10] + mov al,ds:[bx] + mov es:[bx],al + mov bx,cs:[si+2] + add bx,cs:[si+6] + mov cs:[si+2],bx + sar bx,6 + cmp bx,127 + ja a5 + shl bx,1 + mov bx,cs:_rows[bx] + mov ax,cs:[si+0] + add ax,cs:[si+4] + mov cs:[si+0],ax + sar ax,6 + cmp ax,319 + ja a5 + add bx,ax + mov es:[bx],dl + mov cs:[si+10],bx +a5: add si,12 + loop a1 + ret +dot3d ENDP + +dot3d2 PROC NEAR + mov cx,NUM + mov si,OFFSET _dotxyz + xor bx,bx + +@@1: mov dx,cs:[si+8] + cmp dl,0 + jne @@4 + add si,12 + loop @@1 + ret + +@@2: ;mov bx,cs:[si+10] + ;mov byte ptr ds:[bx],dl + ;mov byte ptr es:[bx],dl + mov word ptr cs:[si+8],0100h + add si,12 + loop @@1 + ret + +@@4: dec dl + dec dh + jz @@2 + mov cs:[si+8],dx +; mov bx,cs:[si+10] +; mov al,ds:[bx] +; mov es:[bx],al + mov bx,cs:[si+2] + add bx,cs:[si+6] + mov cs:[si+2],bx + sar bx,6 + cmp bx,127 + ja @@5 + shl bx,1 + mov bx,cs:_rows[bx] + mov ax,cs:[si+0] + add ax,cs:[si+4] + mov cs:[si+0],ax + sar ax,6 + cmp ax,319 + ja @@5 + add bx,ax + mov es:[bx],dl +; mov word ptr cs:[si+10],0 +@@5: add si,12 + loop @@1 + ret +dot3d2 ENDP + +tmpblue db 0 +PUBLIC _fadepal +_fadepal PROC FAR + push bp + mov bp,sp + push si + push di + push ds + mov di,[bp+6] + mov es,[bp+8] + mov si,[bp+10] + mov ds,[bp+12] + mov dx,[bp+14] + xor bx,bx + cmp dx,256 + jb @@1 + mov dx,255 +@@1: mov dh,255 + sub dh,dl + mov al,20 + mul dh + mov cs:tmpblue,ah + mov cx,256 +@@3: mov al,ds:[si+bx] + mul dl + mov es:[di+bx],ah + inc bx + mov al,ds:[si+bx] + mul dl + mov es:[di+bx],ah + inc bx + mov al,ds:[si+bx] + mul dl + add ah,cs:tmpblue + mov es:[di+bx],ah + inc bx + loop @@3 + pop ds + pop di + pop si + pop bp + ret +_fadepal ENDP + +ALIGN 2 +shadowcx dw 250 +shadowcy dw 150 +mul10000 dw 3000 +PUBLIC _depthcol +_depthcol db 8192 dup(0) + +do3dots PROC NEAR + mov cx,ds:[si] + add si,4 +@@1: mov bx,ds:[si+6] + mov byte ptr es:[bx],0 + mov bx,ds:[si+12] + mov word ptr es:[bx],0 + mov word ptr es:[bx+320],0 + mov bp,ds:[si+8] + cmp bp,3000 + jg @@2 + jmp @@4 + mov bx,ds:[si] + mov ax,bx + sub ax,cs:shadowcx + imul cs:mul10000 + idiv bp + add ax,cs:shadowcx + push ax + mov bx,ds:[si+2] + mov ax,bx + sub ax,cs:shadowcy + imul cs:mul10000 + idiv bp + add ax,cs:shadowcy + mov bx,ax + pop ax + cmp ax,318 + ja @@3 + cmp bx,126 + ja @@3 + shl bx,1 + mov bx,cs:_rows[bx] + add bx,ax + mov ds:[si+12],bx + mov word ptr es:[bx],0ffffh + mov word ptr es:[bx+320],0ffffh + +@@4: mov al,cs:_depthcol[bp] + mov bx,ds:[si+2] + cmp bx,127 + ja @@2 + shl bx,1 + mov bx,cs:_rows[bx] + add bx,ds:[si] + mov ds:[si+6],bx + mov byte ptr es:[bx],al + add si,16 + loop @@1 + ret +@@3: mov word ptr ds:[si+12],0 + jmp @@4 +@@2: mov word ptr ds:[si+6],0 + add si,16 + loop @@1 + ret +do3dots ENDP + +text_wa ENDS + END + \ No newline at end of file diff --git a/HARD/BACKX.BAT b/HARD/BACKX.BAT new file mode 100644 index 0000000..2ea2e91 --- /dev/null +++ b/HARD/BACKX.BAT @@ -0,0 +1 @@ +pkzip %1 %2 -Pr -x*.exe -x*.obj -x*.~* -x*.ob diff --git a/HARD/BBAK.EXE b/HARD/BBAK.EXE new file mode 100644 index 0000000..6294358 Binary files /dev/null and b/HARD/BBAK.EXE differ diff --git a/HARD/BDO.C b/HARD/BDO.C new file mode 100644 index 0000000..db2ccaa --- /dev/null +++ b/HARD/BDO.C @@ -0,0 +1,42 @@ +#include + +unsigned char logodat[64000]; + +void doit(char *name,int ybase) +{ + int x,y; + FILE *f2; + unsigned u,c; + printf("%s : ",name); + f2=fopen(name,"wb"); + for(c=x=0;x<320;x++) for(y=0;y<40;y++) + { + u=x+y*320+ybase*320; + if(logodat[u]<4 && logodat[u]) + { + c++; + putc(logodat[u],f2); + putc(0,f2); + putc(x-160,f2); + putc(y-20,f2); + } + } + putc(0,f2); + printf("%i dots.\n",c); + fclose(f2); +} + +main() +{ + FILE *f1; + printf("Creating movement tables for FC logo...\n"); + + f1=fopen("fcrz.u","rb"); + fread(logodat,320,200,f1); + fclose(f1); + + doit("_dots1.tmp",0); + doit("_dots2.tmp",40); + doit("_dots3.tmp",80); + doit("_dots4.tmp",120); +} diff --git a/HARD/BDO.EXE b/HARD/BDO.EXE new file mode 100644 index 0000000..0fe6d3e Binary files /dev/null and b/HARD/BDO.EXE differ diff --git a/HARD/BDOOLD.C b/HARD/BDOOLD.C new file mode 100644 index 0000000..9e3a22f --- /dev/null +++ b/HARD/BDOOLD.C @@ -0,0 +1,38 @@ +#include + +unsigned char logodat[64000]; + +main() +{ + int x,y; + FILE *f1,*f2; + unsigned u,c; + printf("Creating movement tables for FC logo...\n"); + + f2=fopen("_dots1.tmp","wb"); + f1=fopen("fckoe3.u","rb"); + fread(logodat,320,200,f1); + fclose(f1); + + #if 0 + for(c=x=0;x<320;x++) for(y=0;y<200;y++) + { + u=(x+y*320); if(logodat[u]) c++; + } + #endif + + for(x=0;x<320;x++) for(y=0;y<200;y++) + { + u=x+y*320; + if(logodat[u]==2 || logodat[u]==1) + { + putc(logodat[u],f2); + putc(0,f2); + putc(x-160,f2); + putc(y-32,f2); + } + } + putc(0,f2); + + fclose(f2); +} diff --git a/HARD/BP.C b/HARD/BP.C new file mode 100644 index 0000000..1ded286 --- /dev/null +++ b/HARD/BP.C @@ -0,0 +1,299 @@ +/* parts */ + +char pal1[768]; +int pal1colp=0; + +void part1init(void) +{ + int a,b,c; + if(!pal1colp) memcpy(pal,defpal,768); + for(c=(16)*3,a=0;a<64;a++) + { + b=64-a; b=b*b/64; + if(b<0) b=0; else if(b>63) b=63; + pal1[a*3+c+0]=b; + pal1[a*3+c+64*3+0]=b*2/3; + pal1[a*3+c+128*3+0]=b*1/3; + b=64-a; b=b*b/64; + if(b<0) b=0; else if(b>63) b=63; + pal1[a*3+c+1]=b; + pal1[a*3+c+64*3+1]=b*2/3; + pal1[a*3+c+128*3+1]=b*1/3; + b=64-a; + b=b*4/6; + if(b<0) b=0; else if(b>63) b=63; + pal1[a*3+c+2]=b+20; + pal1[a*3+c+64*3+2]=b*2/3+20; + pal1[a*3+c+128*3+2]=b*1/3+20; + } + waitb(); + inp(0x3da); + dotsp=0; + pal1colp+=4; +} + +void part1(void) +{ + int a,b; + b=count-6; if(b<0) b=0; else if(b>63) b=63; + b=b*3+16*3; + pal[-3*4+pal1colp*3+1*3+0]=pal1[0*3+b+0]; + pal[-3*4+pal1colp*3+1*3+1]=pal1[0*3+b+1]; + pal[-3*4+pal1colp*3+1*3+2]=pal1[0*3+b+2]; + pal[-3*4+pal1colp*3+2*3+0]=pal1[64*3+b+0]; + pal[-3*4+pal1colp*3+2*3+1]=pal1[64*3+b+1]; + pal[-3*4+pal1colp*3+2*3+2]=pal1[64*3+b+2]; + pal[-3*4+pal1colp*3+3*3+0]=pal1[128*3+b+0]; + pal[-3*4+pal1colp*3+3*3+1]=pal1[128*3+b+1]; + pal[-3*4+pal1colp*3+3*3+2]=pal1[128*3+b+2]; + b=(64-(count>64?64:count))*3+16*3; + pal[pal1colp*3+1*3+0]=pal1[0*3+b+0]; + pal[pal1colp*3+1*3+1]=pal1[0*3+b+1]; + pal[pal1colp*3+1*3+2]=pal1[0*3+b+2]; + pal[pal1colp*3+2*3+0]=pal1[64*3+b+0]; + pal[pal1colp*3+2*3+1]=pal1[64*3+b+1]; + pal[pal1colp*3+2*3+2]=pal1[64*3+b+2]; + pal[pal1colp*3+3*3+0]=pal1[128*3+b+0]; + pal[pal1colp*3+3*3+1]=pal1[128*3+b+1]; + pal[pal1colp*3+3*3+2]=pal1[128*3+b+2]; + loadpal(pal,32*3); + if(count<8) for(a=0;a<2048/8;a++) + { + dotsp+=4; + switch(dotspnt[dotsp]) + { + case 1 : doit1(dotspnt[dotsp+2],dotspnt[dotsp+3],3+pal1colp); break; + case 2 : doit1(dotspnt[dotsp+2],dotspnt[dotsp+3],2+pal1colp); break; + case 3 : doit1(dotspnt[dotsp+2],dotspnt[dotsp+3],1+pal1colp); break; + default : dotsp=0; break; + } + } + else if(count>=72) NEXTMODE; +} + +/*################################################################*/ + +extern int csetmatrix(int *,long,long,long); +extern int crotlist(long *,long *); +extern int cclipedges(int *,int *,long *); // modifies given point list +extern int cprojlist(long *,long *); +extern int cdrawpolylist(int *); +extern int cmatrix_yxz(int,int,int,int *); +extern int cpolylist(int *polylist,int *polys,int *edges,long *points3); +extern int ceasypolylist(int *polylist,int *polys,long *points3); + +long cubepoints[]={8, +-510,-510,-510, +410,-510,-510, +410,410,-510, +-510,410,-510, +-510,-510,410, +410,-510,410, +410,410,410, +-510,410,410 +}; +int cubepolys[]={ +4,0x4001,3,2,1,0, +4,0x4002,4,5,6,7, +4,0x4004,0,1,5,4, +4,0x4008,1,2,6,5, +4,0x4010,2,3,7,6, +4,0x4020,3,0,4,7, +0}; +int cubepolyss[]={ +4,0x4040,3+8,2+8,1+8,0+8, +4,0x4040,4+8,5+8,6+8,7+8, +4,0x4040,0+8,1+8,5+8,4+8, +4,0x4040,1+8,2+8,6+8,5+8, +4,0x4040,2+8,3+8,7+8,6+8, +4,0x4040,3+8,0+8,4+8,7+8, +0}; + +long gridpoints[1010*3]; + +int polylist[256]; +long points2[1010*3]; +int points3[1010*8]; + +int rx=0,ry=0,rz=0,zp=5600; + +int matrix[9]; + +extern char depthcol[]; + +void part2init(void) +{ + int a,r,g,b,x,y,z,d; + + for(a=0;a<3100;a++) + { + if(a<1000 || b>=3000) b=127; + else b=127-(a-1000)/32; + depthcol[a]=b; + } + + memcpy(pal,defpal,768); + pal[1*3+0]=63; + pal[1*3+1]=63; + pal[1*3+2]=63; + pal[250*3+0]=0; + pal[250*3+1]=0; + pal[250*3+2]=40; + d=64; + for(a=0;a<64;a++) + { + b=a+d; if(b>63) b=63; + pal[64*3+a*3+0]=a; + b=a+20+d; if(b>63) b=63; + pal[64*3+a*3+1]=b; + b=a+40+d; if(b>63) b=63; + pal[64*3+a*3+2]=b; + if(d>0) d-=8; + } + loadpal(pal,768); + memcpy(pal2,pal,768); + + a=1; + for(x=0;x<10;x++) for(y=0;y<10;y++) for(z=0;z<10;z++) + if(!x || !y || !z || x==9 || y==9 || z==9) + { + gridpoints[a++]=(x-5)*100; + gridpoints[a++]=(y-5)*100; + gridpoints[a++]=(z-5)*100; + } + gridpoints[0]=(a-1)/3; + + zp=3500; +} + +void part2(void) +{ + int a,x,y; + if(count>=500) NEXTMODE; + if(count>500-16) + { + a=(500-16)-count; + fadepal(pal,pal2,a*16); + } + + setborder(0); + cmatrix_yxz(rx,ry,rz,matrix); + csetmatrix(matrix,0,0,zp); + setborder(1); + points3[0]=0; crotprojlist(points3,gridpoints); + setborder(250); + do3dots(points3,vram); + #if 0 + if(count==2) + { + FILE *f1; + f1=fopen("_grid1.tmp","wb"); + for(a=0;a1) + { + rx+=9; ry+=10; rz+=11; + if(zp>2000) zp-=10; + } + setborder(255); +} + +/*################################################################*/ + + +void part3init(void) +{ + int a,r,g,b; + memcpy(pal,defpal,768); + for(a=1;a<128;a++) + { + r=g=0; b=20; + if(a&0x1) { g+=20; r+=20; } + if(a&0x2) { g+=22; r+=22; } + if(a&0x4) { g+=24; r+=24; } + if(a&0x8) { g+=26; r+=26; } + if(a&0x10) { g+=28; r+=28; } + if(a&0x20) { g+=30; r+=30; } + if(a&0x40) { b=15; } + if(r>63) r=63; + if(g>63) g=63; + if(b>63) b=63; + pal2[a*3+0]=r; + pal2[a*3+1]=g; + pal2[a*3+2]=b; + } + for(a=2;a<254;a++) + { + pal[a*3+0]=0; + pal[a*3+1]=0; + pal[a*3+2]=20; + } + loadpal(pal,768); + /* + rx=0; + ry=0; + rz=0; + zp=5600; + */ +} + +void part3(void) +{ + int a,b,c,x,y; + int liy=80,lix=190; + static int ct2=0; + long lz,z; + if(count>=800) NEXTMODE; + if(dis_muscode(0xff)==0xff) NEXTMODE; + + ct2+=4; + lix=sin1024[ct2&1023]/2+160; + liy=sin1024[(ct2+256)&1023]/2+64; + + setborder(0); + cglenzinit(); + cmatrix_yxz(rx,ry,rz,matrix); + csetmatrix(matrix,0,0,zp); + points2[0]=0; crotlist(points2,cubepoints); + points3[0]=0; cprojlist((long *)points3,points2); + points3[0]+=8; + for(a=0;a<8*8;a+=8) + { + x=points3[2+a+0]; + y=points3[2+a+1]; + z=points3[2+a+4]; + z+=2000; + lz=3000+2000; + x=(long)(x-lix)*lz/(long)z+lix; + y=(long)(y-liy)*lz/(long)z+liy; + points3[8*8+2+a+0]=x; + points3[8*8+2+a+1]=y; + points3[8*8+2+a+4]=3000; + } + ceasymode(0); + cclipeasypolylist(polylist,cubepolyss,(long *)points3); + cglenzpolylist(polylist); + ceasymode(1); + cclipeasypolylist(polylist,cubepolys,(long *)points3); + cglenzpolylist(polylist); + cglenzdone(); + setborder(255); + rx+=9; ry+=10; rz+=11; + if(count<20) fadepal(pal,pal2,count*16); +} diff --git a/HARD/CUT b/HARD/CUT new file mode 100644 index 0000000..b6c5238 --- /dev/null +++ b/HARD/CUT @@ -0,0 +1,27 @@ +checkhiddenbx PROC NEAR + push si + mov ax,es:[bx] + mov si,es:[bx+2] + sub ax,es:[bx+4] + sub si,es:[bx+8+2] + imul si + push ax + push dx + mov ax,es:[bx+2] + mov si,es:[bx] + sub ax,es:[bx+4+2] + sub si,es:[bx+8] + imul si + pop cx + pop si + sub ax,si + sbb dx,cx + pop si + cmp dx,0 + jl @@1 + clc + ret +@@1: stc + ret +checkhiddenbx ENDP + diff --git a/HARD/DOC b/HARD/DOC new file mode 100644 index 0000000..f18723d --- /dev/null +++ b/HARD/DOC @@ -0,0 +1,34 @@ +pointlist: +word points in list +word - +dword x,y,z +... + +projectedpointlist: +word points in list +word - +. +word sx 0 +word sy 2 +word fl 4 +word - 6 +dword z 8 +word x 12 ;these could overflow :-( since the actual ones are 32 bits +word y 14 ;-"- + +polygroup: +word sides (0=end) +word color +word x,y +... + +edgelist: +word edges +word - +. +word v1,v2,f,0 f&8000:hidden edge + +hline list: +word starty +... +word x1(-32767=end),x2 diff --git a/HARD/DOLINE.C b/HARD/DOLINE.C new file mode 100644 index 0000000..4aabd5f --- /dev/null +++ b/HARD/DOLINE.C @@ -0,0 +1,89 @@ +// create code for line blitter + +#include + +char *vram=(char *)0xa0000000L; + +FILE *out; + + +void line(int x1,int y1,int x2,int y2) +{ + int xd=x2-x1; + int yd=y2-y1; + int a,d,x,y; + memset(vram,0,16*320); + if(xd>yd) + { + d=-xd/2; + while(x10) + { + d-=xd; + y1++; + } + } + } + else + { + d=-yd/2; + while(x10) + { + d-=yd; + x1++; + } + } + } + //vram[x2+y2*320]=1; + for(y=0;y<16;y++) for(x=0;x<16;x++) if(vram[x+y*320]) + { + if(vram[x+y*320+1]) + { + fprintf(out,"mov es:[di+%i],ax\n",x+y*320); + vram[x+y*320]=vram[x+y*320+1]=0; + } + else + { + fprintf(out,"mov es:[di+%i],al\n",x+y*320); + vram[x+y*320]=0; + } + } +} + +main() +{ + int x,y; + _asm mov ax,13h + _asm int 10h + out=fopen("lineblit.inc","wt"); + fprintf(out,";LineBlitter core - created by doline.c\n"); + fprintf(out,"lblt_table LABEL WORD\n"); + for(x=0;x<16;x++) + { + for(y=0;y<16;y++) + { + fprintf(out,"dw OFFSET lblt_%i_%i\n",x,y); + } + } + for(x=0;x<16;x++) + { + for(y=0;y<16;y++) + { + fprintf(out,"lblt_%i_%i:\n",x,y); + line(0,0,x,y); + fprintf(out,"ret\n",x,y); + } + } + fclose(out); + _asm mov ax,3h + _asm int 10h +} diff --git a/HARD/DOLINE.EXE b/HARD/DOLINE.EXE new file mode 100644 index 0000000..ed9e201 Binary files /dev/null and b/HARD/DOLINE.EXE differ diff --git a/HARD/DP_PREFS b/HARD/DP_PREFS new file mode 100644 index 0000000..c6cf04c Binary files /dev/null and b/HARD/DP_PREFS differ diff --git a/HARD/EDGE.BBK b/HARD/EDGE.BBK new file mode 100644 index 0000000..299843c --- /dev/null +++ b/HARD/EDGE.BBK @@ -0,0 +1,176 @@ +#include +#include + +char far *vram=(char far *)0xa0000000L; + +int edge[256]; + +int ep[200]; +int ec; +struct +{ + int c,next; + int y1,y2; + long x1,x; // x used, x1=original + long dx; +} e[256]; + +int list[256],listc; + +unsigned draworders[32000],dop; + +void pass3(void) +{ + unsigned int u,ut,i,c; + for(i=c=u=0;i=0 && x=e[i].y2) continue; + if(k!=j) list[k]=i; + k++; + x=e[i].x; + if(lx==x) draworders[dop-1]^=e[i].c; + else + { + draworders[dop++]=y*320+(lx=(e[i].x>>16)); + draworders[dop++]=e[i].c; + } + //vram[(e[i].x>>16)+y*320]=k; // e[i].c; + e[i].x+=e[i].dx; + } + listc=k; + } + printf("%i\n",dop); +} + +void pass1(int *edge) +{ + int dy,y1,y2,x1,x2,a; + ec=1; memset(ep,0,200*2); + while(*edge!=0x8000) + { + e[ec].c=edge[0]; + y1=edge[3]; + y2=edge[5]; + if(y1>y2) + { + x1=y1; y1=y2; y2=x1; // y1<=>y2 + x1=edge[4]; + x2=edge[2]; + } + else + { + x1=edge[2]; + x2=edge[4]; + } + e[ec].x1=(long)x1<<16; + e[ec].dx=((long)(x2-x1)<<16)/(y2-y1); + // if y1<0 clip + e[ec].y1=y1; + e[ec].y2=y2; + if(a=ep[y1]) + { // add + ep[y1]=ec; + e[ec].next=a; + } + else + { // first + ep[y1]=ec; + e[ec].next=0; + } + #if 0 + _setcolor(8); + _moveto(0,y1); + _lineto(319,y1); + _setcolor(15); + _setpixel(x1,y1); + #endif + ec++; + edge+=6; + } +} + +main() +{ + int a,b,c,x,y; + _setvideomode(_MRES256COLOR); + x=100; y=100; for(a=0;a<60;a++) rand(); + for(a=b=0;a<8;a++) + { + edge[b++]=2; // color + b++; + edge[b++]=x; // X1 + edge[b++]=y; // Y1 + x=edge[b++]=rand()%320; // X2 + y=edge[b++]=rand()%200; // Y2 + } + edge[b++]=2; // color + b++; + edge[b++]=x; // X1 + edge[b++]=y; // Y1 + edge[b++]=100; // X2 + edge[b++]=100; // Y2 + edge[b++]=0x8000; // end of list + #if 0 + _setcolor(8); + for(b=0;edge[b]!=0x8000;b+=6) + { + _moveto(edge[b+2],edge[b+3]); + _lineto(edge[b+4],edge[b+5]); + } + #endif + pass1(edge); + //getch(); + pass2(); + getch(); + pass3(); + getch(); + _setvideomode(_DEFAULTMODE); +} diff --git a/HARD/EDGE.C b/HARD/EDGE.C new file mode 100644 index 0000000..9129005 --- /dev/null +++ b/HARD/EDGE.C @@ -0,0 +1,159 @@ +#include +#include + +char far *vram=(char far *)0xa0000000L; + +int edge[512]; + +int ep[200]; +int ec; +struct +{ + int c,next; + int y1,y2; + long x1,x; // x used, x1=original + long dx; +} e[256]; + +int list[256],listc; + +unsigned draworders[32000],dop; + +void pass3(void) +{ + unsigned int u,ut,i,c; + for(i=c=u=0;i=0 && x=e[i].y2) continue; + if(k!=j) list[k]=i; + k++; + x=e[i].x; + if(lx==x) draworders[dop-1]^=e[i].c; + else + { + draworders[dop++]=y*320+(lx=(e[i].x>>16)); + draworders[dop++]=e[i].c; + } + vram[(e[i].x>>16)+y*320]=e[i].c; + e[i].x+=e[i].dx; + } + listc=k; + } +} + +void pass1(int *edge) +{ + int dy,y1,y2,x1,x2,a; + ec=1; memset(ep,0,200*2); + while(*edge!=0x8000) + { + e[ec].c=edge[0]; + y1=edge[3]; + y2=edge[5]; + if(y1>y2) + { + x1=y1; y1=y2; y2=x1; // y1<=>y2 + x1=edge[4]; + x2=edge[2]; + } + else + { + x1=edge[2]; + x2=edge[4]; + } + e[ec].x1=(long)x1<<16; + e[ec].dx=((long)(x2-x1)<<16)/(y2-y1); + // if y1<0 clip + e[ec].y1=y1; + e[ec].y2=y2; + if(a=ep[y1]) + { // add + ep[y1]=ec; + e[ec].next=a; + } + else + { // first + ep[y1]=ec; + e[ec].next=0; + } + ec++; + edge+=6; + } +} + +main() +{ + int a,b,c,x,y; + _setvideomode(_MRES256COLOR); + for(a=0;a<60;a++) rand(); + b=0; + for(c=1;c<=4;c<<=1) + { + x=100+c*10; y=100+c*10; + for(a=0;a<8;a++) + { + edge[b++]=c; // color + b++; + edge[b++]=x; // X1 + edge[b++]=y; // Y1 + x=edge[b++]=rand()%320; // X2 + y=edge[b++]=rand()%200; // Y2 + } + edge[b++]=c; // color + b++; + edge[b++]=x; // X1 + edge[b++]=y; // Y1 + edge[b++]=100+c*10; // X2 + edge[b++]=100+c*10; // Y2 + } + edge[b++]=0x8000; // end of list + + #if 0 + _setcolor(8); + for(b=0;edge[b]!=0x8000;b+=6) + { + _moveto(edge[b+2],edge[b+3]); + _lineto(edge[b+4],edge[b+5]); + } + #endif + pass1(edge); + pass2(); + getch(); + pass3(); + getch(); + _setvideomode(_DEFAULTMODE); +} diff --git a/HARD/EDGE.EXE b/HARD/EDGE.EXE new file mode 100644 index 0000000..a2399eb Binary files /dev/null and b/HARD/EDGE.EXE differ diff --git a/HARD/FCKOE3.PAL b/HARD/FCKOE3.PAL new file mode 100644 index 0000000..6ce42d6 Binary files /dev/null and b/HARD/FCKOE3.PAL differ diff --git a/HARD/FCKOE3.U b/HARD/FCKOE3.U new file mode 100644 index 0000000..e4c3af5 Binary files /dev/null and b/HARD/FCKOE3.U differ diff --git a/HARD/FCLOGOS.LBM b/HARD/FCLOGOS.LBM new file mode 100644 index 0000000..601ce59 Binary files /dev/null and b/HARD/FCLOGOS.LBM differ diff --git a/HARD/FCRZ.U b/HARD/FCRZ.U new file mode 100644 index 0000000..ede0ed8 Binary files /dev/null and b/HARD/FCRZ.U differ diff --git a/HARD/GL10.LIB b/HARD/GL10.LIB new file mode 100644 index 0000000..50c1b17 Binary files /dev/null and b/HARD/GL10.LIB differ diff --git a/HARD/GMAIN.C b/HARD/GMAIN.C new file mode 100644 index 0000000..ff04850 --- /dev/null +++ b/HARD/GMAIN.C @@ -0,0 +1,394 @@ +#include +#include +#include +#include +#include + +char far *vram=(char far *)0xa0000000L; + +extern char lightshift; + +extern int _ndebug1; + +extern char asmtestmode; + +extern int csetmatrix(int *,long,long,long); +extern int crotlist(long *,long *); +extern int cclipedges(int *,int *,long *); // modifies given point list +extern int cprojlist(long *,long *); +extern int cdrawpolylist(int *); +extern int cmatrix_yxz(int,int,int,int *); +extern int cpolylist(int *polylist,int *polys,int *edges,long *points3); +extern int ceasypolylist(int *polylist,int *polys,long *points3); + +long cubepoints[]={8, +-666,-666,-666, +666,-666,-666, +666,666,-666, +-666,666,-666, +-666,-666,666, +666,-666,666, +666,666,666, +-666,666,666 +}; +int cubeepolys[]={ +4,0x4002,0,1,2,3, +4,0x4004,4,5,6,7, +4,0x4006,0,1,5,4, +4,0x4008,1,2,6,5, +4,0x4003,2,3,7,6, +4,0x4005,3,0,4,7, +0}; + +long points[64]={14, +-1000,-1000,-1000, +1000,-1000,-1000, +1000,1000,-1000, +-1000,1000,-1000, +-1000,-1000,1000, +1000,-1000,1000, +1000,1000,1000, +-1000,1000,1000, +0,0,-1700, +0,0,1700, +1700,0,0, +-1700,0,0, +0,1700,0, +0,-1700,0}; +long pointsb[64]={14, +-600,-600,-600, +600,-600,-600, +600,600,-600, +-600,600,-600, +-600,-600,600, +600,-600,600, +600,600,600, +-600,600,600, +0,0,-900, +0,0,900, +900,0,0, +-900,0,0, +0,900,0, +0,-900,0}; +long points2[256]; +int points3[256*2]; +int edges[64]={12,0, +0,1,0,0, +1,2,0,0, +2,3,0,0, +3,0,0,0, +4,5,0,0, // 4 +5,6,0,0, +6,7,0,0, +7,4,0,0, +0,4,0,0, // 8 +1,5,0,0, +2,6,0,0, +3,7,0,0}; +int edges2[64]; +int polys[64]={ +4,0x4010,0,1,2,3, +4,0x4008,0,8,4,9, +4,0x4010,1,9,5,10, +4,0x4020,2,10,6,11, +4,0x4040,3,11,7,12, +4,0x4080,4,5,6,7, +0}; +int epolys[]={ +3,0x4008,0,1,8, +3,0x4010,1,2,8, +3,0x4018,2,3,8, +3,0x4020,3,0,8, + +3,0x4028,2,1,10, +3,0x4030,1,5,10, +3,0x4038,5,6,10, +3,0x4040,6,2,10, + +3,0x4048,2,6,12, +3,0x4050,6,7,12, +3,0x4058,7,3,12, +3,0x4060,3,2,12, + +3,0x4068,0,3,11, +3,0x4070,3,7,11, +3,0x4078,7,4,11, +3,0x4080,4,0,11, + +3,0x4088,5,1,13, +3,0x4090,1,0,13, +3,0x4098,0,4,13, +3,0x40a0,4,5,13, + +3,0x40a8,5,4,9, +3,0x40b0,4,7,9, +3,0x40b8,7,6,9, +3,0x40c0,6,5,9, + +0}; +int epolys1[]={ +3,0x4008,0,1,8, +3,0x4010,1,2,8, +3,0x4018,2,3,8, +3,0x4020,3,0,8, +/* +3,0x4028,2,1,10, +3,0x4030,1,5,10, +3,0x4038,5,6,10, +3,0x4040,6,2,10, +*/ +/*3,0x4048,2,6,12,*/ +/*3,0x4050,6,7,12,*/ +3,0x4058,7,3,12, +3,0x4060,3,2,12, + +3,0x4068,0,3,11, +3,0x4070,3,7,11, +3,0x4078,7,4,11, +3,0x4080,4,0,11, + +/*3,0x4088,5,1,13,*/ +3,0x4090,1,0,13, +3,0x4098,0,4,13, +/*3,0x40a0,4,5,13,*/ +/* +3,0x40a8,5,4,9, +3,0x40b0,4,7,9, +3,0x40b8,7,6,9, +3,0x40c0,6,5,9, +*/ +0}; +int epolys2[]={ +/* +3,0x4008,0,1,8, +3,0x4010,1,2,8, +3,0x4018,2,3,8, +3,0x4020,3,0,8, +*/ +3,0x4028,2,1,10, +3,0x4030,1,5,10, +3,0x4038,5,6,10, +3,0x4040,6,2,10, + +3,0x4048,2,6,12, +3,0x4050,6,7,12, +/*3,0x4058,7,3,12,*/ +/*3,0x4060,3,2,12,*/ +/* +3,0x4068,0,3,11, +3,0x4070,3,7,11, +3,0x4078,7,4,11, +3,0x4080,4,0,11, +*/ +3,0x4088,5,1,13, +/*3,0x4090,1,0,13,*/ +/*3,0x4098,0,4,13,*/ +3,0x40a0,4,5,13, + +3,0x40a8,5,4,9, +3,0x40b0,4,7,9, +3,0x40b8,7,6,9, +3,0x40c0,6,5,9, + +0}; +int epolysb[]={ +3,0x4004,0,1,8, +3,0x4002,1,2,8, +3,0x4004,2,3,8, +3,0x4002,3,0,8, + +3,0x4004,2,1,10, +3,0x4002,1,5,10, +3,0x4004,5,6,10, +3,0x4002,6,2,10, + +3,0x4004,2,6,12, +3,0x4002,6,7,12, +3,0x4004,7,3,12, +3,0x4002,3,2,12, + +3,0x4004,0,3,11, +3,0x4002,3,7,11, +3,0x4004,7,4,11, +3,0x4002,4,0,11, + +3,0x4004,5,1,13, +3,0x4002,1,0,13, +3,0x4004,0,4,13, +3,0x4002,4,5,13, + +3,0x4004,5,4,9, +3,0x4002,4,7,9, +3,0x4004,7,6,9, +3,0x4002,6,5,9, + +0}; +int polylist[256]; +int matrix[9]; + +int testlist[]={ +3,16, 190,100, 90,50, 110,150, +3,20, 10,100, 90,50, 99,150, +0}; + +main() +{ + int a,b,c,x,y,rx,ry,rz,n=8,p1,p2,r,g,zpos=7000; + testasm(); + //initnewgroup(); + outp(0x3c8,0); + for(a=0;a<64;a++) + { + r=g=b=0; + c=a&31; + r=16+c; + g=c*2; + b=c; + if(a&0x20) r+=20; g+=20; b+=20; + /* + if(a&0x01) { r+=40; } + if(a&0x02) { g+=40; r+=40; b+=40; } + if(a&0x04) { r+=0; } + if(a&0x08) { g+=10; r+=10; b+=10; } + if(a&0x10) { b+=40; } + if(a&0x20) { g+=40; r+=40; b+=40; } + if(a&0x40) { b+=0; } + if(a&0x80) { g+=10; r+=10; b+=10; } + r=r*4/6; + g=g*4/6; + b=b*4/6; + */ + if(r>63) r=63; + if(g>63) g=63; + if(b>63) b=63; + r=g=b=0; + outp(0x3c9,r); + outp(0x3c9,g); + outp(0x3c9,b); + } + for(a=0;a<256;a++) vram[a]=a; + lightshift=8; + rx=ry=rz=0; + for(;;) + { + if(kbhit()) + { + a=getch(); + if(a==27) break; + if(a=='l') lightshift=2; + if(a=='+') zpos+=200; + if(a=='-') zpos-=200; + if(a=='<') lightshift--; + if(a=='>') lightshift++; + if(a=='t') asmtestmode=1; + if(a=='c') { if(zpos==3200) { lightshift=8; zpos=7000; } else { zpos=3200; lightshift=11; } } + if(a=='8') ry-=16; + if(a=='2') ry+=16; + if(a=='4') rz-=16; + if(a=='6') rz+=16; + } + asm(); + setborder(1); + //rx+=16; ry+=9; rz+=7; + rx+=32; ry+=8; + rx%=3600; ry%=3600; rz%=3600; + //if(rz==0) printf("."); + /* + a=0; + while(polylist[a]) + { + a+=polylist[a]*2+2; + } + polylist[a++]=4; + polylist[a++]=19; + polylist[a++]=160-60; polylist[a++]=100-40; + polylist[a++]=160+60; polylist[a++]=100-40; + polylist[a++]=160+60; polylist[a++]=100+40; + polylist[a++]=160-60; polylist[a++]=100+40; + polylist[a++]=0; + */ + cglenzinit(); + + cmatrix_yxz(rx,ry,rz,matrix); + csetmatrix(matrix,0,0,zpos); + points2[0]=0; crotlist(points2,points); + //cclipedges(edges2,edges,points2); + points3[0]=0; cprojlist((long *)points3,points2); + //cpolylist(polylist,polys,edges,points3); + ceasypolylist(polylist,epolys,points3); + + cglenzpolylist(polylist); +/* + cmatrix_yxz(rx,-450,900+ry,matrix); + csetmatrix(matrix,0,0,zpos); + points2[0]=0; crotlist(points2,points); + //cclipedges(edges2,edges,points2); + points3[0]=0; cprojlist((long *)points3,points2); + //cpolylist(polylist,polys,edges,points3); + ceasypolylist(polylist,epolys1,points3); + + cglenzpolylist(polylist); + + cmatrix_yxz(-rx,-450,900+ry,matrix); + csetmatrix(matrix,0,0,zpos); + points2[0]=0; crotlist(points2,points); + //cclipedges(edges2,edges,points2); + points3[0]=0; cprojlist((long *)points3,points2); + //cpolylist(polylist,polys,edges,points3); + ceasypolylist(polylist,epolys2,points3); + + cglenzpolylist(polylist); +*/ + + cmatrix_yxz(-rx,-ry,-rz,matrix); + csetmatrix(matrix,0,0,zpos); + points2[0]=0; crotlist(points2,pointsb); + //cclipedges(edges2,edges,points2); + points3[0]=0; cprojlist((long *)points3,points2); + //cpolylist(polylist,polys,edges,points3); + ceasypolylist(polylist,epolysb,points3); + + cglenzpolylist(polylist); + +// //cmatrix_yxz(rx*2,-ry,rz*2,matrix); +// //csetmatrix(matrix,0,0,zpos); +// //points2[0]=0; crotlist(points2,cubepoints); +// //points3[0]=0; cprojlist((long *)points3,points2); +// //ceasypolylist(polylist,cubeepolys,points3); + + cglenzdone(); + //cdrawpolylist(polylist); + //cdrawpolylist(testlist); + //setborder(3); + //drawnewgroup(); + #if 0 + n=edges[0]; + for(a=2,b=0;b link.tmp + @echo $(objs2) + >> link.tmp + @echo $(odata) ..\dis\disc.obj,b.exe,nul; >> link.tmp + link /E @link.tmp + +bdo.exe : bdo.c + cl /QC /AL bdo.c + +odata : bdo.exe + bdo + doobj _dots1.tmp _dots1 _dots1.obj + doobj _dots2.tmp _dots2 _dots2.obj + doobj _dots3.tmp _dots3 _dots3.obj + doobj _dots4.tmp _dots4 _dots4.obj + del *.tmp + +b.c : bp.c + +vec.asm : vnew.asm vmath.asm vdata.asm vasm.inc + +edge.exe : edge.c + cl /qc /AL edge.c + \ No newline at end of file diff --git a/HARD/NEW.9 b/HARD/NEW.9 new file mode 100644 index 0000000..9fb2702 --- /dev/null +++ b/HARD/NEW.9 @@ -0,0 +1,306 @@ +;!!!!!! TRANSPARENT NEW COPPER !!!!!! + +FREELINE equ 200 + +PUBLIC _newsinus,_newsinusx +_newsinus dw 512 dup(0) +_newsinusx dw -1 + +newgroup PROC NEAR + ;hline list in gs:si + push ds + mov ax,SEG newdata + mov ds,ax + mov bx,gs:[si] + add si,2 +@@1: mov ax,gs:[si] + add si,2 + cmp ax,-32767 + je @@2 + mov dx,gs:[si] + add si,2 + cmp bx,7eh + jne @@z +@@z: push bx + ;hline ax..dx,bx with gs:color + cmp ax,dx + jle @@3 + xchg ax,dx +@@3: ; + mov cx,cs:_newsinusx + cmp cx,-1 + je @@nosin + push bx + add bx,cx + shl bx,1 + add ax,cs:_newsinus[bx] + add dx,cs:_newsinus[bx] + pop bx +@@nosin:; + cmp ax,0 + jge @@11 + xor ax,ax + cmp dx,0 + jl @@0 +@@11: cmp dx,320 + jle @@12 + mov dx,320 + cmp ax,320 + jg @@0 +@@12: push dx + shl bx,1 + mov dx,ds:[bx] + mov bp,ds:[FREELINE*2] + mov ds:[bx],bp + mov ds:[FREELINE*2],dx + mov bx,dx + ;modify list bx=>bp (edx/hi=last color) + ;copy blocks < hline start + xor edx,edx +@@b: mov ecx,ds:[bx] + cmp cx,ax + jae @@a ;[bx] bigger.. + add bx,4 + mov ds:[bp],ecx + add bp,4 + jmp @@b +@@a: ;add hline start + jne @@aa + mov ds:[bp],ax + mov ax,gs:color + ror ecx,16 + xor ax,cx + mov ds:[bp+2],ax + add bp,4 + add bx,4 + mov ecx,ds:[bx] + pop ax + jmp @@d +@@aa: rol eax,16 + mov ax,gs:color + rol eax,16 + mov ds:[bp],eax + add bp,4 + ;copy blocks < hline end + pop ax +@@d: cmp cx,ax + jae @@c + add bx,4 + mov ds:[bp],ecx + add bp,4 + mov edx,ecx + mov ecx,ds:[bx] + jmp @@d +@@c: ;add hline end + jne @@ca + mov ds:[bp],ax + mov ax,gs:color + ror ecx,16 + xor ax,cx + mov ds:[bp+2],ax + add bp,4 + add bx,4 + mov ecx,ds:[bx] + jmp @@f +@@ca: mov ds:[bp],ax + mov ax,gs:color + mov ds:[bp+2],ax + add bp,4 + ;copy rest of the list +@@f: cmp cx,32767 + je @@e + add bx,4 + mov ds:[bp],ecx + add bp,4 + mov ecx,ds:[bx] + jmp @@f +@@e: ;last + mov ds:[bp],ecx +@@0: pop bx + inc bx + jmp @@1 +@@2: pop ds + ret +newgroup ENDP + +grouppage dw 1024 + +PUBLIC _initnewgroup +_initnewgroup PROC FAR + CBEG + mov ax,SEG newdata + mov ds,ax + mov dx,cs:grouppage + xor dx,32768 + mov cs:grouppage,dx + mov cx,201 + xor bx,bx +@@2: mov ax,ds:[bx] + mov ds:[bx],dx + mov ds:[bx+256*2],ax + add dx,128 + add bx,2 + loop @@2 + mov cx,200 + mov eax,32767 + mov bx,cs:grouppage +@@1: mov ds:[bx],eax + add bx,128 + loop @@1 + CEND +_initnewgroup ENDP + +ALIGN 2 +dng_bgcolor dw 0 +dng_rowbase dw 0 +dng_random dw 0 + +PUBLIC _drawnewgroup +_drawnewgroup PROC FAR + CBEG + LOADDS + mov dx,3c4h + mov ax,0f02h + out dx,ax + mov es,ds:vram + mov ax,SEG newdata + mov gs,ax + mov cx,200 + xor bx,bx + xor di,di +@@3: push bx + push cx + push di + shl bx,1 + mov si,gs:[bx] + mov di,gs:[bx+512] ;last time row (for sorting out differences) + mov bp,32768 + ;si=thistime + ;di=lasttime + ;dl=thiscolor + ;dh=lastcolor + ;cx=thisX + ;bx=lastX + ;ax=X + ;bp=tmpdest + mov dx,cs:dng_bgcolor + mov dh,dl + xor ax,ax + mov cx,gs:[si] + mov bx,gs:[di] +@@1: cmp bx,cx + je @@10 + jl @@2 + ;cx..bx + cmp dl,dh + je @@5 + ;ax..cx color dl + mov gs:[bp],ax + mov gs:[bp+2],cx + add bp,6 + mov gs:[bp+4-6],dx +@@5: mov ax,cx + xor dl,gs:[si+2] + add si,4 + mov cx,gs:[si] + jmp @@1 +@@10: ;bx=cx + cmp bx,32767 + je @@7 + cmp dl,dh + je @@11 + ;ax..bx color dl + mov gs:[bp],ax + mov gs:[bp+2],bx + add bp,6 + mov gs:[bp+4-6],dx +@@11: mov ax,bx + xor dh,gs:[di+2] + add di,4 + mov bx,gs:[di] + xor dl,gs:[si+2] + add si,4 + mov cx,gs:[si] + jmp @@1 +@@2: ;bx..cx + cmp dl,dh + je @@4 + ;ax..bx color dl + mov gs:[bp],ax + mov gs:[bp+2],bx + mov gs:[bp+4],dx + add bp,6 +@@4: mov ax,bx + xor dh,gs:[di+2] + add di,4 + mov bx,gs:[di] + jmp @@1 +@@7: pop di + ;this line data in 8000h..bp + mov si,32768 + cmp si,bp + je @@8 +@@6: mov edx,gs:[si] + mov bx,dx + shr edx,16 + mov ch,gs:[si+4] + ; + mov cl,bl + and cl,3 + mov al,00fh + rol al,cl + mov cl,dl + and cl,3 + mov ah,0f0h + rol ah,cl + + shr bx,2 + shr dx,2 + cmp bx,dx + jne @@h1 + + and al,ah + mov dx,3c5h + out dx,al + mov es:[di+bx],ch + jmp @@h0 + +@@h1: inc bx + cmp bx,dx + jne @@h2 + mov dx,3c5h + out dx,al + mov es:[di+bx-1],ch + mov al,ah + out dx,al + mov es:[di+bx],ch + jmp @@h0 + +@@h2: push di + mov cl,dl + sub cl,bl + add di,bx + mov dx,3c5h + out dx,al + mov es:[di-1],ch + mov al,0fh + out dx,al + mov al,ch + xor ch,ch + rep stosb + xchg al,ah + out dx,al + mov es:[di],ah + pop di +@@h0: ; + add si,6 + cmp si,bp + jb @@6 +@@8: pop cx + pop bx + add di,80 + inc bx + loop @@3 + CEND +_drawnewgroup ENDP + diff --git a/HARD/PIC001.LBM b/HARD/PIC001.LBM new file mode 100644 index 0000000..5d62108 Binary files /dev/null and b/HARD/PIC001.LBM differ diff --git a/HARD/SIN1024.INC b/HARD/SIN1024.INC new file mode 100644 index 0000000..6614fbe --- /dev/null +++ b/HARD/SIN1024.INC @@ -0,0 +1,33 @@ +_sin1024 LABEL WORD +dw 0,1,3,4,6,7,9,10,12,14,15,17,18,20,21,23,25,26,28,29,31,32,34,36,37,39,40,42,43,45,46,48 +dw 49,51,53,54,56,57,59,60,62,63,65,66,68,69,71,72,74,75,77,78,80,81,83,84,86,87,89,90,92,93,95,96 +dw 97,99,100,102,103,105,106,108,109,110,112,113,115,116,117,119,120,122,123,124,126,127,128,130,131,132,134,135,136,138,139,140 +dw 142,143,144,146,147,148,149,151,152,153,155,156,157,158,159,161,162,163,164,166,167,168,169,170,171,173,174,175,176,177,178,179 +dw 181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,211 +dw 212,213,214,215,216,217,217,218,219,220,221,221,222,223,224,225,225,226,227,227,228,229,230,230,231,232,232,233,234,234,235,235 +dw 236,237,237,238,238,239,239,240,241,241,242,242,243,243,244,244,244,245,245,246,246,247,247,247,248,248,249,249,249,250,250,250 +dw 251,251,251,251,252,252,252,252,253,253,253,253,254,254,254,254,254,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255 +dw 256,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,254,254,254,254,253,253,253,253,252,252,252,252,251,251,251 +dw 251,250,250,250,249,249,249,248,248,247,247,247,246,246,245,245,244,244,244,243,243,242,242,241,241,240,239,239,238,238,237,237 +dw 236,235,235,234,234,233,232,232,231,230,230,229,228,227,227,226,225,225,224,223,222,221,221,220,219,218,217,217,216,215,214,213 +dw 212,211,211,210,209,208,207,206,205,204,203,202,201,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182 +dw 181,179,178,177,176,175,174,173,171,170,169,168,167,166,164,163,162,161,159,158,157,156,155,153,152,151,149,148,147,146,144,143 +dw 142,140,139,138,136,135,134,132,131,130,128,127,126,124,123,122,120,119,117,116,115,113,112,110,109,108,106,105,103,102,100,99 +dw 97,96,95,93,92,90,89,87,86,84,83,81,80,78,77,75,74,72,71,69,68,66,65,63,62,60,59,57,56,54,53,51 +dw 49,48,46,45,43,42,40,39,37,36,34,32,31,29,28,26,25,23,21,20,18,17,15,14,12,10,9,7,6,4,3,1 +dw 0,-1,-3,-4,-6,-7,-9,-10,-12,-14,-15,-17,-18,-20,-21,-23,-25,-26,-28,-29,-31,-32,-34,-36,-37,-39,-40,-42,-43,-45,-46,-48 +dw -49,-51,-53,-54,-56,-57,-59,-60,-62,-63,-65,-66,-68,-69,-71,-72,-74,-75,-77,-78,-80,-81,-83,-84,-86,-87,-89,-90,-92,-93,-95,-96 +dw -97,-99,-100,-102,-103,-105,-106,-108,-109,-110,-112,-113,-115,-116,-117,-119,-120,-122,-123,-124,-126,-127,-128,-130,-131,-132,-134,-135,-136,-138,-139,-140 +dw -142,-143,-144,-146,-147,-148,-149,-151,-152,-153,-155,-156,-157,-158,-159,-161,-162,-163,-164,-166,-167,-168,-169,-170,-171,-173,-174,-175,-176,-177,-178,-179 +dw -181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,-192,-193,-194,-195,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-211 +dw -212,-213,-214,-215,-216,-217,-217,-218,-219,-220,-221,-221,-222,-223,-224,-225,-225,-226,-227,-227,-228,-229,-230,-230,-231,-232,-232,-233,-234,-234,-235,-235 +dw -236,-237,-237,-238,-238,-239,-239,-240,-241,-241,-242,-242,-243,-243,-244,-244,-244,-245,-245,-246,-246,-247,-247,-247,-248,-248,-249,-249,-249,-250,-250,-250 +dw -251,-251,-251,-251,-252,-252,-252,-252,-253,-253,-253,-253,-254,-254,-254,-254,-254,-254,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255 +dw -256,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-254,-254,-254,-254,-254,-254,-253,-253,-253,-253,-252,-252,-252,-252,-251,-251,-251 +dw -251,-250,-250,-250,-249,-249,-249,-248,-248,-247,-247,-247,-246,-246,-245,-245,-244,-244,-244,-243,-243,-242,-242,-241,-241,-240,-239,-239,-238,-238,-237,-237 +dw -236,-235,-235,-234,-234,-233,-232,-232,-231,-230,-230,-229,-228,-227,-227,-226,-225,-225,-224,-223,-222,-221,-221,-220,-219,-218,-217,-217,-216,-215,-214,-213 +dw -212,-211,-211,-210,-209,-208,-207,-206,-205,-204,-203,-202,-201,-200,-199,-198,-197,-196,-195,-194,-193,-192,-191,-190,-189,-188,-187,-186,-185,-184,-183,-182 +dw -181,-179,-178,-177,-176,-175,-174,-173,-171,-170,-169,-168,-167,-166,-164,-163,-162,-161,-159,-158,-157,-156,-155,-153,-152,-151,-149,-148,-147,-146,-144,-143 +dw -142,-140,-139,-138,-136,-135,-134,-132,-131,-130,-128,-127,-126,-124,-123,-122,-120,-119,-117,-116,-115,-113,-112,-110,-109,-108,-106,-105,-103,-102,-100,-99 +dw -97,-96,-95,-93,-92,-90,-89,-87,-86,-84,-83,-81,-80,-78,-77,-75,-74,-72,-71,-69,-68,-66,-65,-63,-62,-60,-59,-57,-56,-54,-53,-51 +dw -49,-48,-46,-45,-43,-42,-40,-39,-37,-36,-34,-32,-31,-29,-28,-26,-25,-23,-21,-20,-18,-17,-15,-14,-12,-10,-9,-7,-6,-4,-3,-1 diff --git a/HARD/TMP b/HARD/TMP new file mode 100644 index 0000000..f563409 --- /dev/null +++ b/HARD/TMP @@ -0,0 +1 @@ +-157,-464,1030 Z:7000 LS:8 diff --git a/HARD/TMP.LNK b/HARD/TMP.LNK new file mode 100644 index 0000000..35f0e61 --- /dev/null +++ b/HARD/TMP.LNK @@ -0,0 +1,3 @@ +asm.obj vec.obj + +b.obj ba.obj + +_dots1.obj _dots2.obj _dots3.obj _dots4.obj ..\dis\disc.obj,b.exe,nul; diff --git a/HARD/V.EXE b/HARD/V.EXE new file mode 100644 index 0000000..f5625b7 Binary files /dev/null and b/HARD/V.EXE differ diff --git a/HARD/VASM.INC b/HARD/VASM.INC new file mode 100644 index 0000000..97bbe95 --- /dev/null +++ b/HARD/VASM.INC @@ -0,0 +1,98 @@ +;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ADATA.INC ±±±±±±±±±±±±±±±±±±±±±±±±±±± + +global newdata1:word + +global projxmul:dword +global projymul:dword +global projxadd:word +global projyadd:word +global projminz:dword +global projminzshr:word +global wminx:word +global wminy:word +global wmaxx:word +global wmaxy:word +global vram:word +global rowsadd:word +global truerowsadd:word +global truevram:word +global rows:word +global framerate10:word +global color:word +global color1:byte +global color2:byte +global video:dword +global borders:word + +global xadd:dword +global yadd:dword +global zadd:dword + +;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± AOBJ.INC ±±±±±±±±±±±±±±±±±±±±±±±±±±± + +vobj struc + xyz dd 3 dup(0) + matrix dw 9 dup(0) + element dd 0 +vobj ends + +;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± CINK.INC ±±±±±±±±±±±±±±±±±±±±±±±±±±± + +INT3 MACRO + int 3 + ENDM + +LOADDS MACRO + mov ax,SEG rows + mov ds,ax + ENDM + +LOADGS MACRO + mov ax,SEG rows + mov gs,ax + ENDM + +movpar MACRO reg,par ;loads parameter [par(0..)] to register [reg] + mov reg,word ptr [bp+par*2+6] + ENDM + +CBEG MACRO ;C/Assembler procedure begin + push bp + mov bp,sp + push si + push di + push ds + ENDM + +CEND MACRO ;C/Assembler procedure end + pop ds + pop di + pop si + pop bp + ret + ENDM + +setborder MACRO col + mov al,col + push ax + call _setborder + add sp,2 + ENDM + +LOCALS + +;VID.ASM +global setvmode:far +global _setborder:far +VIDINIT equ ds:video[0] +VIDSWITCH equ ds:video[4] +VIDCLEAR64 equ ds:video[8] +VIDPSET equ ds:video[12] +VIDLINE equ ds:video[16] +VIDHLINE equ ds:video[20] +VIDHGROUP equ ds:video[24] +VIDTHGROUP equ ds:video[28] +VIDPOLYGROUP equ ds:video[32] +VIDCLEAR equ ds:video[36] +VIDWAITB equ ds:video[40] +VIDNEWPOLYGROUP equ ds:video[44] diff --git a/HARD/VDATA.ASM b/HARD/VDATA.ASM new file mode 100644 index 0000000..543b504 --- /dev/null +++ b/HARD/VDATA.ASM @@ -0,0 +1,55 @@ + +data_new1 SEGMENT para public 'FARDATA' +PUBLIC newdata1 +newdata1 LABEL WORD + db 0fff0h dup(0) +data_new1 ENDS + +data_v SEGMENT para public 'DATA' + +PUBLIC rows +rows LABEL WORD + dw 512 dup(0) + +PUBLIC wminx,wminy,wmaxx,wmaxy +wminx dw 0 +wminy dw 0 +wmaxx dw 100 +wmaxy dw 100 + +PUBLIC video,vram,rowsadd,framerate10,truevram,truerowsadd +video LABEL DWORD + dd 16 dup(0) ;far offsets to vid routines +vram dw 0a2d0h +rowsadd dw 320 +truevram dw 0a000h +truerowsadd dw 320 +framerate10 dw 70 + +ALIGN 4 +PUBLIC projxmul,projymul,projxadd,projyadd,projminz,projminzshr +projxmul dd 240 +projymul dd 200 +projxadd dw 160 +projyadd dw 64 +projminz dd 512 +projminzshr dw 9 + +PUBLIC color,color1,color2 +color LABEL WORD +color1 db 0 +color2 db 0 + +ALIGN 4 +PUBLIC xadd,yadd,zadd +xadd dd 0 +yadd dd 0 +zadd dd 0 + +ALIGN 16 ;TEMPORARY WORK AREA FOR: +PUBLIC borders +borders LABEL WORD ;polygon drawing + db 8192 dup(0) +workoverflow dw 00fch + +data_v ENDS diff --git a/HARD/VEC.A b/HARD/VEC.A new file mode 100644 index 0000000..c1ae11c --- /dev/null +++ b/HARD/VEC.A @@ -0,0 +1,1601 @@ +groupheader equ 2 ;bytes to add to group offset to get MEMBERS COUNT + +globalshr equ 0 ;2 + +MAXCMD equ 10000 ;maximum num of commands done by docmd_dssi + +ALIGN 4 +curxpos dd ? +curypos dd ? +curzpos dd ? +curmatrix dw 9 dup(?) +tmpmatrix dw 9 dup(?) + dw 9 dup(?) + dw 9 dup(?) + +ALIGN 4 +objoffset dw ? +objsegment dw ? + +PUBLIC _zadd +_zadd LABEL WORD +unused dw ? +getme dw ? + +ALIGN 4 +;rotate sins/coss +rxsin dw 0 +rxcos dw 0 +rysin dw 0 +rycos dw 0 +rzsin dw 0 +rzcos dw 0 + +ALIGN 4 +projxmul dd 256 +projymul dd 256 +projminz dd 256 +projminzshr dw 8 +projxadd dw 160 +projyadd dw 80 + +addx dw 0 +addy dw 0 +addz dw 0 +addshr dw 0 +addy0 dw 0 ;temp shadow + +;rotated point data +pointadd equ 32 +pointshl equ 5 +pointnum dw 0 +ALIGN 4 +cpoint dw 32 dup(16 dup(0)) +MAXPOINT equ 512 +point dw MAXPOINT dup(16 dup(0)) ;-,-,-,flags,PX,PY,-,-, ddX,ddY,ddZ,-,- + ;+1 = out to right + ;+2 = out to left + ;+4 = out to up + ;+8 = out to down + ;+16 = behind the eye + ;PX/PY=projected + ;ddX/Y/Z are 32 bit for point vertices, + ; but only 16 bits for normal vertices +pointend dw pointadd dup('!') +PX equ 0 +PY equ 4 +PZ equ 8 +PPX equ 12 +PPY equ 14 ;PPY must be just after PPX +PFL equ 16 +PRX equ 18 +PRY equ 20 ;PRY must be just after PRX +PRFL equ 22 +PTX equ 24 +PTY equ 26 +totalhiddenflags dw 0 +groupflags dw 0 ;of polygon group +objectflags dw 0 ;of current object +polynormal dw 0 ;tmp storage + +ALIGN 2 +pointlist dw 32 dup(0) + +d3clipcut PROC NEAR + ;save bp(invisible)/bx,si,di, return dx/ax + push si + + mov cl,byte ptr ds:projminzshr + + mov esi,dword ptr ds:point[bx+PZ] + mov edx,esi + sub esi,dword ptr ds:point[bp+PZ] + sub edx,ds:projminz + xor eax,eax + shr edx,1 + rcr eax,1 + cmp esi,edx + jle dcp23 + div esi + mov esi,eax + +dcp3: mov eax,dword ptr ds:point[bp+PX] + sub eax,dword ptr ds:point[bx+PX] + imul esi + shld edx,eax,1 + mov eax,edx + add eax,dword ptr ds:point[bx+PX] + imul ds:projxmul + shrd eax,edx,cl + add ax,ds:projxadd + + push ax + + mov eax,dword ptr ds:point[bp+PY] + sub eax,dword ptr ds:point[bx+PY] + imul esi + shld edx,eax,1 + mov eax,edx + add eax,dword ptr ds:point[bx+PY] + imul ds:projymul + shrd eax,edx,cl + add ax,ds:projyadd + + pop dx + + pop si + ret + +dcp23: mov esi,16384 + jmp dcp3 +d3clipcut ENDP + +ALIGN 2 +lastindex dw 0 +clipped dw 0 + +d3clip PROC NEAR + ;ds:[si]=>points, bp=lastindex + push ds + mov ax,cs + mov ds,ax + mov ds:clipped,0 + add bp,OFFSET pointlist + mov ds:lastindex,bp + mov si,OFFSET pointlist + mov di,OFFSET polyxy + ;first dot + mov bp,ds:[si] + mov dl,-1 ;invisible + test ds:point[bp+PFL],16 + jnz dcl5 + mov dl,1 ;visible + mov eax,DWORD PTR ds:point[bp+PPX] + mov ds:[di],eax + add di,4 +dcl5: add si,2 + ;other dots +dcl1: mov bx,ds:[si] + test ds:point[bx+PFL],16 + jz dcl3 + ;invisible dot + cmp dl,-1 + je dcl4 ;last was also invisible + mov ds:clipped,1 + ;last line was visible, cut + xchg bp,bx + call d3clipcut ;points bp/bx + xchg bp,bx + mov ds:[di],dx ;x + mov ds:[di+2],ax ;y + add di,4 + mov dl,-1 + jmp dcl4 + +dcl3: ;visible dot + cmp dl,1 + je dcl6 ;last was also visible + ;last line was invisible, cut + call d3clipcut ;points bp/bx + mov ds:[di],dx ;x + mov ds:[di+2],ax ;y + add di,4 + mov dl,1 +dcl6: cmp si,ds:lastindex + je dcl2 + mov eax,DWORD PTR ds:point[bx+PPX] + mov ds:[di],eax + add di,4 + +dcl4: cmp si,ds:lastindex + je dcl2 + add si,2 + mov bp,bx + jmp dcl1 +dcl2: + sub di,OFFSET polyxy + shr di,2 + mov ds:polysides,di + mov ax,ds:clipped + pop ds + ret +d3clip ENDP + +ALIGN 4 +tmpesi dd ? +td3clipcut2 PROC NEAR + ;save bp(invisible)/bx,si,di, return edx/eax/cx(=hiddenflags) + push si + + mov cl,byte ptr ds:projminzshr + + mov esi,dword ptr ds:point[bx+PZ] + mov eax,esi + sub esi,dword ptr ds:point[bp+PZ] + sub eax,ds:projminz + cdq + shl eax,14 + div esi + mov esi,eax + +dc1p3: mov ds:tmpesi,esi + ;mov eax,16384 + ;sub eax,esi + ;imul eax + ;sar eax,14 + ;mov esi,16384 + ;sub esi,eax + ; + mov ax,word ptr ds:point[bp+PTX] + sub ax,word ptr ds:point[bx+PTX] + cwde + imul esi + sar eax,14 + add ax,word ptr ds:point[bx+PTX] + push ax ;X + mov ax,word ptr ds:point[bp+PTY] + sub ax,word ptr ds:point[bx+PTY] + cwde + imul esi + sar eax,14 + add ax,word ptr ds:point[bx+PTY] + push ax ;Y + mov esi,ds:tmpesi + + mov eax,dword ptr ds:point[bp+PX] + sub eax,dword ptr ds:point[bx+PX] + imul esi + sar eax,14 + add eax,dword ptr ds:point[bx+PX] + imul ds:projxmul + shrd eax,edx,cl + add ax,ds:projxadd + push ax + + mov eax,dword ptr ds:point[bp+PY] + sub eax,dword ptr ds:point[bx+PY] + imul esi + sar eax,14 + add eax,dword ptr ds:point[bx+PY] + imul ds:projymul + shrd eax,edx,cl + add ax,ds:projyadd + pop dx + + xor cx,cx + cmp dx,ds:WMINX + jnl dc1p41 + or cl,1 +dc1p41: cmp dx,ds:WMAXX + jng dc1p42 + or cl,2 +dc1p42: cmp ax,ds:WMINY + jnl dc1p43 + or cl,4 +dc1p43: cmp ax,ds:WMAXY + jnl dc1p44 + or cl,8 +dc1p44: + shl eax,16 + mov ax,dx + + pop dx + shl edx,16 + pop dx + + pop si + ret +td3clipcut2 ENDP + +td3clip2 PROC NEAR + ;ds:[si]=>points, bp=lastindex + push ds + mov ax,cs + mov ds,ax + mov ds:clipped,0 + add bp,OFFSET pointlist + mov ds:lastindex,bp + mov si,OFFSET pointlist + mov di,OFFSET cpoint + ;first dot + mov bp,ds:[si] + mov dl,-1 ;invisible + test ds:point[bp+PFL],16 + jnz dc1l5 + mov dl,1 ;visible + mov eax,DWORD PTR ds:point[bp+PPX] + mov ds:[di+PPX],eax + mov eax,DWORD PTR ds:point[bp+PTX] + mov ds:[di+PTX],eax + mov eax,DWORD PTR ds:point[bp+PZ] + mov ds:[di+PZ],eax + mov ax,ds:point[bp+PFL] + mov ds:[di+PFL],ax + add di,pointadd +dc1l5: add si,2 + ;other dots +dc1l1: mov bx,ds:[si] + test ds:point[bx+PFL],16 + jz dc1l3 + ;invisible dot + cmp dl,-1 + je dc1l4 ;last was also invisible + mov ds:clipped,1 + ;last line was visible, cut + xchg bp,bx + call td3clipcut2 ;points bp/bx + mov ds:[di+PPX],eax + mov ds:[di+PTX],edx + mov ds:[di+PFL],cx + mov eax,cs:projminz + mov ds:[di+PZ],eax + xchg bp,bx + add di,pointadd + mov dl,-1 + jmp dc1l4 + +dc1l3: ;visible dot + cmp dl,1 + je dc1l6 ;last was also visible + ;last line was invisible, cut + call td3clipcut2 ;points bp/bx + mov ds:[di+PPX],eax + mov ds:[di+PTX],edx + mov ds:[di+PFL],cx + mov eax,cs:projminz + mov ds:[di+PZ],eax + add di,pointadd + mov dl,1 +dc1l6: cmp si,ds:lastindex + je dc1l2 + mov eax,DWORD PTR ds:point[bx+PPX] + mov ds:[di+PPX],eax + mov eax,DWORD PTR ds:point[bx+PZ] + mov ds:[di+PZ],eax + mov eax,DWORD PTR ds:point[bx+PTX] + mov ds:[di+PTX],eax + mov ax,ds:point[bx+PFL] + mov ds:[di+PFL],ax + add di,pointadd + +dc1l4: cmp si,ds:lastindex + je dc1l2 + add si,2 + mov bp,bx + jmp dc1l1 +dc1l2: + sub di,OFFSET cpoint + shr di,pointshl + mov ds:polysides,di + mov ax,ds:clipped + pop ds + ret +td3clip2 ENDP + +td3loadbp PROC NEAR + mov eax,dword ptr ds:cpoint[bp+PPX] + mov ecx,dword ptr ds:cpoint[bp+PZ] + mov edx,dword ptr ds:cpoint[bp+PTX] + ret +td3loadbp ENDP + +td3storebx PROC NEAR + mov ds:[di],eax + mov ds:[POLYTXY+di],edx + mov ds:[POLYZ+di],ecx + add di,4 + ret +td3storebx ENDP + +td3clipbx PROC NEAR + ;bx=end to be clipped + ;bp=other end + ;return: eax=y/x + push si + push di + mov cx,16384 ;delta + mov si,ds:cpoint[bx+PFL] +td3k0: test si,1 + jz td3k4 + ;xmaxx + test ds:cpoint[bp+PFL],2 + jnz td3k9 + mov ax,ds:cpoint[bx+PPX] + mov di,ax + sub ax,ds:WMAXX + cwde + shl eax,14 + sub di,ds:cpoint[bp+PPX] + movsx edi,di + cdq + idiv edi + cmp ax,cx + jg td3k2 + mov cx,ax +td3k2: ;clip by cx (0..16383) + ;X/Y + mov eax,dword ptr ds:cpoint[bp+PPX] ;end + mov esi,dword ptr ds:cpoint[bx+PPX] ;beg + sub ax,si + imul cx + shrd ax,dx,14 + add ax,si ;x + rol eax,16 + rol esi,16 + sub ax,si + imul cx + shrd ax,dx,14 + add ax,si ;y + rol eax,16 ;y/x + push eax + ;Z + ;find suitable texture function + mov eax,256 + imul dword ptr ds:cpoint[bx+PZ] + idiv dword ptr ds:cpoint[bp+PZ] + mov si,-4 +td3k8: add si,4 + cmp fs:[si],ax + ja td3k8 + mov si,fs:[si+2] + mov ax,cx + shr ax,5 + shl ax,1 + add si,ax + mov cx,fs:[si] ;si=0..511 + mov eax,dword ptr ds:cpoint[bp+PZ] ;end + mov esi,dword ptr ds:cpoint[bx+PZ] ;beg + sub eax,esi + imul cx + shrd ax,dx,9 + add eax,esi + push eax ;Z + ;texture X/Y + mov eax,dword ptr ds:cpoint[bp+PTX] ;end + mov esi,dword ptr ds:cpoint[bx+PTX] ;beg + sub ax,si + imul cx + shrd ax,dx,9 + add ax,si ;x + rol eax,16 + rol esi,16 + sub ax,si + imul cx + shrd ax,dx,9 + add ax,si ;y + rol eax,16 ;y/x + pop ecx ;z + mov edx,eax ;txy + pop eax ;xy + ; + pop di + pop si + clc + ret +td3k9: pop di + pop si + stc + ret +td3clipbx ENDP + +td3clip PROC NEAR + push ds + mov fs,cs:depthseg + mov ax,cs + mov ds,ax + mov ds:clipped,0 + mov bp,ds:polysides + shl bp,pointshl + mov ds:lastindex,bp + xor si,si + mov di,OFFSET polyxy + ;BX=beg, BP=endp + ;first dot + mov bp,si +td3l1: cmp si,ds:lastindex + jb td3l2 + sub di,OFFSET polyxy + shr di,2 + mov ds:polysides,di + pop ds + ret +td3l2: mov bx,bp + add si,pointadd + mov bp,si + cmp bp,ds:lastindex + jne td3l7 + xor bp,bp +td3l7: mov ax,ds:cpoint[PFL+bx] + and ax,not (4+8) + mov dx,ds:cpoint[PFL+bp] + and dx,not (4+8) + cmp ax,0 + je td3l5 + cmp dx,0 + je td3l4 + ;clip both ends + call td3clipbx + jc td3l91 + call td3storebx +td3l91: xchg bx,bp + call td3clipbx + jc td3l92 + call td3storebx +td3l92: xchg bx,bp + jmp td3l1 +td3l4: cmp ax,0 + je td3l5 + ;bf + call td3clipbx + jc td3l93 + call td3storebx +td3l93: call td3loadbp + jc td3l94 + call td3storebx +td3l94: jmp td3l1 +td3l5: cmp dx,0 + je td3l6 + ;ef + xchg bx,bp + call td3clipbx + jc td3l95 + call td3storebx +td3l95: xchg bx,bp + jmp td3l1 +td3l6: call td3loadbp + call td3storebx + jmp td3l1 +td3clip ENDP + +unify32 PROC NEAR + ;returns: ax,bx,cx (vector length=256) + jmp uni1 +uni2: sar eax,4 + sar ebx,4 + sar ecx,4 +uni1: cmp eax,16000 + jg uni2 + cmp eax,-16000 + jl uni2 + cmp ebx,16000 + jg uni2 + cmp ebx,-16000 + jl uni2 + cmp ecx,16000 + jg uni2 + cmp ecx,-16000 + jl uni2 + ; + push ax + push bx + push cx + imul eax + mov edi,eax + mov eax,ebx + imul eax + add edi,eax + mov eax,ecx + imul eax + add edi,eax + mov si,di + shr edi,16 + call longsqrt + cmp ax,0 + je uni3 + mov si,ax + ; + pop ax + cwd + shld dx,ax,8 + shl ax,8 + idiv si + mov cx,ax + ; + pop ax + cwd + shld dx,ax,8 + shl ax,8 + idiv si + mov bx,ax + ; + pop ax + cwd + shld dx,ax,8 + shl ax,8 + idiv si + ; + ret + +uni3: xor ax,ax + xor bx,bx + xor cx,cx + ret +unify32 ENDP + +ALIGN 2 +public _testflash,_testflasho,_testflashgo,_testflashpnt +_testflash dw 0 +_testflasho dw 0 +_testflashgo dw 0 +_testflashpnt dw 0,0 +testflashc dw 0 +flashgo dw 0 +flashgo0 dw 0 +flasher db 0 + +checkdeg MACRO reg + local l0,l1,l2 +l0: cmp reg,3600 + jb l1 + jl l2 + ;>3600 + sub reg,3600 + jmp l0 +l2: ;<0 + add reg,3600 + jmp l0 +l1: ENDM + + ALIGN 4 +rotatedx dd ? +rotatedy dd ? +rotatedz dd ? + +rotateposition PROC NEAR + mov eax,ds:[si+0] + movsx ecx,word ptr cs:[di+0] + imul ecx + shld edx,eax,17 + mov ebx,edx + + mov eax,ds:[si+4] + movsx ecx,word ptr cs:[di+2] + imul ecx + shld edx,eax,17 + add ebx,edx + + mov eax,ds:[si+8] + movsx ecx,word ptr cs:[di+4] + imul ecx + shld edx,eax,17 + add ebx,edx + + mov cs:rotatedx,ebx + + mov eax,ds:[si+0] + movsx ecx,word ptr cs:[di+6] + imul ecx + shld edx,eax,17 + mov ebx,edx + + mov eax,ds:[si+4] + movsx ecx,word ptr cs:[di+8] + imul ecx + shld edx,eax,17 + add ebx,edx + + mov eax,ds:[si+8] + movsx ecx,word ptr cs:[di+10] + imul ecx + shld edx,eax,17 + add ebx,edx + + mov cs:rotatedy,ebx + + mov eax,ds:[si+0] + movsx ecx,word ptr cs:[di+12] + imul ecx + shld edx,eax,17 + mov ebx,edx + + mov eax,ds:[si+4] + movsx ecx,word ptr cs:[di+14] + imul ecx + shld edx,eax,17 + add ebx,edx + + mov eax,ds:[si+8] + movsx ecx,word ptr cs:[di+16] + imul ecx + shld edx,eax,17 + add ebx,edx + + mov cs:rotatedz,ebx + ret +rotateposition ENDP + +objadd LABEL WORD + dw 0 + dw -1000 + dw 10000 +objrot LABEL WORD + dw 0 + dw 0 + dw 0 +ALIGN 4 +zorder dw 64 dup(0,0) + +;****NRS**** + +nxpos dd ? +nypos dd ? +nzpos dd ? +;shadow +nxspos dd ? +nyspos dd ? +nzspos dd ? +PUBLIC _cammatrix +_cammatrix dw 9 dup(?) + dw 9 dup(?) ;reverse cammatrix +nmatrix dw 9 dup(?) +np0 dw ? ;first point number under this node +npn0 dw ? ;first normal number under this node +noflags dw 0 + +tmprotx dw ? +tmproty dw ? +tmprotz dw ? + +shadow db 0 ;flag for drawing + +dofirstnrs PROC NEAR + mov ax,cs + mov ds,ax + ; + cmp dword ptr ds:_tmpxyz[0],-200000000 + je notrack + mov ax,asm_objs + mov es,ax + mov si,OFFSET _camera + mov di,OFFSET _tmpxyz + call trackcam + mov ds:_camera[18],bx + mov ds:_camera[20],ax +notrack: + ;initial rotate matrix + mov ax,ds:_camera[18] + mov ds:tmprotx,ax + mov ax,ds:_camera[20] + mov ds:tmproty,ax + mov ax,ds:_camera[22] + mov ds:tmprotz,ax + ;calc XYZ rot + mov si,OFFSET tmprotx + mov di,OFFSET tmpmatrix + call calcmatrixsep ;ds:si=src(rx,ry,rz), ds:di=dest[3 matrices] + mov ax,cs + mov es,ax + mov si,OFFSET tmpmatrix+1*18 + mov di,OFFSET tmpmatrix+0*18 + call mulmatrices ;Y*=X + mov si,OFFSET tmpmatrix+1*18 + mov di,OFFSET tmpmatrix+2*18 + call mulmatrices ;Y*=Z + mov si,OFFSET tmpmatrix+1*18 + mov cx,9 + xor bx,bx +ccam2: mov ax,cs:[si+bx] + mov cs:_cammatrix[bx+9*2],ax + add bx,2 + loop ccam2 + ; + neg ds:tmprotx + neg ds:tmproty + neg ds:tmprotz + mov si,OFFSET tmprotx + mov di,OFFSET tmpmatrix + call calcmatrixsep ;ds:si=src(rx,ry,rz), ds:di=dest[3 matrices] + ;multiply to get: Z*X*Y + mov ax,cs + mov es,ax + mov si,OFFSET tmpmatrix+2*18 + mov di,OFFSET tmpmatrix+0*18 + call mulmatrices ;Z*=X + mov si,OFFSET tmpmatrix+2*18 + mov di,OFFSET tmpmatrix+1*18 + call mulmatrices ;Z*=Y + ;move the result to nmatrix + mov si,OFFSET tmpmatrix+2*18 + mov cx,9 + xor bx,bx +ccam1: mov ax,cs:[si+bx] + mov cs:nmatrix[bx],ax + mov cs:_cammatrix[bx],ax + add bx,2 + loop ccam1 + ;calc initial camera rotation + mov eax,dword ptr ds:_camera[0] + neg eax + mov ds:nxpos,eax + mov eax,dword ptr ds:_camera[4] + neg eax + mov ds:nypos,eax + mov eax,dword ptr ds:_camera[8] + neg eax + mov ds:nzpos,eax + mov si,OFFSET nxpos + mov di,OFFSET nmatrix + call rotateposition ;si=>rotatedx,y,z + mov ebx,ds:rotatedx + mov ecx,ds:rotatedy + mov edx,ds:rotatedz + mov ds:nxpos,ebx + mov ds:nypos,ecx + mov ds:nzpos,edx + mov ds:nxspos,ebx + mov ds:nyspos,ecx + mov ds:nzspos,edx +; mov ds:addy0,cx ;for temp shadow + mov ds:noflags,0 + ;init OBJD list pointers + mov cs:oopnt,OFFSET objdoffs + mov cs:odpnt,OFFSET objdarea + ;calc horizon + cmp cs:_horizonenabled,0 + je nohorz + call calchorizon + call drawhorizon +nohorz: ;do world + mov ax,asm_objs + mov ds,ax + mov si,OFFSET _worldroot + call donrsnode + ret +dofirstnrs ENDP + +ALIGN 2 +newlight dw 9460,9460,9460 + +normallight PROC NEAR + ;ds=cs + ;bx=normal vertex number (preshifted by pointshl) + ;ret: ax=relative brightness 0..255 + mov ax,cs + mov ds,ax + mov ax,ds:point[bx+PX] + imul ds:newlight[0] + mov bp,ax + mov cx,dx + mov ax,ds:point[bx+PY] + imul ds:newlight[2] + add bp,ax + adc cx,dx + mov ax,ds:point[bx+PZ] + imul ds:newlight[4] + add bp,ax + adc cx,dx + shld cx,bp,2 + mov ax,cx + sar ax,7 + add ax,128 + ;ax=0..255 + ret +normallight ENDP + +checknormalhidden PROC NEAR + ;ds=cs + ;bx=normal vertex number,di=vertex number from tested polygon + ;^both above should be preshifted by pointshl + ;ret: carry=1=hidden + mov eax,dword ptr ds:point[di+PX] + movsx edx,word ptr ds:point[bx+PX] + imul edx + mov ebp,eax + mov ecx,edx + mov eax,dword ptr ds:point[di+PY] + movsx edx,word ptr ds:point[bx+PY] + imul edx + add ebp,eax + adc ecx,edx + mov eax,dword ptr ds:point[di+PZ] + movsx edx,word ptr ds:point[bx+PZ] + imul edx + add ebp,eax + adc ecx,edx + rcl ecx,1 ;if cx<0, carry=1=visible + cmc ;now carry=1 when invisible + ret +checknormalhidden ENDP + +ALIGN 4 +_texturexy LABEL DWORD +dd 00000000h,0000003fh,003f003fh,003f0000h +dd 00000000h,0000003fh,003f003fh,003f0000h +dd 00000000h,0000003fh,003f003fh,003f0000h +dd 00000000h,0000003fh,003f003fh,003f0000h + +nrs_poly PROC NEAR + test cs:noflags,1 + jnz nrsnewpoly + mov si,OFFSET m_oldpoly + jmp fatalexit +nrsnewpoly: ;new polys are created by OC, so some user features done by OC + ;are disabled for (minimum :-) speed gains. + sub si,2 ;point si to command + push si + ;single polygon + mov ax,ds:[si+4] + mov cs:color,ax + mov ax,ds:[si+0] + and ah,not 1 + mov byte ptr cs:groupflags,ah ;+2=always show, +4=texture, +8=dim + mov cl,al + xor ch,ch ;cx=sides + mov byte ptr cs:polysides,cl + mov ax,ds:[si+2] ;normal + mov cs:polynormal,ax + add si,6 + + ;normal vector selfhidden? (for dot/line, always visible flag should be on) + test byte ptr cs:groupflags,2 + jnz nrp15 + mov di,ds:[si] + push ds + mov ax,cs + mov ds,ax + mov bx,ds:polynormal + shl bx,pointshl + shl di,pointshl + push cx + call checknormalhidden + pop cx ;cx=polysides + jc nrp19 ;hidden by culling (pop ds also at nrp19) + pop ds + +nrp15: mov di,OFFSET polyxy + xor bp,bp + mov dx,0ff00h +nrp4: mov bx,ds:[si] + shl bx,pointshl + mov cs:pointlist[bp],bx + add bp,2 + mov al,byte ptr cs:point[bx+PFL] + and dh,al + or dl,al + mov eax,DWORD PTR cs:point[bx+PPX] + mov cs:[di],eax + add di,4 + add si,2 + loop nrp4 + test cs:groupflags,4 + jz nrp9 + ;texture + push dx + add si,2 ;pic segment + mov cx,cs:polysides + xor di,di +nrpt1: mov dx,ds:[si] + movzx ax,dh + shl eax,16 + movzx ax,dl + mov bx,cs:pointlist[di] + ;shl eax,5 + add si,2 + mov dword ptr cs:point[bx+PTX],eax + shl di,1 + mov dword ptr cs:polyxy[POLYTXY+di],eax + mov eax,dword ptr cs:point[bx+PZ] + mov dword ptr cs:polyxy[POLYZ+di],eax + shr di,1 + add di,2 + loop nrpt1 + pop dx + +nrp9: push ds + mov ax,cs + mov ds,ax + ; + ;check polygon visibility / do 3D clip if required + cmp dh,0 + jnz nrp19 ;hidden, beside screen + test cs:groupflags,4 + jnz nrp7 + test dl,16 + jz nrp2 + ;3D-clip + cmp ds:polysides,1 + je nrp19 ;hidden automaticly + mov ax,ds:pointlist[0] + mov ds:pointlist[bp],ax + call d3clip + jmp nrp2 +nrp7: test dl,31 + jz nrp2 + mov ax,ds:pointlist[0] + mov ds:pointlist[bp],ax + call td3clip2 ;clip point=>cpoint + call td3clip ;clip cpoint=>polyxy texture +nrp2: ; + ;polygon visible! + mov ax,ds:color + test ax,256+512 + jz nrp16 + push ax + mov bx,ds:polynormal + shl bx,pointshl + call normallight + pop dx + mov cl,dh + add cl,2 + shr ax,cl ;256=0..31, 512=0..15, 768=0..7 + add dx,ax + mov ds:color,dx +nrp16: jmp nrp17 ;no antialiasing + test ds:groupflags,4 + jz nrp17 + ;antialiaising + + mov eax,dword ptr ds:polyxy[POLYZ+0] + cmp eax,20000h + ja nr17d4 + cmp eax,10000h + ja nr17d3 + cmp eax,8000h + ja nr17d2 + cmp eax,4000h + ja nr17d1 + jmp nrp17 + +nr17d1: mov cl,1 + mov bx,not (8000h) + mov edx,800000h + jmp nr17d0 +nr17d2: mov cl,2 + mov bx,not (8000h+4000h) + mov edx,800080h + jmp nr17d0 +nr17d3: mov cl,3 + mov bx,not (8000h+4000h+2000h) + mov edx,8000c0h + jmp nr17d0 +nr17d4: mov cl,4 + mov bx,not (8000h+4000h+2000h+1000h) + mov edx,8000e0h + jmp nr17d0 + +nr17d0: xor si,si + mov di,cs:polysides + cmp di,0 + je nrp19 +nrp17b: mov eax,dword ptr ds:polyxy[POLYTXY+si] + shr eax,cl + and ax,bx + add eax,edx + mov dword ptr ds:polyxy[POLYTXY+si],eax + add si,4 + dec di + jnz nrp17b + ; +nrp17: call poly ;draw - tests groupflags&4 for texture + +nrp19: ;polygon invisible/done! + pop ds + pop si +nrxxx: mov dx,ds:[si] + movzx ax,dl + test dh,4 + jz nrp20 + ;textured polygon + add ax,ax + inc ax +nrp20: add ax,3 + shl ax,1 + add si,ax + ret +nrs_poly ENDP + +ALIGN 2 +npcount dw 0 +npandflag dw 0 + +overflb: jmp overfl + +ncalcpoints PROC NEAR + ;CX=count, DS:SI=pointsource + mov ax,ds + mov es,ax + mov ax,cs + mov ds,ax + mov cs:npcount,cx + mov cs:npandflag,0ffffh + mov di,ds:np0 + shl di,pointshl + add di,OFFSET point + add ds:np0,cx + ; + mov ax,cx + shl ax,pointshl + add ax,di + jc overflb + cmp ax,OFFSET pointend + jae overflb + +nrtp1: ;rotate with matrix + push si + push di + push bp + mov bp,es:[si+4] + mov di,es:[si+2] + mov si,es:[si+0] + +mtrn00: mov ax,1234h + imul si + mov bx,ax + mov cx,dx +mtrn02: mov ax,1234h + imul di + add bx,ax + adc cx,dx +mtrn04: mov ax,1234h + imul bp + add bx,ax + adc cx,dx + shld cx,bx,1 + push cx +mtrn06: mov ax,1234h + imul si + mov bx,ax + mov cx,dx +mtrn08: mov ax,1234h + imul di + add bx,ax + adc cx,dx +mtrn10: mov ax,1234h + imul bp + add bx,ax + adc cx,dx + shld cx,bx,1 + push cx +mtrn12: mov ax,1234h + imul si + mov bx,ax + mov cx,dx +mtrn14: mov ax,1234h + imul di + add bx,ax + adc cx,dx +mtrn16: mov ax,1234h + imul bp + add bx,ax + adc cx,dx + shld cx,bx,1 + pop dx + pop ax + pop bp + pop di + pop si + + mov ds:[di+PX],ax + mov ds:[di+PY],dx + ;mov ds:[di+PZ],cx + + ;project + + xor bp,bp + movsx ebx,cx ;word ptr ds:[di+PZ] + add ebx,ds:nzpos + mov dword ptr ds:[di+PZ],ebx + cmp ebx,ds:projminz + jge nprp2 + mov ebx,ds:projminz + or bp,16 +nprp2: ; + movsx eax,word ptr ds:[di+PY] + add eax,ds:nypos + mov dword ptr ds:[di+PY],eax + imul ds:projymul + idiv ebx + add ax,ds:projyadd + cmp ax,ds:WMAXY ;projymax + jng nprp41 + or bp,8 +nprp41: cmp ax,ds:WMINY ;projymin + jnl nprp42 + or bp,4 +nprp42: mov ds:[di+PPY],ax ;store Y + ; + movsx eax,word ptr ds:[di+PX] + add eax,ds:nxpos + mov dword ptr ds:[di+PX],eax + imul ds:projxmul + idiv ebx + add ax,ds:projxadd + cmp ax,ds:WMAXX ;projxmax + jng nprp43 + or bp,2 +nprp43: cmp ax,ds:WMINX ;projxmin + jnl nprp44 + or bp,1 +nprp44: mov ds:[di+PPX],ax ;store X + +nprp5: mov ds:[di+PFL],bp ;store flags, only Zbehind set for now + + ;and ds:npandflag,bp + ;next point + add si,6 + add di,pointadd + dec ds:npcount + jz nrtp2 + jmp nrtp1 +nrtp2: ret +ncalcpoints ENDP + +overfl PROC NEAR + mov si,OFFSET m_outofvx + jmp fatalexit +overfl ENDP + +ncalcpoints2 PROC NEAR + ;normals etc, only rotate + ;CX=count, DS:SI=pointsource + mov ax,ds + mov es,ax + mov ax,cs + mov ds,ax + mov cs:npcount,cx + mov di,ds:np0 + shl di,pointshl + add di,OFFSET point + add ds:np0,cx + ; + mov ax,cx + shl ax,pointshl + add ax,di + jc overfl + cmp ax,OFFSET pointend + jae overfl + +nrup1: ;rotate with matrix + push si + push di + push bp + mov bp,es:[si+4] + mov di,es:[si+2] + mov si,es:[si+0] + +mtrm00: mov ax,1234h + imul si + mov bx,ax + mov cx,dx +mtrm02: mov ax,1234h + imul di + add bx,ax + adc cx,dx +mtrm04: mov ax,1234h + imul bp + add bx,ax + adc cx,dx + shld cx,bx,1 + push cx +mtrm06: mov ax,1234h + imul si + mov bx,ax + mov cx,dx +mtrm08: mov ax,1234h + imul di + add bx,ax + adc cx,dx +mtrm10: mov ax,1234h + imul bp + add bx,ax + adc cx,dx + shld cx,bx,1 + push cx +mtrm12: mov ax,1234h + imul si + mov bx,ax + mov cx,dx +mtrm14: mov ax,1234h + imul di + add bx,ax + adc cx,dx +mtrm16: mov ax,1234h + imul bp + add bx,ax + adc cx,dx + shld cx,bx,1 + pop dx + pop ax + pop bp + pop di + pop si + + mov ds:[di+PZ],cx + mov ds:[di+PY],dx + mov ds:[di+PX],ax + + ;next point + add si,6 + add di,pointadd + dec ds:npcount + jz nrup2 + jmp nrup1 +nrup2: ret +ncalcpoints2 ENDP + +initnrsobj PROC NEAR + push ds + push si + + mov ax,cs + mov ds,ax + mov ds:np0,0 + + pop si + pop ds + ret + + mov ebx,ds:nxpos + mov eax,ds:nypos + mov edx,ds:nzpos + mov cx,globalshr + mov bp,cx + sar ebx,cl + sar eax,cl + sar edx,cl +ino3: cmp edx,16000 + jg ino1 + cmp edx,-16000 + jl ino1 + cmp ebx,16000 + jg ino1 + cmp ebx,-16000 + jl ino1 + cmp eax,16000 + jg ino1 + cmp eax,-16000 + jl ino1 + jmp ino2 +ino1: inc bp + sar ebx,1 + sar eax,1 + sar edx,1 + jmp ino3 + +ino2: mov ds:addx,bx + mov ds:addy,ax + mov ds:addz,dx + mov ds:addshr,bp + + pop si + pop ds + ret +initnrsobj ENDP + +include veccmd.asm + +ALIGN 4 +objdoffs LABEL WORD + dw 256 dup(0) +sentinel1 db 'FCRZ' +objdarea LABEL WORD + db 4096 dup(0) +sentinel2 db 'FCRZ' +odpnt dw ? +oopnt dw ? +tmpoo dw ? + +pushnstuff MACRO + push dword ptr cs:nxpos + push dword ptr cs:nypos + push dword ptr cs:nzpos + push dword ptr cs:nmatrix[0] + push dword ptr cs:nmatrix[4] + push dword ptr cs:nmatrix[8] + push dword ptr cs:nmatrix[12] + push word ptr cs:nmatrix[16] + push word ptr cs:np0 + ENDM + +popnstuff MACRO + pop word ptr cs:np0 + pop word ptr cs:nmatrix[16] + pop dword ptr cs:nmatrix[12] + pop dword ptr cs:nmatrix[8] + pop dword ptr cs:nmatrix[4] + pop dword ptr cs:nmatrix[0] + pop dword ptr cs:nzpos + pop dword ptr cs:nypos + pop dword ptr cs:nxpos + ENDM + +OBJDSIZE equ 40 ;nstuff size + +loadnstuffdi PROC NEAR + mov eax,cs:[di+8] + mov cs:nxpos,eax + mov eax,cs:[di+12] + mov cs:nypos,eax + mov eax,cs:[di+16] + mov cs:nzpos,eax + mov eax,dword ptr cs:[di+20] + mov dword ptr cs:nmatrix[0],eax + mov eax,dword ptr cs:[di+24] + mov dword ptr cs:nmatrix[4],eax + mov eax,dword ptr cs:[di+28] + mov dword ptr cs:nmatrix[8],eax + mov eax,dword ptr cs:[di+32] + mov dword ptr cs:nmatrix[12],eax + mov ax,cs:[di+36] + mov cs:nmatrix[16],ax + mov ax,cs:[di+38] + mov cs:noflags,ax + ret +loadnstuffdi ENDP + +savenstuffdi PROC NEAR + mov eax,cs:nxpos + mov cs:[di+8],eax + mov eax,cs:nypos + mov cs:[di+12],eax + mov eax,cs:nzpos + mov cs:[di+16],eax + mov eax,dword ptr cs:nmatrix[0] + mov dword ptr cs:[di+20],eax + mov eax,dword ptr cs:nmatrix[4] + mov dword ptr cs:[di+24],eax + mov eax,dword ptr cs:nmatrix[8] + mov dword ptr cs:[di+28],eax + mov eax,dword ptr cs:nmatrix[12] + mov dword ptr cs:[di+32],eax + mov word ptr ax,cs:nmatrix[16] + mov word ptr cs:[di+36],ax + mov ax,cs:noflags + mov cs:[di+38],ax + ret +savenstuffdi ENDP + +visibledi PROC NEAR +;di=element offset in OBJD struct +;return carry if object invisible + clc + ret +visibledi ENDP + +comparebxbp PROC NEAR +;bx=first element, bp=second element (both offsets to the OBJD structs) +;return carry if these should be swapped + mov eax,dword ptr cs:[bp+16] ;zadd + cmp eax,dword ptr cs:[bx+16] ;zadd + ret +comparebxbp ENDP + +nrsproc PROC NEAR +donrswheader: +;initalize/dobj nodess + push cs:odpnt + push cs:oopnt + ;set partial OBJD area for this 'father' node + mov di,cs:odpnt + call savenstuffdi + add di,OBJDSIZE ;OBJD structure size + mov cs:odpnt,di + sub di,OBJDSIZE + push cs:oopnt + push cs:oopnt +dnh1: ;do initialization + push di + push ds + push si + mov ax,ds:[si] + and ax,255 + add si,ax + mov ax,MAXCMD + call docmd_dssi + mov dx,si ;current command pos=drawing commands start + pop si + pop ds + ;check visibility 1 + cmp ax,0 + je dnh4 ;initialization command returned, don't draw + ;allocate OBJD area + mov bx,cs:oopnt + mov di,cs:odpnt + mov cs:[bx],di + ;set OBJD area + mov al,ds:[si+1] ;type + mov cs:[di+0],al + mov cs:[di+2],dx ;offset to draw commands + mov cs:[di+4],ds ;segment to draw commands + call savenstuffdi + add di,OBJDSIZE ;OBJD structure size + mov cs:odpnt,di + ;check for visibility 2 + call visibledi + jc dnh4 + ;accept the entry in the OBJDoffset list + add bx,2 + mov cs:oopnt,bx +dnh4: ;next + pop di + call loadnstuffdi + mov si,ds:[si+4] + cmp si,0 + jne dnh1 +;sort.. not yet :-) + pop cs:tmpoo + mov si,cs:tmpoo +dns2: cmp si,cs:oopnt + jae dns1 + mov bx,cs:[si] + mov di,si +dns4: sub di,2 + cmp di,cs:tmpoo + jb dns3 + mov bp,cs:[di] + call comparebxbp ;carry=switch bx/bp + jnc dns3 + mov cs:[di+2],bp + jmp dns4 +dns3: mov cs:[di+2],bx + add si,2 + jmp dns2 +dns1: ; +;display what's in OBJD list + pop bx ;original oopnt +dnh3: cmp bx,cs:oopnt + jae dnh2 + push bx + mov bx,cs:[bx] + + ;load pos/matrix + mov di,bx + call loadnstuffdi + test cs:noflags,2 + jz dnh5 + ;??Shadow?? Doesn't work ok. + push bx + ;load command offset + mov si,cs:[bx+2] + mov ds,cs:[bx+4] + ;do drawing + mov ax,MAXCMD + mov cs:shadow,1 + call docmd_dssi + pop bx + ;load pos/matrix + mov di,bx + call loadnstuffdi +dnh5: ;load command offset + mov si,cs:[bx+2] + mov ds,cs:[bx+4] + ;do drawing + mov ax,MAXCMD + mov cs:shadow,0 + call docmd_dssi + ; + pop bx + add bx,2 + jmp dnh3 +dnh2:;done! + pop cs:oopnt + pop cs:odpnt + mov di,cs:odpnt + call loadnstuffdi + ret + +donrsnode: ;temp for older structs + pushnstuff + mov ax,MAXCMD + call docmd_dssi + popnstuff + ret +nrsproc ENDP diff --git a/HARD/VEC.ASM b/HARD/VEC.ASM new file mode 100644 index 0000000..3477637 --- /dev/null +++ b/HARD/VEC.ASM @@ -0,0 +1,920 @@ +include vasm.inc + +;±±±±±±±±±±±±±±±±±±±±±±± DATA ±±±±±±±±±±±±±±±±±±±±±±± + +include vdata.asm + +;±±±±±±±±±±±±±±±±±±±±±±± CODE ±±±±±±±±±±±±±±±±±±±±±±± + +text__vec SEGMENT para public 'CODE' + ASSUME cs:text__vec + +.386 + +include vnew.asm +include vmath.asm ;includes vmathsin.asm + +PUBLIC _lightshift +_lightshift db 0 + +PUBLIC _csetmatrix +_csetmatrix PROC FAR + CBEG + LOADDS + mov eax,[bp+10] + mov ds:xadd,eax + mov eax,[bp+14] + mov ds:yadd,eax + mov eax,[bp+18] + mov ds:zadd,eax + mov si,[bp+6] + mov ds,word ptr [bp+8] + call setmatrix + CEND +_csetmatrix ENDP + +PUBLIC _crotlist +_crotlist PROC FAR + CBEG + mov si,[bp+10] + mov ds,word ptr [bp+12] + mov di,[bp+6] + mov es,word ptr [bp+8] + call rotlist + CEND +_crotlist ENDP + +PUBLIC _crotprojlist +_crotprojlist PROC FAR + CBEG + mov si,[bp+10] + mov ds,word ptr [bp+12] + mov di,[bp+6] + mov es,word ptr [bp+8] + call rotprojlist + CEND +_crotprojlist ENDP + +PUBLIC _cprojlist +_cprojlist PROC FAR + CBEG + mov si,[bp+10] + mov ds,word ptr [bp+12] + mov di,[bp+6] + mov es,word ptr [bp+8] + call projlist + CEND +_cprojlist ENDP + +PUBLIC setmatrix +setmatrix PROC FAR + ;ds:si=matrix + movsx eax,word ptr ds:[si+0] + mov dword ptr cs:[2+mtrm00],eax + mov dword ptr cs:[2+mtr600],eax + movsx eax,word ptr ds:[si+2] + mov dword ptr cs:[2+mtrm02],eax + mov dword ptr cs:[2+mtr602],eax + movsx eax,word ptr ds:[si+4] + mov dword ptr cs:[2+mtrm04],eax + mov dword ptr cs:[2+mtr604],eax + movsx eax,word ptr ds:[si+6] + mov dword ptr cs:[2+mtrm06],eax + mov dword ptr cs:[2+mtr606],eax + movsx eax,word ptr ds:[si+8] + mov dword ptr cs:[2+mtrm08],eax + mov dword ptr cs:[2+mtr608],eax + movsx eax,word ptr ds:[si+10] + mov dword ptr cs:[2+mtrm10],eax + mov dword ptr cs:[2+mtr610],eax + movsx eax,word ptr ds:[si+12] + mov dword ptr cs:[2+mtrm12],eax + mov dword ptr cs:[2+mtr612],eax + movsx eax,word ptr ds:[si+14] + mov dword ptr cs:[2+mtrm14],eax + mov dword ptr cs:[2+mtr614],eax + movsx eax,word ptr ds:[si+16] + mov dword ptr cs:[2+mtrm16],eax + mov dword ptr cs:[2+mtr616],eax + ret +setmatrix ENDP + +ALIGN 2 +count dw 0 + +rotlist PROC FAR + ;pointlist@DS:SI=>pointlist@ES:DI + push di + LOADGS + mov cx,ds:[si] + add si,4 + mov cs:count,cx + mov ax,es:[di] + add es:[di],cx + mov bx,ax + shl ax,4 + add di,ax + add di,4 + +nrup1: ;rotate with matrix + push si + push di + mov ebp,ds:[si+8] + mov edi,ds:[si+4] + mov esi,ds:[si+0] +mtrm00: mov eax,12345678h + imul esi + mov ebx,eax + mov ecx,edx +mtrm02: mov eax,12345678h + imul edi + add ebx,eax + adc ecx,edx +mtrm04: mov eax,12345678h + imul ebp + add ebx,eax + adc ecx,edx + shld ecx,ebx,17 + push ecx +mtrm06: mov eax,12345678h + imul esi + mov ebx,eax + mov ecx,edx +mtrm08: mov eax,12345678h + imul edi + add ebx,eax + adc ecx,edx +mtrm10: mov eax,12345678h + imul ebp + add ebx,eax + adc ecx,edx + shld ecx,ebx,17 + push ecx +mtrm12: mov eax,12345678h + imul esi + mov ebx,eax + mov ecx,edx +mtrm14: mov eax,12345678h + imul edi + add ebx,eax + adc ecx,edx +mtrm16: mov eax,12345678h + imul ebp + add ebx,eax + adc ecx,edx + shld ecx,ebx,17 + pop edx + pop eax + pop di + pop si + ; + add ecx,gs:xadd + mov es:[di+0],ecx + add edx,gs:yadd + mov es:[di+4],edx + add eax,gs:zadd + mov es:[di+8],eax + ;next point + add si,12 + add di,12 + dec cs:count + jnz nrup1 + pop di + ret +rotlist ENDP + +projlist PROC FAR + ;pointlist@DS:SI=>projectedpointlist@ES:DI + push di + LOADGS + mov cx,ds:[si] + add si,4 + mov cs:count,cx + mov ax,es:[di] + add es:[di],cx + mov bx,ax + shl ax,4 + add di,ax + add di,4 + +@@1: ;rotate with matrix + mov ebx,ds:[si+8] + mov eax,ds:[si+4] + mov ecx,ds:[si+0] + + ;project ebx=z, eax=y, ecx=x + + xor bp,bp + mov dword ptr es:[di+8],ebx + cmp ebx,gs:projminz + jge @@2 + mov ebx,gs:projminz + or bp,16 +@@2: ; + mov es:[di+14],ax + imul gs:projymul + idiv ebx + add ax,gs:projyadd + cmp ax,gs:wmaxy + jng @@41 + or bp,8 +@@41: cmp ax,gs:wminy + jnl @@42 + or bp,4 +@@42: mov es:[di+2],ax ;store Y + ; + mov es:[di+12],cx + mov eax,gs:projxmul + imul ecx + idiv ebx + add ax,gs:projxadd + cmp ax,gs:wmaxx + jng @@43 + or bp,2 +@@43: cmp ax,gs:wminx + jnl @@44 + or bp,1 +@@44: mov es:[di+0],ax ;store X + +@@5: mov es:[di+4],bp ;store visiblity flags + + ;next point + add si,12 + add di,16 + dec cs:count + jnz @@1 + pop di + ret +projlist ENDP + +rotprojlist PROC FAR + ;pointlist@DS:SI=>pointlist@ES:DI + push di + LOADGS + mov cx,ds:[si] + add si,4 + mov cs:count,cx + mov ax,es:[di] + add es:[di],cx + mov bx,ax + shl ax,4 + add di,ax + add di,4 + +@@1: ;rotate with matrix + push si + push di + mov ebp,ds:[si+8] + mov edi,ds:[si+4] + mov esi,ds:[si+0] +mtr600: mov eax,12345678h + imul esi + mov ebx,eax + mov ecx,edx +mtr602: mov eax,12345678h + imul edi + add ebx,eax + adc ecx,edx +mtr604: mov eax,12345678h + imul ebp + add ebx,eax + adc ecx,edx + shld ecx,ebx,17 + push ecx +mtr606: mov eax,12345678h + imul esi + mov ebx,eax + mov ecx,edx +mtr608: mov eax,12345678h + imul edi + add ebx,eax + adc ecx,edx +mtr610: mov eax,12345678h + imul ebp + add ebx,eax + adc ecx,edx + shld ecx,ebx,17 + push ecx +mtr612: mov eax,12345678h + imul esi + mov ebx,eax + mov ecx,edx +mtr614: mov eax,12345678h + imul edi + add ebx,eax + adc ecx,edx +mtr616: mov eax,12345678h + imul ebp + add ebx,eax + adc ecx,edx + shld ecx,ebx,17 + pop edx + pop eax + pop di + pop si + ; + add ecx,gs:xadd + add edx,gs:yadd + add eax,gs:zadd + + mov ebx,eax + mov eax,edx + mov dword ptr es:[di+8],ebx + ;ax=y,cx=x,bx=y + ; + ;mov es:[di+14],ax + imul word ptr gs:projymul + idiv bx + add ax,gs:projyadd + mov es:[di+2],ax ;store Y + ; + ;mov es:[di+12],cx + mov ax,word ptr gs:projxmul + imul cx + idiv bx + add ax,gs:projxadd + mov es:[di+0],ax ;store X + + ;next point + add si,12 + add di,16 + dec cs:count + jnz @@1 + pop di + ret +rotprojlist ENDP + +ALIGN 2 +edgesoff dw 0 +pointsoff dw 0 +cntoff dw 0 + +adddot PROC NEAR + cmp ax,bp + je @@3 + mov bp,ax + ;add dot + push bx + mov bx,ax + shl bx,4 + add bx,cs:pointsoff + mov eax,gs:[bx] + stosd + pop bx +@@3: ret +adddot ENDP + +znorm dw 0,0 + +checkhiddenbx PROC NEAR + mov cx,es:[bx-4] + dec cx + push bx + xor ax,ax + mov cs:znorm[0],ax + mov cs:znorm[2],ax +@@2: mov ax,es:[bx+0+0] + mov dx,es:[bx+0+2] + sub ax,es:[bx+4+0] + add dx,es:[bx+4+2] + imul dx + add cs:znorm[0],ax + adc cs:znorm[2],dx + add bx,4 + loop @@2 + mov ax,es:[bx+0] + mov dx,es:[bx+2] + pop bx + sub ax,es:[bx+0] + add dx,es:[bx+2] + imul dx + add ax,cs:znorm[0] + adc dx,cs:znorm[2] + + cmp dx,0 + jl @@1 + clc + ret +@@1: stc + ret +checkhiddenbx ENDP + +PUBLIC _cpolylist +_cpolylist PROC FAR ;polylist,polys,edges,points3 + CBEG + mov di,[bp+6] + mov es,word ptr [bp+8] + mov si,[bp+10] + mov ds,word ptr [bp+12] + mov ax,[bp+14] + add ax,4 + mov cs:edgesoff,ax + mov fs,word ptr [bp+16] + mov ax,[bp+18] + add ax,4 + mov cs:pointsoff,ax + mov gs,word ptr [bp+20] + mov bp,-1 +@@2: lodsw + cmp ax,0 + je @@1 + add di,2 + mov cx,ax + movsw + mov cs:cntoff,di +@@3: push cx + mov bx,ds:[si] + add si,2 + shl bx,3 + add bx,cs:edgesoff + test word ptr fs:[bx+4],8000h + jnz @@7 + mov ax,fs:[bx+2] + cmp ax,bp + je @@5 + mov ax,fs:[bx] + call adddot + mov ax,fs:[bx+2] + call adddot +@@7: pop cx + loop @@3 + jmp @@6 +@@5: mov ax,fs:[bx+2] + call adddot + mov ax,fs:[bx] + call adddot + pop cx + loop @@3 +@@6: mov bx,cs:cntoff + mov eax,es:[bx] + cmp eax,es:[di-4] + jne @@4 + sub di,4 +@@4: mov ax,di + sub ax,cs:cntoff + shr ax,2 + mov es:[bx-4],ax + call checkhiddenbx + jnc @@2 + xor word ptr es:[bx-2],8000h + jmp @@2 +@@1: mov word ptr es:[di],0 + CEND +_cpolylist ENDP + +setpalxxx MACRO + local l1,l2,l3 + mov al,cl + cmp al,64 + jb l1 + mov al,63 +l1: out dx,al + mov al,bl + cmp al,64 + jb l2 + mov al,63 +l2: out dx,al + mov al,bh + cmp al,64 + jb l3 + mov al,63 +l3: out dx,al + ENDM + +demo_do dw OFFSET demo_hide + +demo_norm PROC NEAR + push ax + jc @@7 ;visible + mov ax,es:[bx-2] + ;mov ax,40h + mov es:[bx-2],ax + pop ax + ret +@@7: pop ax + ret +demo_norm ENDP + +demo_hide PROC NEAR + push ax + jc @@7 ;visible + xor ax,ax + mov es:[bx-2],ax + pop ax + ret +@@7: pop ax + ret +demo_hide ENDP + +demo_glz PROC NEAR + jnc @@7 ;visible + push ax + mov ax,es:[bx-2] + shr al,3 + and al,1 + mov es:[bx-2],ax + pop ax + ret +@@7: mov cl,cs:_lightshift + sub cl,2 + shrd ax,dx,cl + cmp ax,0 + jge @@s1 + mov ax,0 +@@s1: cmp ax,63 + jle @@s2 + mov ax,63 +@@s2: mov ah,al + ; + mov dx,3c8h + mov al,es:[bx-2] + test al,7 + jnz @@xx + out dx,al + inc dx + mov cl,ah ;R + mov bl,ah ;G + mov bh,ah ;B + ;Inner1 Inner2 Back + setpalxxx ;- - - + + add cl,16 + setpalxxx ;- - + + sub cl,16 + + add cl,16 + setpalxxx ;- + - + sub cl,16 + + add cl,16 + add cl,16 + setpalxxx ;- + + + sub cl,16 + sub cl,16 + + add bh,16 + setpalxxx ;+ - - + sub bh,16 + + add cl,16 + add bh,16 + setpalxxx ;+ - + + sub bh,16 + sub cl,16 + + add cl,16 + add bh,16 + setpalxxx ;+ + - + sub bh,16 + sub cl,16 + + add cl,16 + add bl,16 + add bh,16 + setpalxxx ;+ + + + add bh,16 + add bl,16 + sub cl,16 + +@@xx: ret +demo_glz ENDP + +PUBLIC _ceasypolylist +_ceasypolylist PROC FAR ;polylist,polys,points3 + CBEG + mov di,[bp+6] + mov es,word ptr [bp+8] + mov si,[bp+10] + mov ds,word ptr [bp+12] + mov ax,[bp+14] + add ax,4 + mov cs:pointsoff,ax + mov gs,word ptr [bp+16] + mov bp,-1 +@@2: lodsw + cmp ax,0 + je @@1 + add di,2 + mov cx,ax + movsw + mov cs:cntoff,di +@@3: push cx + mov ax,ds:[si] + add si,2 + call adddot + pop cx + loop @@3 +@@6: mov bx,cs:cntoff + mov eax,es:[bx] + cmp eax,es:[di-4] + jne @@4 + sub di,4 +@@4: mov ax,di + sub ax,cs:cntoff + shr ax,2 + mov es:[bx-4],ax + call checkhiddenbx +;;; call demo_glz ;sets colors etc / hidden faces flipped + call demo_norm ;sets colors etc / hidden faces flipped + jmp @@2 +@@1: mov word ptr es:[di],0 + CEND +_ceasypolylist ENDP + +PUBLIC _cglenzinit +_cglenzinit PROC FAR + CBEG + LOADDS + mov ax,0 + call __newgroup + CEND +_cglenzinit ENDP + +PUBLIC _cglenzdone +_cglenzdone PROC FAR + CBEG + LOADDS + mov ax,2 + call __newgroup + CEND +_cglenzdone ENDP + +PUBLIC _cglenzpolylist +_cglenzpolylist PROC FAR + CBEG + LOADDS + movpar di,0 + movpar es,1 + mov ax,1 + call __newgroup + CEND +_cglenzpolylist ENDP + +PUBLIC _cdrawpolylist +_cdrawpolylist PROC FAR + CBEG + LOADDS + movpar di,0 + mov es,word ptr [bp+8] + call VIDPOLYGROUP + CEND +_cdrawpolylist ENDP + +adddotxy PROC NEAR + cmp eax,ebp + je @@3 + mov ebp,eax + stosd ;adddot +@@3: ret +adddotxy ENDP + +ALIGN 2 +cllastdi dw 0 +clipz dd 4000 + +zclipsidi PROC NEAR ;CLASSIC, clip