/* Generated with C2C (Cedar To C)*/
/* Copyright (C) 1993 by Xerox Corporation.  All rights reserved. */
/* time: July 11, 1993 7:59:22 pm PDT */
/* C2C version: April 20, 1993 (sun4) */
/* ref-counting: off */
/* file: GGMultiGravityImpl, module: GGMultiGravityImpl */ 
/* switches: bcfhklnouw */ 
#include <cedar/InstallationSupport.h>
#include <cedar/CedarExtra.h>
static char versionStamp[] = "@(#)mob←version [215622169,11083639] GGMultiGravityImpl";
typedef unsigned word, *ptr;
typedef unsigned char byte, *bPt;
typedef unsigned short half, *hPt;
typedef struct {word f0, f1;} W2;
typedef struct {word f0, f1, f2, f3, f4, f5, f6, f7;} W8;
typedef struct {W8 f; W8 r;} W16;
typedef struct {W16 f; word r;} W17;
typedef W2 *W2Pt;
typedef word (*fPt)();
typedef struct {word f0, f1, f2, f3, f4, f5;} W6;
typedef struct {word f0, f1, f2, f3;} W4;
typedef struct {W8 f; W4 r;} W12;
typedef struct {word f0, f1, f2, f3, f4;} W5;
typedef struct {W8 f; W5 r;} W13;
typedef struct {W16 f; W2 r;} W18;
typedef struct {word f0, f1, f2, f3, f4, f5, f6;} W7;
typedef struct {word f0, f1, f2;} W3;
typedef struct {W16 f; W6 r;} W22;
typedef struct {W8 f; W2 r;} W10;
typedef struct {W8 f; word r;} W9;
typedef W9 *W9Pt;
typedef W7 *W7Pt;
typedef W4 *W4Pt;
typedef W8 *W8Pt;
typedef W3 *W3Pt;
typedef W6 *W6Pt;
#define SOURCE(p, l) /* source p, l */
static float fc58 = 0.0;
static float fc59 = -1.0;
#define BCK(idx, lim) ( ((unsigned) idx) >= ((unsigned) lim) ? (XR←RaiseBoundsFault()) : (idx) )
static float fc65 = 0.072;
#define IOP2(op, x, y)  ( (word) ((x) op (y)) )
#define SGNCK(i) ((int) (word) (i) < 0 ? XR←RaiseArithmeticFault(): i )
#define MIN(cast, x, y)  ( ( cast x) < ( cast y) ? (x) : (y) )
static float fc98 = 2.0;
#define FABS(f, t) ( ((t=(f)) >= (float) 0.0) ? (t) : (- (t)) )
static float fc191 = 1.0e-5;
#define FMIN(x, y, tx, ty)  ( (tx=((float) x)) <= (ty=((float) y)) ? tx : ty )
#define FMAX(x, y, tx, ty)  ( (tx=((float) x)) >= (ty=((float) y)) ? tx : ty )
#define MAX(cast, x, y)  ( ( cast x) > ( cast y) ? (x) : (y) )
static float fc358 = 0.5;
static void NoName←Q7344();
static void GGMultiGravityImpl←P0();
static void Map←P60();
static word NoName←Q7404();
static void PointsPreferred←P120();
static void LinesPreferred←P180();
static void FacesPreferred←P240();
static void PrepareWinner←P300();
static word EmptyCycler←P360();
static word MapCycler←P420();
static word NoName←Q7464();
static word CopyVEF←P480();
static word PointsPreferredCycler←P540();
static word LinesPreferredCycler←P600();
static word FacesPreferredCycler←P660();
static void FirstFeature←P720();
static void NextFeature←P780();
static void PreviousFeature←P840();
static void GetFeature←P900();
static void MultiMap←P960();
static word NoName←Q7524();
static void MultiFacesPreferred←P1020();
static void MultiLinesPreferred←P1080();
static void MultiPointsPreferred←P1140();
static void VertsInNeighborhoodPlus←P1200();
static void ProcessPoint←P3948();
static void ProcessSlice←P4008();
static word DoForSliceTrigger←P4068();
static word FindIntersections←P1260();
static word FindMidpoints←P1320();
static void CurvesInNeighborhoodPlus←P1380();
static void ProcessLine←P4560();
static void ProcessCircle←P4620();
static void QProjectedOntoCircle←P5004();
static void ProcessSlice←P4680();
static word ProcessSlopeLine←P4740();
static word DoForSceneSlice←P4800();
static void FacesInNeighborhoodPlus←P1440();
static void ProcessSlice←P5064();
static word DoForSceneSlice←P5124();
static word BestFacesFromPool←P1500();
static word BestCurvesFromPool←P1560();
static word BestPointsFromPool←P1620();
static word AddNeighbor←P1680();
static word AddFace←P1740();
static void NearPointsFromPoints←P1800();
static void MergePointsAndCurves←P1860();
static void MergeByOverlapAndDistance←P1920();
static void SortPoints←P1980();
static void SortCurves←P2040();
static void SortFaces←P2100();
static void SortByOverlap←P2160();
static void ComputeMidpoint←P2220();
static void ClassifyCurve←P2280();
static void CurveMeetsCurve←P2340();
static void NoOpI←P2400();
static void LinLinI←P2460();
static void CirLinI←P2520();
static void CirCirI←P2580();
static void EdgLinI←P2640();
static void EdgCirI←P2700();
static void EdgEdgI←P2760();
static void ArcLinI←P2820();
static void ArcCirI←P2880();
static void ArcEdgI←P2940();
static void ArcArcI←P3000();
static void CubLinI←P3060();
static void CubicMeetsEdge←P3120();
static void CubEdgI←P3180();
static void SlcLinI←P3240();
static void SlcCirI←P3300();
static word NewMultiGravityPool←P3360();
static void NoName←Q7584();
static void NoName←Q7644();
static void NoName←Q7704();
static struct {unsigned f; char r[4];} string1 = {131076, "\216\251\000"};
static struct {unsigned f; char r[4];} string2 = {65537, "\001\000\000"};
static struct {unsigned f; char r[16];} string3 = {851984, "\257\300\014\332\042\031\300\000\251\037\167\100\214\000\000"};
static struct {unsigned f; char r[12];} string4 = {589833, "\011\000\004\100\340\040\000\040\001\000\000"};
static struct {unsigned f; char r[16];} string5 = {851984, "\257\300\223\145\303\043\300\372\023\025\003\101\304\000\000"};
static struct {unsigned f; char r[16];} string6 = {851984, "\257\300\223\145\303\043\300\372\023\025\003\101\270\000\000"};
static struct {unsigned f; char r[12];} string7 = {524296, "\011\000\004\000\040\000\004\001\000\000\000"};
static struct {unsigned f; char r[16];} string8 = {851984, "\257\300\223\145\303\043\300\372\023\025\003\101\254\000\000"};
static struct {unsigned f; char r[4];} string9 = {196611, "\004@`"};
static struct {unsigned f; char r[16];} string10 = {851984, "\257\300\223\145\303\043\300\372\023\025\003\100\370\000\000"};
static struct {unsigned f; char r[16];} string11 = {851984, "\257\300\247\365\203\234\300\047\265\225\046\100\310\000\000"};
static struct {unsigned f; char r[4];} string12 = {131074, "\004\003\000"};
static struct {unsigned f; char r[16];} string13 = {851984, "\257\300\247\365\203\234\300\047\265\225\046\107\270\000\000"};
static struct {unsigned f; char r[4];} string14 = {131074, "\003\001\000"};
static struct {unsigned f; char r[16];} string15 = {851984, "\257\300\223\145\303\043\300\372\023\025\003\101\224\000\000"};
static struct {unsigned f; char r[4];} string16 = {131074, "\004\030\000"};
static struct {unsigned f; char r[16];} string17 = {851984, "\257\300\223\145\303\043\300\372\023\025\003\101\144\000\000"};
static struct {unsigned f; char r[4];} string18 = {131074, "\004\005\000"};
static struct {unsigned f; char r[16];} string19 = {851984, "\257\300\241\203\324\306\300\306\173\161\152\100\200\000\000"};
static struct {unsigned f; char r[16];} string20 = {851984, "\257\300\223\145\303\043\300\372\023\025\003\101\174\000\000"};
static struct {unsigned f; char r[16];} string21 = {851984, "\257\300\014\332\042\031\300\000\251\037\167\100\200\000\000"};
static struct {unsigned f; char r[12];} string22 = {589833, "\011\000\004A  \000(\001\000\000"};
static struct {unsigned f; char r[20];} string23 = {1179668, "\260\006\005\146\151\162\163\164\232\005\004\162\145\163\164\214\232\261\000"};
static struct {unsigned f; char r[16];} string24 = {851984, "\257\300\014\332\042\031\300\000\251\037\167\100\230\000\000"};
static struct {unsigned f; char r[4];} string25 = {131074, "\004\007\000"};
static struct {unsigned f; char r[16];} string26 = {917520, "\216\257\300\363\223\326\161\300\017\164\046\072\104\350\000"};
static struct {unsigned f; char r[44];} string27 = {2752556, "\260\006\005\146\151\162\163\164\257\300\247\031\224\326\300\123\162\224\023\100\164\005\004\162\145\163\164\214\257\300\247\031\224\326\300\123\162\224\023\100\164\261\000"};
static struct {unsigned f; char r[4];} string28 = {131074, "\003\002\000"};
static struct {unsigned f; char r[16];} string29 = {851984, "\257\300\241\203\324\306\300\306\173\161\152\100\164\000\000"};
static struct {unsigned f; char r[16];} string30 = {851984, "\257\300\012\121\313\233\300\012\365\115\261\100\200\000\000"};
static struct {unsigned f; char r[4];} string31 = {196611, "\004A\001"};
static struct {unsigned f; char r[16];} string32 = {851984, "\257\300\012\121\313\233\300\012\365\115\261\100\164\000\000"};
static struct {unsigned f; char r[16];} string33 = {851984, "\257\300\176\067\335\331\300\021\260\123\113\100\200\000\000"};
static struct {unsigned f; char r[20];} string34 = {1048596, "Impossible case.\000\000\000"};
static struct {unsigned f; char r[16];} string35 = {786448, "FaceOverflow\000\000\000"};
static struct {unsigned f; char r[16];} string36 = {851984, "CurveOverflow\000\000"};
static struct {unsigned f; char r[16];} string37 = {851984, "PointOverflow\000\000"};
static struct {unsigned f; char r[12];} string38 = {524300, "Gargoyle\000\000\000"};
static struct {unsigned f; char r[12];} string39 = {524300, "MultiMap\000\000\000"};
static struct {unsigned f; char r[16];} string40 = {851984, "\257\300\014\332\042\031\300\000\251\037\167\100\164\000\000"};
static struct {unsigned f; char r[8];} string41 = {393222, "\006\001A@\004?\000"};
static struct {unsigned f; char r[16];} string42 = {851984, "\257\300\006<7[\300;CV\364@h\000\000"};
static struct {unsigned f; char r[16];} string43 = {851984, "\257\300\325\040\343\357\300\152\277\324\231\100\150\000\000"};
static struct {unsigned f; char r[16];} string44 = {851984, "\257\300\136\002\175\264\300\016\031\370\241\100\150\000\000"};
static struct {unsigned f; char r[16];} string45 = {851984, "\257\300\223\031\346\162\300\275\253\133\335\100\150\000\000"};
static struct {unsigned f; char r[16];} string46 = {851984, "\257\300IKM\275\300Y\0222&@h\000\000"};
static struct {unsigned f; char r[16];} string47 = {851984, "\257\300\301\241\007\150\300\032\111\265\237\100\150\000\000"};
static struct {unsigned f; char r[16];} string48 = {851984, "\257\300\347\101\365\007\300\150\102\366\020\100\150\000\000"};
static struct {unsigned f; char r[16];} string49 = {851984, "\257\300\336\025\013\356\300\216\115\352\271\100\150\000\000"};
static struct {unsigned f; char r[16];} string50 = {851984, "\257\300\206\055\004\241\300\261\334\001\116\100\150\000\000"};
static struct {unsigned f; char r[16];} string51 = {851984, "\257\300\103\306\166\071\300\047\126\012\237\100\150\000\000"};
static struct {unsigned f; char r[16];} string52 = {851984, "\257\300\245\247\302\156\300\052\156\325\023\100\150\000\000"};
static struct {unsigned f; char r[16];} string53 = {851984, "\257\300\004\142\347\110\300\363\053\254\345\100\150\000\000"};
static struct {unsigned f; char r[16];} string54 = {851984, "\257\300\172\265\057\072\300\145\211\260\126\100\150\000\000"};
static struct {
   word f0[4]; word f4; word f5[82]; word f87; 
   word f88; word f89; word f90; word f91; 
   word f92; word f93; word f94; word f95; 
   word f96; word f97; word f98; word f99; 
   word f100; word f101; word f102; word f103; 
   word f104; word f105; word f106; word f107; 
   word f108; word f109; word f110; word f111; 
   word f112; word f113; word f114; word f115; 
   word f116; word f117; word f118; word f119; 
   word f120; word f121; word f122; word f123; 
   word f124; word f125; word f126; word f127; 
   word f128; word f129; word f130; word f131; 
   word f132; word f133; word f134; word f135; 
   word f136; word f137; word f138; word f139; 
   word f140; word f141; word f142; word f143; 
   word f144; word f145; word f146; word f147; 
   word f148; word f149; word f150; word f151; 
   word f152; word f153; word f154; word f155; 
   word f156; word f157; word f158; word f159; 
   word f160; word f161; word f162; word f163; 
   word f164; word f165; word f166; word f167; 
   word f168; word f169; word f170; word f171; 
   word f172; word f173; word f174; word f175; 
   word f176; word f177; word f178; word f179; 
   word f180; word f181; word f182; word f183; 
   word f184; word f185; word f186; word f187; 
   word f188; word f189; word f190; word f191; 
   word f192; word f193; word f194; word f195; 
   word f196; word f197; word f198; word f199; 
   word f200[14]; 
   } globalframe = {
   {0}, (word) 20, {0}, (word) NewMultiGravityPool←P3360, 
   0, (word) SlcCirI←P3300, 0, (word) SlcLinI←P3240, 
   0, (word) CubEdgI←P3180, 0, (word) CubicMeetsEdge←P3120, 
   0, (word) CubLinI←P3060, 0, (word) ArcArcI←P3000, 
   0, (word) ArcEdgI←P2940, 0, (word) ArcCirI←P2880, 
   0, (word) ArcLinI←P2820, 0, (word) EdgEdgI←P2760, 
   0, (word) EdgCirI←P2700, 0, (word) EdgLinI←P2640, 
   0, (word) CirCirI←P2580, 0, (word) CirLinI←P2520, 
   0, (word) LinLinI←P2460, 0, (word) NoOpI←P2400, 
   0, (word) CurveMeetsCurve←P2340, 0, (word) ClassifyCurve←P2280, 
   0, (word) ComputeMidpoint←P2220, 0, (word) SortByOverlap←P2160, 
   0, (word) SortFaces←P2100, 0, (word) SortCurves←P2040, 
   0, (word) SortPoints←P1980, 0, (word) MergeByOverlapAndDistance←P1920, 
   0, (word) MergePointsAndCurves←P1860, 0, (word) NearPointsFromPoints←P1800, 
   0, (word) AddFace←P1740, 0, (word) AddNeighbor←P1680, 
   0, (word) BestPointsFromPool←P1620, 0, (word) BestCurvesFromPool←P1560, 
   0, (word) BestFacesFromPool←P1500, 0, (word) FacesInNeighborhoodPlus←P1440, 
   0, (word) CurvesInNeighborhoodPlus←P1380, 0, (word) FindMidpoints←P1320, 
   0, (word) FindIntersections←P1260, 0, (word) VertsInNeighborhoodPlus←P1200, 
   0, (word) MultiPointsPreferred←P1140, 0, (word) MultiLinesPreferred←P1080, 
   0, (word) MultiFacesPreferred←P1020, 0, (word) MultiMap←P960, 
   0, (word) GetFeature←P900, 0, (word) PreviousFeature←P840, 
   0, (word) NextFeature←P780, 0, (word) FirstFeature←P720, 
   0, (word) FacesPreferredCycler←P660, 0, (word) LinesPreferredCycler←P600, 
   0, (word) PointsPreferredCycler←P540, 0, (word) CopyVEF←P480, 
   0, (word) MapCycler←P420, 0, (word) EmptyCycler←P360, 
   0, (word) PrepareWinner←P300, 0, (word) FacesPreferred←P240, 
   0, (word) LinesPreferred←P180, 0, (word) PointsPreferred←P120, 
   0, (word) Map←P60, 0, (word) GGMultiGravityImpl←P0, 
   {0}
   };

static void NoName←Q7344()
   {
   register ptr gf←c0960 =  (ptr) &globalframe;
   word var←c59352;
   (* (( (ptr) gf←c0960)+54) ) = (word) XR←GetTypeIndex((word) &string1, 0, (word) &string2);
   (* (( (ptr) gf←c0960)+57) ) = (word) XR←GetTypeIndex((word) &string3, 0, (word) &string4);
   (* (( (ptr) gf←c0960)+58) ) = (word) XR←GetTypeIndex((word) &string5, 0, (word) &string2);
   (* (( (ptr) gf←c0960)+59) ) = (word) XR←GetTypeIndex((word) &string6, 0, (word) &string7);
   (* (( (ptr) gf←c0960)+60) ) = (word) XR←GetTypeIndex((word) &string8, 0, (word) &string9);
   (* (( (ptr) gf←c0960)+62) ) = (word) XR←GetTypeIndex((word) &string10, 0, (word) &string9);
   (* (( (ptr) gf←c0960)+64) ) = (word) XR←GetTypeIndex((word) &string11, 0, (word) &string12);
   (* (( (ptr) gf←c0960)+65) ) = (word) XR←GetTypeIndex((word) &string13, 0, (word) &string14);
   (* (( (ptr) gf←c0960)+66) ) = (word) XR←GetTypeIndex((word) &string15, 0, (word) &string16);
   (* (( (ptr) gf←c0960)+67) ) = (word) XR←GetTypeIndex((word) &string17, 0, (word) &string18);
   (* (( (ptr) gf←c0960)+68) ) = (word) XR←GetTypeIndexS((word) (&string19));
   (* (( (ptr) gf←c0960)+69) ) = (word) XR←GetTypeIndex((word) &string20, 0, (word) &string12);
   (* (( (ptr) gf←c0960)+70) ) = (word) XR←GetTypeIndex((word) &string21, 0, (word) &string22);
   (* (( (ptr) gf←c0960)+71) ) = (word) XR←GetTypeIndex((word) &string23, 0, (word) &string14);
   (* (( (ptr) gf←c0960)+72) ) = (word) XR←GetTypeIndex((word) &string24, 0, (word) &string25);
   (* (( (ptr) gf←c0960)+74) ) = (word) XR←GetTypeIndex((word) &string26, 0, (word) &string2);
   (* (( (ptr) gf←c0960)+75) ) = (word) XR←GetTypeIndex((word) &string27, 0, (word) &string28);
   (* (( (ptr) gf←c0960)+76) ) = (word) XR←GetTypeIndex((word) &string29, 0, (word) &string2);
   (* (( (ptr) gf←c0960)+77) ) = (word) XR←GetTypeIndex((word) &string30, 0, (word) &string31);
   (* (( (ptr) gf←c0960)+78) ) = (word) XR←GetTypeIndexS((word) (&string32));
   (* (( (ptr) gf←c0960)+79) ) = (word) XR←GetTypeIndexS((word) (&string33));
   (*  (ptr) (( (bPt) gf←c0960)+320) ) = (word) XR←GetRefLiteral((* (( (ptr) gf←c0960)+74) ), (word) &string34);
   (*  (ptr) (( (bPt) gf←c0960)+324) ) = (word) XR←GetRefLiteral((* (( (ptr) gf←c0960)+54) ), (word) &string35);
   (*  (ptr) (( (bPt) gf←c0960)+328) ) = (word) XR←GetRefLiteral((* (( (ptr) gf←c0960)+54) ), (word) &string36);
   (*  (ptr) (( (bPt) gf←c0960)+332) ) = (word) XR←GetRefLiteral((* (( (ptr) gf←c0960)+54) ), (word) &string37);
   (*  (ptr) (( (bPt) gf←c0960)+336) ) = (word) XR←GetRefLiteral((* (( (ptr) gf←c0960)+54) ), (word) &string38);
   (*  (ptr) (( (bPt) gf←c0960)+340) ) = (word) XR←GetRefLiteral((* (( (ptr) gf←c0960)+54) ), (word) &string39);
   (void) XR←DeclareGlobalFrame((word) "GGMultiGravityImpl", &globalframe, (word) XR←GetTypeIndex((word) &string40, 0, (word) &string41)
      , (word) (( (bPt) gf←c0960)+796)/* var←c51384 */ );
   var←c59352 = (word) XR←ImportInterface((word) "CodeTimer", (word) XR←GetTypeIndexS((word) (&string42)), 21);
   (* (( (ptr) gf←c0960)+202)/* var←c51480 */  ) = var←c59352;
   (void) XR←ImportProcS(var←c59352, 526850);
   (void) XR←ImportProcS(var←c59352, 526338);
   var←c59352 = (word) XR←ImportInterface((word) "CubicPaths", (word) XR←GetTypeIndexS((word) (&string43)), 13);
   (* (( (ptr) gf←c0960)+212)/* var←c58168 */  ) = var←c59352;
   (void) XR←ImportProcS(var←c59352, 673975300);
   var←c59352 = (word) XR←ImportInterface((word) "GGAlign", (word) XR←GetTypeIndexS((word) (&string44)), 46);
   (* (( (ptr) gf←c0960)+203)/* var←c53176 */  ) = var←c59352;
   (void) XR←ImportProcS(var←c59352, 528642);
   (void) XR←ImportProcS(var←c59352, 525570);
   (void) XR←ImportProcS(var←c59352, 67371777);
   (void) XR←ImportProcS(var←c59352, 67374849);
   var←c59352 = (word) XR←ImportInterface((word) "GGCaret", (word) XR←GetTypeIndexS((word) (&string45)), 13);
   (* (( (ptr) gf←c0960)+204)/* var←c53976 */  ) = var←c59352;
   (void) XR←ImportProcS(var←c59352, 134482945);
   (void) XR←ImportProcS(var←c59352, 134482689);
   (void) XR←ImportProcS(var←c59352, 67371777);
   var←c59352 = (word) XR←ImportInterface((word) "GGCircles", (word) XR←GetTypeIndexS((word) (&string46)), 29);
   (* (( (ptr) gf←c0960)+211)/* var←c56888 */  ) = var←c59352;
   (void) XR←ImportProcS(var←c59352, 403180546);
   (void) XR←ImportProcS(var←c59352, 403180290);
   (void) XR←ImportProcS(var←c59352, 403179778);
   (void) XR←ImportProcS(var←c59352, 403180034);
   (void) XR←ImportProcS(var←c59352, 403179266);
   (void) XR←ImportProcS(var←c59352, 403179522);
   (void) XR←ImportProcS(var←c59352, 403179010);
   var←c59352 = (word) XR←ImportInterface((word) "GGParent", (word) XR←GetTypeIndexS((word) (&string47)), 83);
   (* (( (ptr) gf←c0960)+210)/* var←c55576 */  ) = var←c59352;
   (void) XR←ImportProcS(var←c59352, 67649282);
   (void) XR←ImportProcS(var←c59352, 134752514);
   (void) XR←ImportProcS(var←c59352, 67385857);
   var←c59352 = (word) XR←ImportInterface((word) "GGScene", (word) XR←GetTypeIndexS((word) (&string48)), 50);
   (* (( (ptr) gf←c0960)+207)/* var←c54136 */  ) = var←c59352;
   (void) XR←ImportProcS(var←c59352, 67637506);
   var←c59352 = (word) XR←ImportInterface((word) "GGSliceOps", (word) XR←GetTypeIndexS((word) (&string49)), 73);
   (* (( (ptr) gf←c0960)+208)/* var←c54328 */  ) = var←c59352;
   (void) XR←ImportProcS(var←c59352, 134753794);
   (void) XR←ImportProcS(var←c59352, 134753538);
   (void) XR←ImportProcS(var←c59352, 67645186);
   (void) XR←ImportProcS(var←c59352, 135277571);
   (void) XR←ImportProcS(var←c59352, 470821635);
   var←c59352 = (word) XR←ImportInterface((word) "GGState", (word) XR←GetTypeIndexS((word) (&string50)), 119);
   (* (( (ptr) gf←c0960)+201)/* var←c51448 */  ) = var←c59352;
   (void) XR←ImportProcS(var←c59352, 67384321);
   (void) XR←ImportProcS(var←c59352, 67392769);
   (void) XR←ImportProcS(var←c59352, 67393793);
   var←c59352 = (word) XR←ImportInterface((word) "Lines2d", (word) XR←GetTypeIndexS((word) (&string51)), 50);
   (* (( (ptr) gf←c0960)+209)/* var←c54776 */  ) = var←c59352;
   (void) XR←ImportProcS(var←c59352, 67906306);
   (void) XR←ImportProcS(var←c59352, 201859074);
   (void) XR←ImportProcS(var←c59352, 201858818);
   (void) XR←ImportProcS(var←c59352, 201858306);
   (void) XR←ImportProcS(var←c59352, 135013378);
   (void) XR←ImportProcS(var←c59352, 67904258);
   var←c59352 = (word) XR←ImportInterface((word) "RealFns", (word) XR←GetTypeIndexS((word) (&string52)), 36);
   (* (( (ptr) gf←c0960)+206)/* var←c54040 */  ) = var←c59352;
   (void) XR←ImportProcS(var←c59352, 67372289);
   var←c59352 = (word) XR←ImportInterface((word) "Vectors2d", (word) XR←GetTypeIndexS((word) (&string53)), 21);
   (* (( (ptr) gf←c0960)+205)/* var←c54008 */  ) = var←c59352;
   (void) XR←ImportProcS(var←c59352, 135006210);
   (void) XR←ImportProcS(var←c59352, 135267842);
   (void) XR←ImportProcS(var←c59352, 67636737);
   (void) XR←ImportProcS(var←c59352, 135268098);
   (void) XR←ImportProcS(var←c59352, 68161282);
   (void) XR←ImportProcS(var←c59352, 67637249);
   (void) XR←ImportProcS(var←c59352, 68161794);
   var←c59352 = (word) XR←ExportInterface((word) "GGMultiGravity", (word) XR←GetTypeIndexS((word) (&string54)), 16);
   (* (( (ptr) gf←c0960)+213)/* var←c59384 */  ) = var←c59352;
   (void) XR←ExportProcS(var←c59352, (word) (( (bPt) gf←c0960)+788)/* var←c51352 */ , 404488198, (word) "Map");
   (void) XR←ExportProcS(var←c59352, (word) (( (bPt) gf←c0960)+780)/* var←c51320 */ , 404488454, (word) "PointsPreferred");
   (void) XR←ExportProcS(var←c59352, (word) (( (bPt) gf←c0960)+772)/* var←c51288 */ , 404226565, (word) "LinesPreferred");
   (void) XR←ExportProcS(var←c59352, (word) (( (bPt) gf←c0960)+764)/* var←c51256 */ , 404226821, (word) "FacesPreferred");
   (void) XR←ExportProcS(var←c59352, (word) (( (bPt) gf←c0960)+740)/* var←c51160 */ , 68944902, (word) "MapCycler");
   (void) XR←ExportProcS(var←c59352, (word) (( (bPt) gf←c0960)+724)/* var←c51096 */ , 69207303, (word) "PointsPreferredCycler")
   ;
   (void) XR←ExportProcS(var←c59352, (word) (( (bPt) gf←c0960)+716)/* var←c51064 */ , 68683269, (word) "LinesPreferredCycler")
   ;
   (void) XR←ExportProcS(var←c59352, (word) (( (bPt) gf←c0960)+708)/* var←c51032 */ , 68683525, (word) "FacesPreferredCycler")
   ;
   (void) XR←ExportProcS(var←c59352, (word) (( (bPt) gf←c0960)+748)/* var←c51192 */ , 67635201, (word) "EmptyCycler");
   (void) XR←ExportProcS(var←c59352, (word) (( (bPt) gf←c0960)+700)/* var←c51000 */ , 402917633, (word) "FirstFeature");
   (void) XR←ExportProcS(var←c59352, (word) (( (bPt) gf←c0960)+692)/* var←c50968 */ , 402917889, (word) "NextFeature");
   (void) XR←ExportProcS(var←c59352, (word) (( (bPt) gf←c0960)+684)/* var←c50936 */ , 402918145, (word) "PreviousFeature");
   (void) XR←ExportProcS(var←c59352, (word) (( (bPt) gf←c0960)+668)/* var←c50872 */ , 136055814, (word) "MultiMap");
   (void) XR←ExportProcS(var←c59352, (word) (( (bPt) gf←c0960)+652)/* var←c50808 */ , 135793925, (word) "MultiLinesPreferred")
   ;
   (void) XR←ExportProcS(var←c59352, (word) (( (bPt) gf←c0960)+644)/* var←c50776 */ , 136056326, (word) "MultiPointsPreferred")
   ;
   (void) XR←ExportProcS(var←c59352, (word) (( (bPt) gf←c0960)+348)/* var←c49592 */ , 67112704, (word) "NewMultiGravityPool")
   ;
   }

static void GGMultiGravityImpl←P0(formal←c078, formal←c077)
   word formal←c078;
   word formal←c077;
   {
   register ptr gf←c59416 =  (ptr) &globalframe;
   /* GGMultiGravityImpl: */ 
SOURCE(255, 43164)
   /* moved to installation proc */ 
SOURCE(37190, 502)
   (* (( (ptr) gf←c59416)+5) ) = (word) (( (bPt) gf←c59416)+476)/* var←c50104 */ ;
   (* (( (ptr) gf←c59416)+12) ) = (word) (( (bPt) gf←c59416)+476)/* var←c50104 */ ;
   (* (( (ptr) gf←c59416)+13) ) = (word) (( (bPt) gf←c59416)+468)/* var←c50072 */ ;
   (* (( (ptr) gf←c59416)+19) ) = (word) (( (bPt) gf←c59416)+476)/* var←c50104 */ ;
   (* (( (ptr) gf←c59416)+20) ) = (word) (( (bPt) gf←c59416)+460)/* var←c50040 */ ;
   (* (( (ptr) gf←c59416)+21) ) = (word) (( (bPt) gf←c59416)+452)/* var←c50008 */ ;
   (* (( (ptr) gf←c59416)+26) ) = (word) (( (bPt) gf←c59416)+476)/* var←c50104 */ ;
   (* (( (ptr) gf←c59416)+27) ) = (word) (( (bPt) gf←c59416)+444)/* var←c49976 */ ;
   (* (( (ptr) gf←c59416)+28) ) = (word) (( (bPt) gf←c59416)+436)/* var←c49944 */ ;
   (* (( (ptr) gf←c59416)+29) ) = (word) (( (bPt) gf←c59416)+428)/* var←c49912 */ ;
   (* (( (ptr) gf←c59416)+33) ) = (word) (( (bPt) gf←c59416)+476)/* var←c50104 */ ;
   (* (( (ptr) gf←c59416)+34) ) = (word) (( (bPt) gf←c59416)+420)/* var←c49880 */ ;
   (* (( (ptr) gf←c59416)+35) ) = (word) (( (bPt) gf←c59416)+412)/* var←c49848 */ ;
   (* (( (ptr) gf←c59416)+36) ) = (word) (( (bPt) gf←c59416)+404)/* var←c49816 */ ;
   (* (( (ptr) gf←c59416)+37) ) = (word) (( (bPt) gf←c59416)+396)/* var←c49784 */ ;
   (* (( (ptr) gf←c59416)+40) ) = (word) (( (bPt) gf←c59416)+476)/* var←c50104 */ ;
   (* (( (ptr) gf←c59416)+41) ) = (word) (( (bPt) gf←c59416)+388)/* var←c49752 */ ;
   (* (( (ptr) gf←c59416)+42) ) = (word) (( (bPt) gf←c59416)+476)/* var←c50104 */ ;
   (* (( (ptr) gf←c59416)+43) ) = (word) (( (bPt) gf←c59416)+372)/* var←c49688 */ ;
   (* (( (ptr) gf←c59416)+44) ) = (word) (( (bPt) gf←c59416)+476)/* var←c50104 */ ;
   (* (( (ptr) gf←c59416)+45) ) = (word) (( (bPt) gf←c59416)+476)/* var←c50104 */ ;
   (* (( (ptr) gf←c59416)+47) ) = (word) (( (bPt) gf←c59416)+476)/* var←c50104 */ ;
   (* (( (ptr) gf←c59416)+48) ) = (word) (( (bPt) gf←c59416)+364)/* var←c49656 */ ;
   (* (( (ptr) gf←c59416)+49) ) = (word) (( (bPt) gf←c59416)+356)/* var←c49624 */ ;
   (* (( (ptr) gf←c59416)+50) ) = (word) (( (bPt) gf←c59416)+476)/* var←c50104 */ ;
   (* (( (ptr) gf←c59416)+51) ) = (word) (( (bPt) gf←c59416)+476)/* var←c50104 */ ;
   (* (( (ptr) gf←c59416)+52) ) = (word) (( (bPt) gf←c59416)+476)/* var←c50104 */ ;
   (* (( (ptr) gf←c59416)+53) ) = (word) (( (bPt) gf←c59416)+476)/* var←c50104 */ ;
   }

static void Map←P60(formal←c089, formal←c01049, formal←c01050, formal←c01051, formal←c01052, formal←c01053, formal←c01054)
   word formal←c089;
   W2 formal←c01049;
   word formal←c01050;
   word formal←c01051;
   word formal←c01052;
   word formal←c01053;
   word formal←c01054;
   {
   W17 var←c59448;
   /* declaration of testPoint←v7196 skipped */ 
   /* declaration of t←v7224 skipped */ 
   /* declaration of alignBag←v7252 skipped */ 
   /* declaration of sceneBag←v7280 skipped */ 
   /* declaration of ggData←v7308 skipped */ 
   /* declaration of intersections←v7336 skipped */ 
   /* declaration of resultPoint←v7380 skipped */ 
   /* declaration of normal←v7408 skipped */ 
   /* declaration of feature←v7436 skipped */ 
   /* declaration of hitData←v7464 skipped */ 
   (*  (W2Pt) (( (ptr) &var←c59448)+4)/* testPoint←v7196 */  ) = formal←c01049;
   (* (( (ptr) &var←c59448)+6)/* t←v7224 */  ) = formal←c01050;
   (* (( (ptr) &var←c59448)+7)/* alignBag←v7252 */  ) = formal←c01051;
   (* (( (ptr) &var←c59448)+8)/* sceneBag←v7280 */  ) = formal←c01052;
   (* (( (ptr) &var←c59448)+9)/* ggData←v7308 */  ) = formal←c01053;
   (* (( (ptr) &var←c59448)+10)/* intersections←v7336 */  ) = formal←c01054;
   /* Map: */ 
SOURCE(3169, 849)
SOURCE(3169, 849)
   (* (( (ptr) &var←c59448)+15)/* feature←v7436 */  ) = 0;
SOURCE(3169, 849)
   (* (( (ptr) &var←c59448)+16)/* hitData←v7464 */  ) = 0;
SOURCE(3390, 628)
   {
      word var←c01028;
      var←c01028 = (word) &var←c59448;
       (void) (word) XR←Enable(( ((word)  (fPt) NoName←Q7404) ), ( ((word)  (fPt) NoName←Q7704) ), var←c01028);
      };
   /* removed tail goto */ 
   (*  (W2Pt) formal←c089 ) = (*  (W2Pt) (( (ptr) &var←c59448)+11)/* resultPoint←v7380 */  );
   (*  (W2Pt) (( (ptr) formal←c089)+2) ) = (*  (W2Pt) (( (ptr) &var←c59448)+13)/* normal←v7408 */  );
   (* (( (ptr) formal←c089)+4) ) = (* (( (ptr) &var←c59448)+15)/* feature←v7436 */  );
   (* (( (ptr) formal←c089)+5) ) = (* (( (ptr) &var←c59448)+16)/* hitData←v7464 */  );
   return;
   }

static word NoName←Q7404(formal←c0963)
   word formal←c0963;
   {
   register ptr gf←c0962 =  (ptr) &globalframe;
SOURCE(3461, 57)
   {
      word gravityType←v16112;
SOURCE(3461, 57)
      {
         word pd55;
         pd55 = (* (( (ptr) (* (( (ptr) gf←c0962)+201)/* var←c51448 */  ))+93) );
         gravityType←v16112 = (word) ( *( (fPt) ((*  (ptr) pd55 ))))((* ((( (ptr) formal←c0963)+9)) ), pd55);
         };
SOURCE(3520, 40)
      {
         word pd56;
         pd56 = (* (( (ptr) (* (( (ptr) gf←c0962)+202)/* var←c51480 */  ))+12) );
         (void) ( *( (fPt) ((*  (ptr) pd56 ))))((* (( (ptr) gf←c0962)+85) ), (* (( (ptr) gf←c0962)+84) ), pd56);
         };
SOURCE(3562, 412)
      {
         word pd57;
         pd57 = (* (( (ptr) (* (( (ptr) gf←c0962)+201)/* var←c51448 */  ))+89) );
         if ((0 != (word) ( *( (fPt) ((*  (ptr) pd57 ))))((* ((( (ptr) formal←c0963)+9)) ), pd57))) {
SOURCE(3599, 291)
            {
               word var←c51512;
               var←c51512 = gravityType←v16112;
               switch (var←c51512) {
                  case 1: 
SOURCE(3642, 114)
                     {
                        W6 var←c51544;
                        (void) PointsPreferred←P120((word) &var←c51544, (*  (W2Pt) (( (ptr) formal←c0963)+4) ), (* (( (ptr) formal←c0963)+6) ), (* (
/*1*/   ( (ptr) formal←c0963)+7) ), (* (( (ptr) formal←c0963)+8) ), (* (( (ptr) formal←c0963)+9) )
                           , (* (( (ptr) formal←c0963)+10) ));
                        (* (( (ptr) formal←c0963)+16) ) = var←c51544.f5;
                        (* (( (ptr) formal←c0963)+15) ) = var←c51544.f4;
                        (*  (W2Pt) (( (ptr) formal←c0963)+13) ) = (*  (W2Pt) (( (ptr) &var←c51544)+2) );
                        (*  (W2Pt) (( (ptr) formal←c0963)+11) ) = (*  (W2Pt) &var←c51544 );
                        };
                     break;
                  case 0: case 2: 
SOURCE(3792, 98)
                     {
                        W6 var←c51576;
                        (void) LinesPreferred←P180((word) &var←c51576, (*  (W2Pt) (( (ptr) formal←c0963)+4) ), (* (( (ptr) formal←c0963)+6) ), (* (
/*1*/   ( (ptr) formal←c0963)+7) ), (* (( (ptr) formal←c0963)+8) ), (* (( (ptr) formal←c0963)+9) ));
                        (* (( (ptr) formal←c0963)+16) ) = var←c51576.f5;
                        (* (( (ptr) formal←c0963)+15) ) = var←c51576.f4;
                        (*  (W2Pt) (( (ptr) formal←c0963)+13) ) = (*  (W2Pt) (( (ptr) &var←c51576)+2) );
                        (*  (W2Pt) (( (ptr) formal←c0963)+11) ) = (*  (W2Pt) &var←c51576 );
                        };
                     break;
                  default: 
SOURCE(3903, 5)
                     (void) XR←RaiseUnnamedError();
                     break;
                  };
               };
            }
         else {
SOURCE(3919, 23)
            (*  (W2Pt) (( (ptr) formal←c0963)+11) ) = (*  (W2Pt) (( (ptr) formal←c0963)+4) );
SOURCE(3944, 13)
            (* (( (ptr) formal←c0963)+15) ) = 0;
SOURCE(3959, 15)
            (* (( (ptr) formal←c0963)+13) ) = (*  (ptr) &fc58 );
            (* (( (ptr) formal←c0963)+14) ) = (*  (ptr) &fc59 );
            };
         };
SOURCE(3979, 39)
      {
         word pd60;
         pd60 = (* (( (ptr) (* (( (ptr) gf←c0962)+202)/* var←c51480 */  ))+14) );
         (void) ( *( (fPt) ((*  (ptr) pd60 ))))((* (( (ptr) gf←c0962)+85) ), (* (( (ptr) gf←c0962)+84) ), pd60);
         };
      };
   return(0);
   }

static void PointsPreferred←P120(formal←c0124, testPoint←v7540, t←v7568, alignBag←v7596, sceneBag←v7624, ggData←v7652, intersections←v7680)
   word formal←c0124;
   W2 testPoint←v7540;
   word t←v7568;
   word alignBag←v7596;
   word sceneBag←v7624;
   word ggData←v7652;
   word intersections←v7680;
   {
   W2 resultPoint←v7724;
   W2 normal←v7752;
   word feature←v7780;
   word hitData←v7808;
   word count←v16156;
   word nearVEF←v16184 = 0;
   /* PointsPreferred: */ 
SOURCE(4023, 947)
SOURCE(4023, 947)
   feature←v7780 = 0;
SOURCE(4023, 947)
   hitData←v7808 = 0;
SOURCE(4301, 96)
   {
      W2 var←c51608;
      (void) MultiPointsPreferred←P1140((word) &var←c51608, testPoint←v7540, t←v7568, alignBag←v7596, sceneBag←v7624, ggData←v7652
         , intersections←v7680);
      count←v16156 = var←c51608.f1;
      nearVEF←v16184 = var←c51608.f0;
      };
SOURCE(4399, 54)
   if ((count←v16156 == 0)) {
SOURCE(4417, 36)
      resultPoint←v7724 = testPoint←v7540;
      normal←v7752.f0 = (*  (ptr) &fc58 );
      normal←v7752.f1 = (*  (ptr) &fc59 );
      feature←v7780 = 0;
      hitData←v7808 = 0;
      goto lab←L100003;
      };
SOURCE(4455, 515)
   if ((count←v16156 == 1)) {
SOURCE(4473, 38)
      {
         W6 var←c51672;
         (void) PrepareWinner←P300((word) &var←c51672, nearVEF←v16184, 0);
         resultPoint←v7724 = (*  (W2Pt) &var←c51672 );
         normal←v7752 = (*  (W2Pt) (( (ptr) &var←c51672)+2) );
         feature←v7780 = var←c51672.f4;
         hitData←v7808 = var←c51672.f5;
         /* removed tail goto */ 
         };
      }
   else {
SOURCE(4511, 470)
      {
         word neighborCount←v16228 = 1;
         word nearestDist←v16284;
SOURCE(4571, 22)
         nearestDist←v16284 = (*  (ptr) &fc59 );
SOURCE(4595, 29)
         {
            word limit61;
            nearestDist←v16284 = (*  (ptr) (* ((( (ptr) nearVEF←v16184)+1)+(
                  limit61 = (*  (ptr) nearVEF←v16184 ),
                  BCK(0, limit61)
                  )) ) );
            };
SOURCE(4626, 103)
         {
            register word i←v16328 = 1;
            register word noName←c51704;
            noName←c51704 = count←v16156;
            if ((i←v16328 >= noName←c51704)) {
               goto lab←L100004;
               };
            lab←L100007: ;
SOURCE(4654, 75)
            {
               word limit62;
               word x63;
               word x64;
               word x66;
               if (((
                  x63 = (*  (ptr) (* ((( (ptr) nearVEF←v16184)+1)+(
                        limit62 = (*  (ptr) nearVEF←v16184 ),
                        BCK(i←v16328, limit62)
                        )) ) ),  *(float*)&x63
                  ) - (
                  x64 = nearestDist←v16284,  *(float*)&x64
                  ) < (
                  x66 = (*  (ptr) &fc65 ),  *(float*)&x66
                  ))) {
SOURCE(4696, 33)
                  neighborCount←v16228 = (neighborCount←v16228 + 1);
                  };
               };
            i←v16328 = (i←v16328 + 1);
            if ((i←v16328 < noName←c51704)) {
               goto lab←L100007;
               };
            lab←L100004: ;
            };
SOURCE(4740, 58)
         if ((neighborCount←v16228 == 1)) {
SOURCE(4766, 32)
            {
               W6 var←c51736;
               (void) PrepareWinner←P300((word) &var←c51736, nearVEF←v16184, 0);
               resultPoint←v7724 = (*  (W2Pt) &var←c51736 );
               normal←v7752 = (*  (W2Pt) (( (ptr) &var←c51736)+2) );
               feature←v7780 = var←c51736.f4;
               hitData←v7808 = var←c51736.f5;
               goto lab←L100003;
               };
            };
SOURCE(4800, 170)
         {
            register word i←v16372 = 0;
            register word noName←c51768;
            noName←c51768 = neighborCount←v16228;
            if ((i←v16372 >= noName←c51768)) {
               goto lab←L100008;
               };
            lab←L100011: ;
SOURCE(4836, 78)
            {
               word limit67;
               if (((*  (ptr) (* (( (ptr) (* ((( (ptr) nearVEF←v16184)+1)+(
                        limit67 = (*  (ptr) nearVEF←v16184 ),
                        BCK(i←v16372, limit67)
                        )) ))+5) ) ) == 0)) {
SOURCE(4882, 32)
                  {
                     W6 var←c51800;
                     (void) PrepareWinner←P300((word) &var←c51800, nearVEF←v16184, i←v16372);
                     resultPoint←v7724 = (*  (W2Pt) &var←c51800 );
                     normal←v7752 = (*  (W2Pt) (( (ptr) &var←c51800)+2) );
                     feature←v7780 = var←c51800.f4;
                     hitData←v7808 = var←c51800.f5;
                     goto lab←L100003;
                     };
                  };
               };
            i←v16372 = (i←v16372 + 1);
            if ((i←v16372 < noName←c51768)) {
               goto lab←L100011;
               };
            lab←L100008: ;
SOURCE(4938, 32)
            {
               W6 var←c51832;
               (void) PrepareWinner←P300((word) &var←c51832, nearVEF←v16184, 0);
               resultPoint←v7724 = (*  (W2Pt) &var←c51832 );
               normal←v7752 = (*  (W2Pt) (( (ptr) &var←c51832)+2) );
               feature←v7780 = var←c51832.f4;
               hitData←v7808 = var←c51832.f5;
               /* removed tail goto */ 
               };
            };
         };
      };
   lab←L100003: ;
   (*  (W2Pt) formal←c0124 ) = resultPoint←v7724;
   (*  (W2Pt) (( (ptr) formal←c0124)+2) ) = normal←v7752;
   (* (( (ptr) formal←c0124)+4) ) = feature←v7780;
   (* (( (ptr) formal←c0124)+5) ) = hitData←v7808;
   return;
   }

static void LinesPreferred←P180(formal←c0142, testPoint←v7880, t←v7908, alignBag←v7936, sceneBag←v7964, ggData←v7992)
   word formal←c0142;
   W2 testPoint←v7880;
   word t←v7908;
   word alignBag←v7936;
   word sceneBag←v7964;
   word ggData←v7992;
   {
   W2 resultPoint←v8036;
   W2 normal←v8064;
   word feature←v8092;
   word hitData←v8120;
   word nearVEF←v16416 = 0;
   word count←v16444;
   /* LinesPreferred: */ 
SOURCE(4987, 816)
SOURCE(4987, 816)
   feature←v8092 = 0;
SOURCE(4987, 816)
   hitData←v8120 = 0;
SOURCE(5235, 80)
   {
      W2 var←c51864;
      (void) MultiLinesPreferred←P1080((word) &var←c51864, testPoint←v7880, t←v7908, alignBag←v7936, sceneBag←v7964, ggData←v7992)
      ;
      count←v16444 = var←c51864.f1;
      nearVEF←v16416 = var←c51864.f0;
      };
SOURCE(5317, 54)
   if ((count←v16444 == 0)) {
SOURCE(5335, 36)
      resultPoint←v8036 = testPoint←v7880;
      normal←v8064.f0 = (*  (ptr) &fc58 );
      normal←v8064.f1 = (*  (ptr) &fc59 );
      feature←v8092 = 0;
      hitData←v8120 = 0;
      goto lab←L100012;
      };
SOURCE(5373, 430)
   if ((count←v16444 == 1)) {
SOURCE(5391, 38)
      {
         W6 var←c51928;
         (void) PrepareWinner←P300((word) &var←c51928, nearVEF←v16416, 0);
         resultPoint←v8036 = (*  (W2Pt) &var←c51928 );
         normal←v8064 = (*  (W2Pt) (( (ptr) &var←c51928)+2) );
         feature←v8092 = var←c51928.f4;
         hitData←v8120 = var←c51928.f5;
         /* removed tail goto */ 
         };
      }
   else {
SOURCE(5771, 32)
      {
         W6 var←c51960;
         (void) PrepareWinner←P300((word) &var←c51960, nearVEF←v16416, 0);
         resultPoint←v8036 = (*  (W2Pt) &var←c51960 );
         normal←v8064 = (*  (W2Pt) (( (ptr) &var←c51960)+2) );
         feature←v8092 = var←c51960.f4;
         hitData←v8120 = var←c51960.f5;
         /* removed tail goto */ 
         };
      };
   lab←L100012: ;
   (*  (W2Pt) formal←c0142 ) = resultPoint←v8036;
   (*  (W2Pt) (( (ptr) formal←c0142)+2) ) = normal←v8064;
   (* (( (ptr) formal←c0142)+4) ) = feature←v8092;
   (* (( (ptr) formal←c0142)+5) ) = hitData←v8120;
   return;
   }

static void FacesPreferred←P240(formal←c0158, testPoint←v8192, t←v8220, alignBag←v8248, sceneBag←v8276, ggData←v8304)
   word formal←c0158;
   W2 testPoint←v8192;
   word t←v8220;
   word alignBag←v8248;
   word sceneBag←v8276;
   word ggData←v8304;
   {
   W2 resultPoint←v8348;
   W2 normal←v8376;
   word feature←v8404;
   word hitData←v8432;
   word nearVEF←v16488 = 0;
   word count←v16516;
   /* FacesPreferred: */ 
SOURCE(5812, 420)
SOURCE(5812, 420)
   feature←v8404 = 0;
SOURCE(5812, 420)
   hitData←v8432 = 0;
SOURCE(6061, 80)
   {
      W2 var←c51992;
      (void) MultiFacesPreferred←P1020((word) &var←c51992, testPoint←v8192, t←v8220, alignBag←v8248, sceneBag←v8276, ggData←v8304)
      ;
      count←v16516 = var←c51992.f1;
      nearVEF←v16488 = var←c51992.f0;
      };
SOURCE(6143, 54)
   if ((count←v16516 == 0)) {
SOURCE(6161, 36)
      resultPoint←v8348 = testPoint←v8192;
      normal←v8376.f0 = (*  (ptr) &fc58 );
      normal←v8376.f1 = (*  (ptr) &fc59 );
      feature←v8404 = 0;
      hitData←v8432 = 0;
      goto lab←L100013;
      };
SOURCE(6199, 33)
   {
      W6 var←c52056;
      (void) PrepareWinner←P300((word) &var←c52056, nearVEF←v16488, 0);
      resultPoint←v8348 = (*  (W2Pt) &var←c52056 );
      normal←v8376 = (*  (W2Pt) (( (ptr) &var←c52056)+2) );
      feature←v8404 = var←c52056.f4;
      hitData←v8432 = var←c52056.f5;
      /* removed tail goto */ 
      };
   lab←L100013: ;
   (*  (W2Pt) formal←c0158 ) = resultPoint←v8348;
   (*  (W2Pt) (( (ptr) formal←c0158)+2) ) = normal←v8376;
   (* (( (ptr) formal←c0158)+4) ) = feature←v8404;
   (* (( (ptr) formal←c0158)+5) ) = hitData←v8432;
   return;
   }

static void PrepareWinner←P300(formal←c0166, nearVEF←v8504, index←v8532)
   word formal←c0166;
   word nearVEF←v8504;
   word index←v8532;
   {
   W2 resultPoint←v8576;
   W2 normal←v8604;
   word feature←v8632;
   word hitData←v8660;
   word goodPoint←v16560;
   /* PrepareWinner: */ 
SOURCE(6236, 312)
SOURCE(6236, 312)
   feature←v8632 = 0;
SOURCE(6236, 312)
   hitData←v8660 = 0;
SOURCE(6391, 37)
   {
      word limit68;
      goodPoint←v16560 = (* ((( (ptr) nearVEF←v8504)+1)+(
            limit68 = (*  (ptr) nearVEF←v8504 ),
            BCK(index←v8532, limit68)
            )) );
      };
SOURCE(6430, 29)
   resultPoint←v8576 = (*  (W2Pt) (( (ptr) goodPoint←v16560)+1) );
SOURCE(6461, 25)
   normal←v8604 = (*  (W2Pt) (( (ptr) goodPoint←v16560)+3) );
SOURCE(6488, 31)
   feature←v8632 = (* (( (ptr) goodPoint←v16560)+5) );
SOURCE(6521, 27)
   hitData←v8660 = (* (( (ptr) goodPoint←v16560)+6) );
   /* removed tail goto */ 
   (*  (W2Pt) formal←c0166 ) = resultPoint←v8576;
   (*  (W2Pt) (( (ptr) formal←c0166)+2) ) = normal←v8604;
   (* (( (ptr) formal←c0166)+4) ) = feature←v8632;
   (* (( (ptr) formal←c0166)+5) ) = hitData←v8660;
   return;
   }

static word EmptyCycler←P360(testPoint←v8732)
   W2 testPoint←v8732;
   {
   register ptr gf←c59480 =  (ptr) &globalframe;
   word featureCycler←v8776;
   /* EmptyCycler: */ 
SOURCE(6554, 186)
SOURCE(6554, 186)
   featureCycler←v8776 = 0;
SOURCE(6641, 99)
   {
      word var←c52088;
      var←c52088 = XR←NewObject(20, (* (( (ptr) gf←c59480)+58) ));
      (* (( (ptr) var←c52088)+2) ) =  (word) -1;
      (*  (W2Pt) (( (ptr) var←c52088)+3) ) = testPoint←v8732;
      featureCycler←v8776 = var←c52088;
      };
SOURCE(6554, 186)
   return(featureCycler←v8776);
   }

static word MapCycler←P420(formal←c01055, formal←c01056, formal←c01057, formal←c01058, formal←c01059, formal←c01060)
   W2 formal←c01055;
   word formal←c01056;
   word formal←c01057;
   word formal←c01058;
   word formal←c01059;
   word formal←c01060;
   {
   W12 var←c59512;
   /* declaration of testPoint←v8836 skipped */ 
   /* declaration of t←v8864 skipped */ 
   /* declaration of alignBag←v8892 skipped */ 
   /* declaration of sceneBag←v8920 skipped */ 
   /* declaration of ggData←v8948 skipped */ 
   /* declaration of intersections←v8976 skipped */ 
   /* declaration of featureCycler←v9020 skipped */ 
   (*  (W2Pt) (( (ptr) &var←c59512)+4)/* testPoint←v8836 */  ) = formal←c01055;
   (* (( (ptr) &var←c59512)+6)/* t←v8864 */  ) = formal←c01056;
   (* (( (ptr) &var←c59512)+7)/* alignBag←v8892 */  ) = formal←c01057;
   (* (( (ptr) &var←c59512)+8)/* sceneBag←v8920 */  ) = formal←c01058;
   (* (( (ptr) &var←c59512)+9)/* ggData←v8948 */  ) = formal←c01059;
   (* (( (ptr) &var←c59512)+10)/* intersections←v8976 */  ) = formal←c01060;
   /* MapCycler: */ 
SOURCE(6746, 666)
SOURCE(6746, 666)
   (* (( (ptr) &var←c59512)+11)/* featureCycler←v9020 */  ) = 0;
SOURCE(6927, 485)
   {
      word var←c01029;
      var←c01029 = (word) &var←c59512;
       (void) (word) XR←Enable(( ((word)  (fPt) NoName←Q7464) ), ( ((word)  (fPt) NoName←Q7644) ), var←c01029);
      };
SOURCE(6746, 666)
   return((* (( (ptr) &var←c59512)+11)/* featureCycler←v9020 */  ));
   }

static word NoName←Q7464(formal←c0966)
   word formal←c0966;
   {
   register ptr gf←c0965 =  (ptr) &globalframe;
SOURCE(6998, 57)
   {
      word gravityType←v16604;
SOURCE(6998, 57)
      {
         word pd69;
         pd69 = (* (( (ptr) (* (( (ptr) gf←c0965)+201)/* var←c51448 */  ))+93) );
         gravityType←v16604 = (word) ( *( (fPt) ((*  (ptr) pd69 ))))((* ((( (ptr) formal←c0966)+9)) ), pd69);
         };
SOURCE(7057, 355)
      {
         word pd70;
         pd70 = (* (( (ptr) (* (( (ptr) gf←c0965)+201)/* var←c51448 */  ))+89) );
         if ((0 != (word) ( *( (fPt) ((*  (ptr) pd70 ))))((* ((( (ptr) formal←c0966)+9)) ), pd70))) {
SOURCE(7094, 251)
            {
               word var←c52152;
               var←c52152 = gravityType←v16604;
               switch (var←c52152) {
                  case 1: 
SOURCE(7137, 94)
                     (* (( (ptr) formal←c0966)+11) ) = (word) PointsPreferredCycler←P540((*  (W2Pt) (( (ptr) formal←c0966)+4) ), (* (( (ptr) formal←c0966)+6)
                         ), (* (( (ptr) formal←c0966)+7) ), (* (( (ptr) formal←c0966)+8) ), (* (( (ptr) formal←c0966)+9) ), (* (( (ptr) formal←c0966)+10)
                         )
                        , 1);
                     break;
                  case 0: case 2: 
SOURCE(7267, 78)
                     (* (( (ptr) formal←c0966)+11) ) = (word) LinesPreferredCycler←P600((*  (W2Pt) (( (ptr) formal←c0966)+4) ), (* (( (ptr) formal←c0966)+6)
                         ), (* (( (ptr) formal←c0966)+7) ), (* (( (ptr) formal←c0966)+8) ), (* (( (ptr) formal←c0966)+9) ));
                     break;
                  default: 
SOURCE(7358, 5)
                     (void) XR←RaiseUnnamedError();
                     break;
                  };
               };
            }
         else {
SOURCE(7374, 38)
            (* (( (ptr) formal←c0966)+11) ) = (word) EmptyCycler←P360((*  (W2Pt) ((( (ptr) formal←c0966)+4)) ));
            };
         };
      };
   return(0);
   }

static word CopyVEF←P480(vef←v9080, count←v9108)
   word vef←v9080;
   word count←v9108;
   {
   register ptr gf←c59544 =  (ptr) &globalframe;
   word copy←v9152;
   word oldGoodPoint←v16648 = 0;
   word newGoodPoint←v16676 = 0;
   /* CopyVEF: */ 
SOURCE(7421, 481)
SOURCE(7421, 481)
   copy←v9152 = 0;
SOURCE(7559, 44)
   {
      word var←c52184;
      word var←c52216;
      word var←c52248;
      var←c52184 = BCK(count←v9108, 67108863);
      var←c52216 = ((word) var←c52184 << 2);
      var←c52248 = XR←NewObject((4 + var←c52216), (* (( (ptr) gf←c59544)+59) ));
      (*  (ptr) var←c52248 ) = var←c52184;
      copy←v9152 = var←c52248;
      };
SOURCE(7605, 297)
   {
      register word i←v16720 = 0;
      register word noName←c52280;
      noName←c52280 = count←v9108;
      if ((i←v16720 >= noName←c52280)) {
         goto lab←L100017;
         };
      lab←L100020: ;
SOURCE(7633, 21)
      {
         word limit71;
         oldGoodPoint←v16648 = (* ((( (ptr) vef←v9080)+1)+(
               limit71 = (*  (ptr) vef←v9080 ),
               BCK(i←v16720, limit71)
               )) );
         };
SOURCE(7656, 222)
      {
         word var←c52312;
         var←c52312 = XR←NewObject(36, (* (( (ptr) gf←c59544)+60) ));
         (*  (ptr) var←c52312 ) = (*  (ptr) oldGoodPoint←v16648 );
         (*  (W2Pt) (( (ptr) var←c52312)+1) ) = (*  (W2Pt) (( (ptr) oldGoodPoint←v16648)+1) );
         (*  (W2Pt) (( (ptr) var←c52312)+3) ) = (*  (W2Pt) (( (ptr) oldGoodPoint←v16648)+3) );
         (* (( (ptr) var←c52312)+5) ) = (* (( (ptr) oldGoodPoint←v16648)+5) );
         (* (( (ptr) var←c52312)+6) ) = (* (( (ptr) oldGoodPoint←v16648)+6) );
         (* (( (ptr) var←c52312)+7) ) = (* (( (ptr) oldGoodPoint←v16648)+7) );
         newGoodPoint←v16676 = var←c52312;
         };
SOURCE(7880, 22)
      {
         word limit72;
         (* ((( (ptr) copy←v9152)+1)+(
               limit72 = (*  (ptr) copy←v9152 ),
               BCK(i←v16720, limit72)
               )) ) = newGoodPoint←v16676;
         };
      i←v16720 = (i←v16720 + 1);
      if ((i←v16720 < noName←c52280)) {
         goto lab←L100020;
         };
      lab←L100017: ;
      };
SOURCE(7421, 481)
   return(copy←v9152);
   }

static word PointsPreferredCycler←P540(testPoint←v9212, t←v9240, alignBag←v9268, sceneBag←v9296, ggData←v9324, intersections←v9352, maxDimension←v9380)
   W2 testPoint←v9212;
   word t←v9240;
   word alignBag←v9268;
   word sceneBag←v9296;
   word ggData←v9324;
   word intersections←v9352;
   word maxDimension←v9380;
   {
   register ptr gf←c59576 =  (ptr) &globalframe;
   word featureCycler←v9444;
   word count←v16764;
   word nearVEF←v16792 = 0;
   /* PointsPreferredCycler: */ 
SOURCE(7917, 1279)
SOURCE(7917, 1279)
   featureCycler←v9444 = 0;
SOURCE(8181, 1015)
SOURCE(8187, 96)
   {
      W2 var←c52344;
      (void) MultiPointsPreferred←P1140((word) &var←c52344, testPoint←v9212, t←v9240, alignBag←v9268, sceneBag←v9296, ggData←v9324
         , intersections←v9352);
      count←v16764 = var←c52344.f1;
      nearVEF←v16792 = var←c52344.f0;
      };
SOURCE(8285, 48)
   if ((count←v16764 == 0)) {
SOURCE(8303, 30)
      return((word) EmptyCycler←P360(testPoint←v9212));
      };
SOURCE(8335, 692)
   if ((count←v16764 == 1)) {
SOURCE(8353, 27)
      goto lab←L100021;
      }
   else {
SOURCE(8380, 658)
      {
         word neighborCount←v16836 = 1;
         word nearestDist←v16892;
SOURCE(8440, 22)
         nearestDist←v16892 = (*  (ptr) &fc59 );
SOURCE(8465, 157)
         {
            word var←c52408;
            var←c52408 = XR←NewObject(20, (* (( (ptr) gf←c59576)+58) ));
            (* (( (ptr) var←c52408)+1) ) = count←v16764;
            (* (( (ptr) var←c52408)+2) ) =  (word) -1;
            (*  (W2Pt) (( (ptr) var←c52408)+3) ) = testPoint←v9212;
            featureCycler←v9444 = var←c52408;
            };
SOURCE(8624, 29)
         {
            word limit73;
            nearestDist←v16892 = (*  (ptr) (* ((( (ptr) nearVEF←v16792)+1)+(
                  limit73 = (*  (ptr) nearVEF←v16792 ),
                  BCK(0, limit73)
                  )) ) );
            };
SOURCE(8655, 103)
         {
            register word i←v16936 = 1;
            register word noName←c52440;
            noName←c52440 = count←v16764;
            if ((i←v16936 >= noName←c52440)) {
               goto lab←L100022;
               };
            lab←L100025: ;
SOURCE(8683, 75)
            {
               word limit74;
               word x75;
               word x76;
               word x77;
               if (((
                  x75 = (*  (ptr) (* ((( (ptr) nearVEF←v16792)+1)+(
                        limit74 = (*  (ptr) nearVEF←v16792 ),
                        BCK(i←v16936, limit74)
                        )) ) ),  *(float*)&x75
                  ) - (
                  x76 = nearestDist←v16892,  *(float*)&x76
                  ) < (
                  x77 = (*  (ptr) &fc65 ),  *(float*)&x77
                  ))) {
SOURCE(8725, 33)
                  neighborCount←v16836 = (neighborCount←v16836 + 1);
                  };
               };
            i←v16936 = (i←v16936 + 1);
            if ((i←v16936 < noName←c52440)) {
               goto lab←L100025;
               };
            lab←L100022: ;
            };
SOURCE(8769, 26)
         if ((neighborCount←v16836 == 1)) {
SOURCE(8795, 21)
            goto lab←L100021;
            };
SOURCE(8818, 47)
         (*  (ptr) featureCycler←v9444 ) = (word) CopyVEF←P480(nearVEF←v16792, count←v16764);
SOURCE(8867, 160)
         {
            register word i←v16980 = 0;
            register word noName←c52472;
            noName←c52472 = neighborCount←v16836;
            if ((i←v16980 >= noName←c52472)) {
               goto lab←L100026;
               };
            lab←L100029: ;
SOURCE(8903, 77)
            {
               word limit78;
               if (((*  (ptr) (* (( (ptr) (* ((( (ptr) nearVEF←v16792)+1)+(
                        limit78 = (*  (ptr) nearVEF←v16792 ),
                        BCK(i←v16980, limit78)
                        )) ))+5) ) ) == 0)) {
SOURCE(8949, 23)
                  (* (( (ptr) featureCycler←v9444)+2) ) = i←v16980;
SOURCE(8974, 6)
                  return(featureCycler←v9444);
                  };
               };
            i←v16980 = (i←v16980 + 1);
            if ((i←v16980 < noName←c52472)) {
               goto lab←L100029;
               };
            lab←L100026: ;
SOURCE(9004, 23)
            (* (( (ptr) featureCycler←v9444)+2) ) = 0;
            };
         };
      };
   goto lab←L100030;
   lab←L100021: ;
SOURCE(9069, 122)
   {
      word var←c52504;
      word var←c52536;
      var←c52504 = (word) CopyVEF←P480(nearVEF←v16792, count←v16764);
      var←c52536 = XR←NewObject(20, (* (( (ptr) gf←c59576)+58) ));
      (*  (ptr) var←c52536 ) = var←c52504;
      (* (( (ptr) var←c52536)+1) ) = count←v16764;
      (*  (W2Pt) (( (ptr) var←c52536)+3) ) = testPoint←v9212;
      featureCycler←v9444 = var←c52536;
      };
   lab←L100030: ;
SOURCE(7917, 1279)
   return(featureCycler←v9444);
   }

static word LinesPreferredCycler←P600(testPoint←v9504, t←v9532, alignBag←v9560, sceneBag←v9588, ggData←v9616)
   W2 testPoint←v9504;
   word t←v9532;
   word alignBag←v9560;
   word sceneBag←v9588;
   word ggData←v9616;
   {
   register ptr gf←c59608 =  (ptr) &globalframe;
   word featureCycler←v9660;
   word nearVEF←v17024 = 0;
   word count←v17052;
   /* LinesPreferredCycler: */ 
SOURCE(9206, 1000)
SOURCE(9206, 1000)
   featureCycler←v9660 = 0;
SOURCE(9414, 792)
SOURCE(9420, 80)
   {
      W2 var←c52568;
      (void) MultiLinesPreferred←P1080((word) &var←c52568, testPoint←v9504, t←v9532, alignBag←v9560, sceneBag←v9588, ggData←v9616)
      ;
      count←v17052 = var←c52568.f1;
      nearVEF←v17024 = var←c52568.f0;
      };
SOURCE(9502, 48)
   if ((count←v17052 == 0)) {
SOURCE(9520, 30)
      return((word) EmptyCycler←P360(testPoint←v9504));
      };
SOURCE(9552, 494)
   if ((count←v17052 == 1)) {
SOURCE(9570, 27)
      goto lab←L100031;
      }
   else {
SOURCE(9597, 451)
      {
         word nearestDist←v17096;
         word bestSceneObject←v17124 =  (word) -1;
         word neighborCount←v17152 = 1;
SOURCE(9599, 22)
         nearestDist←v17096 = (*  (ptr) &fc59 );
SOURCE(9708, 29)
         {
            word limit79;
            nearestDist←v17096 = (*  (ptr) (* ((( (ptr) nearVEF←v17024)+1)+(
                  limit79 = (*  (ptr) nearVEF←v17024 ),
                  BCK(0, limit79)
                  )) ) );
            };
SOURCE(9739, 103)
         {
            register word i←v17224 = 1;
            register word noName←c52632;
            noName←c52632 = count←v17052;
            if ((i←v17224 >= noName←c52632)) {
               goto lab←L100032;
               };
            lab←L100035: ;
SOURCE(9767, 75)
            {
               word limit80;
               word x81;
               word x82;
               word x83;
               if (((
                  x81 = (*  (ptr) (* ((( (ptr) nearVEF←v17024)+1)+(
                        limit80 = (*  (ptr) nearVEF←v17024 ),
                        BCK(i←v17224, limit80)
                        )) ) ),  *(float*)&x81
                  ) - (
                  x82 = nearestDist←v17096,  *(float*)&x82
                  ) < (
                  x83 = (*  (ptr) &fc65 ),  *(float*)&x83
                  ))) {
SOURCE(9809, 33)
                  neighborCount←v17152 = (neighborCount←v17152 + 1);
                  };
               };
            i←v17224 = (i←v17224 + 1);
            if ((i←v17224 < noName←c52632)) {
               goto lab←L100035;
               };
            lab←L100032: ;
            };
SOURCE(9853, 26)
         if ((neighborCount←v17152 == 1)) {
SOURCE(9879, 21)
            goto lab←L100031;
            };
SOURCE(9902, 20)
         bestSceneObject←v17124 =  (word) -1;
SOURCE(9924, 122)
         {
            word var←c52664;
            word var←c52696;
            var←c52664 = (word) CopyVEF←P480(nearVEF←v17024, count←v17052);
            var←c52696 = XR←NewObject(20, (* (( (ptr) gf←c59608)+58) ));
            (*  (ptr) var←c52696 ) = var←c52664;
            (* (( (ptr) var←c52696)+1) ) = count←v17052;
            (*  (W2Pt) (( (ptr) var←c52696)+3) ) = testPoint←v9504;
            featureCycler←v9660 = var←c52696;
            };
         };
      };
   goto lab←L100036;
   lab←L100031: ;
SOURCE(10079, 122)
   {
      word var←c52728;
      word var←c52760;
      var←c52728 = (word) CopyVEF←P480(nearVEF←v17024, count←v17052);
      var←c52760 = XR←NewObject(20, (* (( (ptr) gf←c59608)+58) ));
      (*  (ptr) var←c52760 ) = var←c52728;
      (* (( (ptr) var←c52760)+1) ) = count←v17052;
      (*  (W2Pt) (( (ptr) var←c52760)+3) ) = testPoint←v9504;
      featureCycler←v9660 = var←c52760;
      };
   lab←L100036: ;
SOURCE(9206, 1000)
   return(featureCycler←v9660);
   }

static word FacesPreferredCycler←P660(testPoint←v9720, t←v9748, alignBag←v9776, sceneBag←v9804, ggData←v9832)
   W2 testPoint←v9720;
   word t←v9748;
   word alignBag←v9776;
   word sceneBag←v9804;
   word ggData←v9832;
   {
   register ptr gf←c59640 =  (ptr) &globalframe;
   word featureCycler←v9876;
   word nearVEF←v17268 = 0;
   word count←v17296;
   /* FacesPreferredCycler: */ 
SOURCE(10215, 1027)
SOURCE(10215, 1027)
   featureCycler←v9876 = 0;
SOURCE(10423, 819)
SOURCE(10429, 80)
   {
      W2 var←c52792;
      (void) MultiFacesPreferred←P1020((word) &var←c52792, testPoint←v9720, t←v9748, alignBag←v9776, sceneBag←v9804, ggData←v9832)
      ;
      count←v17296 = var←c52792.f1;
      nearVEF←v17268 = var←c52792.f0;
      };
SOURCE(10511, 48)
   if ((count←v17296 == 0)) {
SOURCE(10529, 30)
      return((word) EmptyCycler←P360(testPoint←v9720));
      };
SOURCE(10561, 18)
   if ((count←v17296 == 1)) {
SOURCE(10579, 27)
      goto lab←L100037;
      }
   else {
SOURCE(10608, 21)
      goto lab←L100037;
      };
   /* c2c skipped dead code */ 
   lab←L100037: ;
SOURCE(11115, 122)
   {
      word var←c52856;
      word var←c52888;
      var←c52856 = (word) CopyVEF←P480(nearVEF←v17268, count←v17296);
      var←c52888 = XR←NewObject(20, (* (( (ptr) gf←c59640)+58) ));
      (*  (ptr) var←c52888 ) = var←c52856;
      (* (( (ptr) var←c52888)+1) ) = count←v17296;
      (*  (W2Pt) (( (ptr) var←c52888)+3) ) = testPoint←v9720;
      featureCycler←v9876 = var←c52888;
      };
SOURCE(10215, 1027)
   return(featureCycler←v9876);
   }

static void FirstFeature←P720(formal←c0249, featureCycler←v9936)
   word formal←c0249;
   word featureCycler←v9936;
   {
   W2 resultPoint←v9980;
   W2 normal←v10008;
   word feature←v10036;
   word hitData←v10064;
   /* FirstFeature: */ 
SOURCE(11250, 181)
SOURCE(11250, 181)
   feature←v10036 = 0;
SOURCE(11250, 181)
   hitData←v10064 = 0;
SOURCE(11396, 35)
   {
      W6 var←c52920;
      (void) GetFeature←P900((word) &var←c52920, featureCycler←v9936, 1);
      resultPoint←v9980 = (*  (W2Pt) &var←c52920 );
      normal←v10008 = (*  (W2Pt) (( (ptr) &var←c52920)+2) );
      feature←v10036 = var←c52920.f4;
      hitData←v10064 = var←c52920.f5;
      /* removed tail goto */ 
      };
   (*  (W2Pt) formal←c0249 ) = resultPoint←v9980;
   (*  (W2Pt) (( (ptr) formal←c0249)+2) ) = normal←v10008;
   (* (( (ptr) formal←c0249)+4) ) = feature←v10036;
   (* (( (ptr) formal←c0249)+5) ) = hitData←v10064;
   return;
   }

static void NextFeature←P780(formal←c0257, featureCycler←v10136)
   word formal←c0257;
   word featureCycler←v10136;
   {
   W2 resultPoint←v10180;
   W2 normal←v10208;
   word feature←v10236;
   word hitData←v10264;
   /* NextFeature: */ 
SOURCE(11437, 180)
SOURCE(11437, 180)
   feature←v10236 = 0;
SOURCE(11437, 180)
   hitData←v10264 = 0;
SOURCE(11582, 35)
   {
      W6 var←c52952;
      (void) GetFeature←P900((word) &var←c52952, featureCycler←v10136, 2);
      resultPoint←v10180 = (*  (W2Pt) &var←c52952 );
      normal←v10208 = (*  (W2Pt) (( (ptr) &var←c52952)+2) );
      feature←v10236 = var←c52952.f4;
      hitData←v10264 = var←c52952.f5;
      /* removed tail goto */ 
      };
   (*  (W2Pt) formal←c0257 ) = resultPoint←v10180;
   (*  (W2Pt) (( (ptr) formal←c0257)+2) ) = normal←v10208;
   (* (( (ptr) formal←c0257)+4) ) = feature←v10236;
   (* (( (ptr) formal←c0257)+5) ) = hitData←v10264;
   return;
   }

static void PreviousFeature←P840(formal←c0265, featureCycler←v10336)
   word formal←c0265;
   word featureCycler←v10336;
   {
   W2 resultPoint←v10380;
   W2 normal←v10408;
   word feature←v10436;
   word hitData←v10464;
   /* PreviousFeature: */ 
SOURCE(11623, 185)
SOURCE(11623, 185)
   feature←v10436 = 0;
SOURCE(11623, 185)
   hitData←v10464 = 0;
SOURCE(11772, 36)
   {
      W6 var←c52984;
      (void) GetFeature←P900((word) &var←c52984, featureCycler←v10336, 0);
      resultPoint←v10380 = (*  (W2Pt) &var←c52984 );
      normal←v10408 = (*  (W2Pt) (( (ptr) &var←c52984)+2) );
      feature←v10436 = var←c52984.f4;
      hitData←v10464 = var←c52984.f5;
      /* removed tail goto */ 
      };
   (*  (W2Pt) formal←c0265 ) = resultPoint←v10380;
   (*  (W2Pt) (( (ptr) formal←c0265)+2) ) = normal←v10408;
   (* (( (ptr) formal←c0265)+4) ) = feature←v10436;
   (* (( (ptr) formal←c0265)+5) ) = hitData←v10464;
   return;
   }

static void GetFeature←P900(formal←c0274, featureCycler←v10536, move←v10564)
   word formal←c0274;
   word featureCycler←v10536;
   word move←v10564;
   {
   W2 resultPoint←v10628;
   W2 normal←v10656;
   word feature←v10684;
   word hitData←v10712;
   /* GetFeature: */ 
SOURCE(11814, 664)
SOURCE(11814, 664)
   feature←v10684 = 0;
SOURCE(11814, 664)
   hitData←v10712 = 0;
SOURCE(11973, 505)
   if ((featureCycler←v10536 == 0)) {
SOURCE(12033, 24)
      resultPoint←v10628.f0 = (*  (ptr) &fc58 );
      resultPoint←v10628.f1 = (*  (ptr) &fc58 );
SOURCE(12068, 15)
      normal←v10656.f0 = (*  (ptr) &fc58 );
      normal←v10656.f1 = (*  (ptr) &fc59 );
SOURCE(12085, 13)
      feature←v10684 = 0;
SOURCE(12100, 13)
      hitData←v10712 = 0;
      }
   else {
SOURCE(12122, 356)
      if (((* (( (ptr) featureCycler←v10536)+1) ) == 0)) {
SOURCE(12186, 37)
         resultPoint←v10628 = (*  (W2Pt) (( (ptr) featureCycler←v10536)+3) );
SOURCE(12225, 15)
         normal←v10656.f0 = (*  (ptr) &fc58 );
         normal←v10656.f1 = (*  (ptr) &fc59 );
SOURCE(12242, 13)
         feature←v10684 = 0;
SOURCE(12257, 13)
         hitData←v10712 = 0;
         }
      else {
SOURCE(12281, 96)
         (* (( (ptr) featureCycler←v10536)+2) ) = IOP2( % ,  (int)(((* (( (ptr) featureCycler←v10536)+2) ) + (move←v10564 - 1)) + 
            (* (( (ptr) featureCycler←v10536)+1) )),  (int)(* (( (ptr) featureCycler←v10536)+1) ));
SOURCE(12379, 99)
         {
            W6 var←c53016;
            {
               word idx84;
               (void) PrepareWinner←P300((word) &var←c53016, (*  (ptr) featureCycler←v10536 ), (
                     idx84 = (* (( (ptr) featureCycler←v10536)+2) ),
                     SGNCK(idx84)
                     ));
               };
            hitData←v10712 = var←c53016.f5;
            feature←v10684 = var←c53016.f4;
            normal←v10656 = (*  (W2Pt) (( (ptr) &var←c53016)+2) );
            resultPoint←v10628 = (*  (W2Pt) &var←c53016 );
            };
         };
      };
   /* removed tail goto */ 
   (*  (W2Pt) formal←c0274 ) = resultPoint←v10628;
   (*  (W2Pt) (( (ptr) formal←c0274)+2) ) = normal←v10656;
   (* (( (ptr) formal←c0274)+4) ) = feature←v10684;
   (* (( (ptr) formal←c0274)+5) ) = hitData←v10712;
   return;
   }

static void MultiMap←P960(formal←c0283, formal←c01061, formal←c01062, formal←c01063, formal←c01064, formal←c01065, formal←c01066)
   word formal←c0283;
   W2 formal←c01061;
   word formal←c01062;
   word formal←c01063;
   word formal←c01064;
   word formal←c01065;
   word formal←c01066;
   {
   W13 var←c59672;
   /* declaration of testPoint←v10784 skipped */ 
   /* declaration of t←v10812 skipped */ 
   /* declaration of alignBag←v10840 skipped */ 
   /* declaration of sceneBag←v10868 skipped */ 
   /* declaration of ggData←v10896 skipped */ 
   /* declaration of intersections←v10924 skipped */ 
   /* declaration of nearVEF←v10968 skipped */ 
   /* declaration of count←v10996 skipped */ 
   (*  (W2Pt) (( (ptr) &var←c59672)+4)/* testPoint←v10784 */  ) = formal←c01061;
   (* (( (ptr) &var←c59672)+6)/* t←v10812 */  ) = formal←c01062;
   (* (( (ptr) &var←c59672)+7)/* alignBag←v10840 */  ) = formal←c01063;
   (* (( (ptr) &var←c59672)+8)/* sceneBag←v10868 */  ) = formal←c01064;
   (* (( (ptr) &var←c59672)+9)/* ggData←v10896 */  ) = formal←c01065;
   (* (( (ptr) &var←c59672)+10)/* intersections←v10924 */  ) = formal←c01066;
   /* MultiMap: */ 
SOURCE(12487, 747)
SOURCE(12487, 747)
   (* (( (ptr) &var←c59672)+11)/* nearVEF←v10968 */  ) = 0;
SOURCE(12682, 552)
   {
      word var←c01030;
      var←c01030 = (word) &var←c59672;
       (void) (word) XR←Enable(( ((word)  (fPt) NoName←Q7524) ), ( ((word)  (fPt) NoName←Q7584) ), var←c01030);
      };
   /* removed tail goto */ 
   (*  (ptr) formal←c0283 ) = (* (( (ptr) &var←c59672)+11)/* nearVEF←v10968 */  );
   (* (( (ptr) formal←c0283)+1) ) = (* (( (ptr) &var←c59672)+12)/* count←v10996 */  );
   return;
   }

static word NoName←Q7524(formal←c0972)
   word formal←c0972;
   {
   register ptr gf←c0971 =  (ptr) &globalframe;
SOURCE(12800, 40)
   {
      word pd85;
      pd85 = (* (( (ptr) (* (( (ptr) gf←c0971)+202)/* var←c51480 */  ))+12) );
      (void) ( *( (fPt) ((*  (ptr) pd85 ))))((* (( (ptr) gf←c0971)+85) ), (* (( (ptr) gf←c0971)+84) ), pd85);
      };
SOURCE(12842, 348)
   {
      word pd86;
      pd86 = (* (( (ptr) (* (( (ptr) gf←c0971)+201)/* var←c51448 */  ))+89) );
      if ((0 != (word) ( *( (fPt) ((*  (ptr) pd86 ))))((* ((( (ptr) formal←c0972)+9)) ), pd86))) {
SOURCE(12879, 258)
         {
            word var←c53080;
            {
               word pd87;
               pd87 = (* (( (ptr) (* (( (ptr) gf←c0971)+201)/* var←c51448 */  ))+93) );
               var←c53080 = (word) ( *( (fPt) ((*  (ptr) pd87 ))))((* ((( (ptr) formal←c0972)+9)) ), pd87);
               };
            if ((var←c53080 == 0)) {
SOURCE(12940, 80)
               {
                  W2 var←c53112;
                  (void) MultiLinesPreferred←P1080((word) &var←c53112, (*  (W2Pt) (( (ptr) formal←c0972)+4) ), (* (( (ptr) formal←c0972)+6)
                      ), (* (( (ptr) formal←c0972)+7) ), (* (( (ptr) formal←c0972)+8) ), (* (( (ptr) formal←c0972)+9) ));
                  (* (( (ptr) formal←c0972)+12) ) = var←c53112.f1;
                  (* (( (ptr) formal←c0972)+11) ) = var←c53112.f0;
                  };
               }
            else {
               if ((var←c53080 == 1)) {
SOURCE(13041, 96)
                  {
                     W2 var←c53144;
                     (void) MultiPointsPreferred←P1140((word) &var←c53144, (*  (W2Pt) (( (ptr) formal←c0972)+4) ), (* (( (ptr) formal←c0972)+6)
                         ), (* (( (ptr) formal←c0972)+7) ), (* (( (ptr) formal←c0972)+8) ), (* (( (ptr) formal←c0972)+9) )
                        , (* (( (ptr) formal←c0972)+10) ));
                     (* (( (ptr) formal←c0972)+12) ) = var←c53144.f1;
                     (* (( (ptr) formal←c0972)+11) ) = var←c53144.f0;
                     };
                  }
               else {
SOURCE(13150, 5)
                  (void) XR←RaiseUnnamedError();
                  };
               };
            };
         }
      else {
SOURCE(13166, 13)
         (* (( (ptr) formal←c0972)+11) ) = 0;
SOURCE(13181, 9)
         (* (( (ptr) formal←c0972)+12) ) = 0;
         };
      };
SOURCE(13195, 39)
   {
      word pd88;
      pd88 = (* (( (ptr) (* (( (ptr) gf←c0971)+202)/* var←c51480 */  ))+14) );
      (void) ( *( (fPt) ((*  (ptr) pd88 ))))((* (( (ptr) gf←c0971)+85) ), (* (( (ptr) gf←c0971)+84) ), pd88);
      };
   return(0);
   }

static void MultiFacesPreferred←P1020(formal←c0313, testPoint←v11056, t←v11084, alignBag←v11112, sceneBag←v11140, ggData←v11168)
   word formal←c0313;
   W2 testPoint←v11056;
   word t←v11084;
   word alignBag←v11112;
   word sceneBag←v11140;
   word ggData←v11168;
   {
   register ptr gf←c59704 =  (ptr) &globalframe;
   word nearVEF←v11212;
   word count←v11240;
   word bestCurves←v17340 = 0;
   word bestPoints←v17368 = 0;
   word bestFaces←v17396 = 0;
   word faceCount←v17424;
   word curveCount←v17452;
   word pointCount←v17480;
   /* MultiFacesPreferred: */ 
SOURCE(13240, 1030)
SOURCE(13240, 1030)
   nearVEF←v11212 = 0;
SOURCE(13516, 92)
   {
      word tc89;
      word pd90;
      word pd91;
      pd90 = (* (( (ptr) (* (( (ptr) gf←c59704)+203)/* var←c53176 */  ))+19) );
      if ((0 != (word) ( *( (fPt) ((*  (ptr) pd90 ))))(alignBag←v11112, pd90))) {
         pd91 = (* (( (ptr) (* (( (ptr) gf←c59704)+203)/* var←c53176 */  ))+7) );
         tc89 =  (word) (0 != (word) ( *( (fPt) ((*  (ptr) pd91 ))))(sceneBag←v11140, pd91));
         }
      else {
         tc89 =  (word) 0;
         };
      if (tc89) {
SOURCE(13594, 14)
         nearVEF←v11212 = 0;
         count←v11240 = 0;
         goto lab←L100046;
         };
      };
SOURCE(13611, 90)
   {
      W2 var←c53208;
      (void) FacesInNeighborhoodPlus←P1440((word) &var←c53208, alignBag←v11112, sceneBag←v11140, testPoint←v11056, ggData←v11168, t←v11084)
      ;
      faceCount←v17424 = var←c53208.f1;
      bestFaces←v17396 = var←c53208.f0;
      };
SOURCE(13703, 35)
   (void) SortByOverlap←P2160(bestFaces←v17396, faceCount←v17424);
SOURCE(13741, 96)
   {
      W2 var←c53240;
      (void) CurvesInNeighborhoodPlus←P1380((word) &var←c53240, alignBag←v11112, sceneBag←v11140, testPoint←v11056, ggData←v11168, t←v11084
         , (*  (ptr) &fc58 ));
      curveCount←v17452 = var←c53240.f1;
      bestCurves←v17340 = var←c53240.f0;
      };
SOURCE(13840, 123)
   {
      W2 var←c53272;
      (void) VertsInNeighborhoodPlus←P1200((word) &var←c53272, bestCurves←v17340, curveCount←v17452, alignBag←v11112, sceneBag←v11140, testPoint←v11056
         , t←v11084, ggData←v11168, 0);
      pointCount←v17480 = var←c53272.f1;
      bestPoints←v17368 = var←c53272.f0;
      };
SOURCE(13965, 34)
   (void) SortPoints←P1980(bestPoints←v17368, pointCount←v17480);
SOURCE(14002, 49)
   {
      word x92;
      count←v11240 = (x92 = (* (( (ptr) gf←c59704)+4)/* MaxFeatures←v5240 */  ),
         MIN( (unsigned) , (pointCount←v17480 + curveCount←v17452), x92));
      };
SOURCE(14053, 47)
   {
      word var←c53304;
      word var←c53336;
      word var←c53368;
      var←c53304 = BCK(count←v11240, 67108863);
      var←c53336 = ((word) var←c53304 << 2);
      var←c53368 = XR←NewObject((4 + var←c53336), (* (( (ptr) gf←c59704)+59) ));
      (*  (ptr) var←c53368 ) = var←c53304;
      nearVEF←v11212 = var←c53368;
      };
SOURCE(14102, 84)
   (void) MergePointsAndCurves←P1860(bestPoints←v17368, pointCount←v17480, bestCurves←v17340, curveCount←v17452, nearVEF←v11212, count←v11240)
   ;
SOURCE(14188, 82)
   {
      W2 var←c53400;
      (void) MergeByOverlapAndDistance←P1920((word) &var←c53400, bestFaces←v17396, faceCount←v17424, nearVEF←v11212, count←v11240)
      ;
      count←v11240 = var←c53400.f1;
      nearVEF←v11212 = var←c53400.f0;
      };
   /* removed tail goto */ 
   lab←L100046: ;
   (*  (ptr) formal←c0313 ) = nearVEF←v11212;
   (* (( (ptr) formal←c0313)+1) ) = count←v11240;
   return;
   }

static void MultiLinesPreferred←P1080(formal←c0332, testPoint←v11300, t←v11328, alignBag←v11356, sceneBag←v11384, ggData←v11412)
   word formal←c0332;
   W2 testPoint←v11300;
   word t←v11328;
   word alignBag←v11356;
   word sceneBag←v11384;
   word ggData←v11412;
   {
   register ptr gf←c59736 =  (ptr) &globalframe;
   word nearVEF←v11456;
   word count←v11484;
   word bestCurves←v17524 = 0;
   word bestPoints←v17552 = 0;
   word pointCount←v17580;
   word curveCount←v17608;
   /* MultiLinesPreferred: */ 
SOURCE(14276, 795)
SOURCE(14276, 795)
   nearVEF←v11456 = 0;
SOURCE(14531, 92)
   {
      word tc93;
      word pd94;
      word pd95;
      pd94 = (* (( (ptr) (* (( (ptr) gf←c59736)+203)/* var←c53176 */  ))+19) );
      if ((0 != (word) ( *( (fPt) ((*  (ptr) pd94 ))))(alignBag←v11356, pd94))) {
         pd95 = (* (( (ptr) (* (( (ptr) gf←c59736)+203)/* var←c53176 */  ))+7) );
         tc93 =  (word) (0 != (word) ( *( (fPt) ((*  (ptr) pd95 ))))(sceneBag←v11384, pd95));
         }
      else {
         tc93 =  (word) 0;
         };
      if (tc93) {
SOURCE(14609, 14)
         nearVEF←v11456 = 0;
         count←v11484 = 0;
         goto lab←L100047;
         };
      };
SOURCE(14626, 96)
   {
      W2 var←c53432;
      (void) CurvesInNeighborhoodPlus←P1380((word) &var←c53432, alignBag←v11356, sceneBag←v11384, testPoint←v11300, ggData←v11412, t←v11328
         , (*  (ptr) &fc58 ));
      curveCount←v17608 = var←c53432.f1;
      bestCurves←v17524 = var←c53432.f0;
      };
SOURCE(14725, 123)
   {
      W2 var←c53464;
      (void) VertsInNeighborhoodPlus←P1200((word) &var←c53464, bestCurves←v17524, curveCount←v17608, alignBag←v11356, sceneBag←v11384, testPoint←v11300
         , t←v11328, ggData←v11412, 0);
      pointCount←v17580 = var←c53464.f1;
      bestPoints←v17552 = var←c53464.f0;
      };
SOURCE(14850, 34)
   (void) SortPoints←P1980(bestPoints←v17552, pointCount←v17580);
SOURCE(14887, 49)
   {
      word x96;
      count←v11484 = (x96 = (* (( (ptr) gf←c59736)+4)/* MaxFeatures←v5240 */  ),
         MIN( (unsigned) , (pointCount←v17580 + curveCount←v17608), x96));
      };
SOURCE(14938, 47)
   {
      word var←c53496;
      word var←c53528;
      word var←c53560;
      var←c53496 = BCK(count←v11484, 67108863);
      var←c53528 = ((word) var←c53496 << 2);
      var←c53560 = XR←NewObject((4 + var←c53528), (* (( (ptr) gf←c59736)+59) ));
      (*  (ptr) var←c53560 ) = var←c53496;
      nearVEF←v11456 = var←c53560;
      };
SOURCE(14987, 84)
   (void) MergePointsAndCurves←P1860(bestPoints←v17552, pointCount←v17580, bestCurves←v17524, curveCount←v17608, nearVEF←v11456, count←v11484)
   ;
   /* removed tail goto */ 
   lab←L100047: ;
   (*  (ptr) formal←c0332 ) = nearVEF←v11456;
   (* (( (ptr) formal←c0332)+1) ) = count←v11484;
   return;
   }

static void MultiPointsPreferred←P1140(formal←c0356, testPoint←v11544, t←v11572, alignBag←v11600, sceneBag←v11628, ggData←v11656, intersections←v11684)
   word formal←c0356;
   W2 testPoint←v11544;
   word t←v11572;
   word alignBag←v11600;
   word sceneBag←v11628;
   word ggData←v11656;
   word intersections←v11684;
   {
   register ptr gf←c59768 =  (ptr) &globalframe;
   word nearVEF←v11728;
   word count←v11756;
   word bestCurves←v17652 = 0;
   word bestPoints←v17680 = 0;
   word pointCount←v17708;
   word curveCount←v17736;
   word innerR←v17764;
   /* MultiPointsPreferred: */ 
SOURCE(15077, 1049)
SOURCE(15077, 1049)
   nearVEF←v11728 = 0;
SOURCE(15361, 20)
   {
      word x97;
      word x99;
      *(float*)&innerR←v17764 = (
         x97 = t←v11572,  *(float*)&x97
         ) / (
         x99 = (*  (ptr) &fc98 ),  *(float*)&x99
         );
      };
SOURCE(15383, 92)
   {
      word tc100;
      word pd101;
      word pd102;
      pd101 = (* (( (ptr) (* (( (ptr) gf←c59768)+203)/* var←c53176 */  ))+19) );
      if ((0 != (word) ( *( (fPt) ((*  (ptr) pd101 ))))(alignBag←v11600, pd101))) {
         pd102 = (* (( (ptr) (* (( (ptr) gf←c59768)+203)/* var←c53176 */  ))+7) );
         tc100 =  (word) (0 != (word) ( *( (fPt) ((*  (ptr) pd102 ))))(sceneBag←v11628, pd102));
         }
      else {
         tc100 =  (word) 0;
         };
      if (tc100) {
SOURCE(15461, 14)
         nearVEF←v11728 = 0;
         count←v11756 = 0;
         goto lab←L100048;
         };
      };
SOURCE(15478, 101)
   {
      W2 var←c53592;
      (void) CurvesInNeighborhoodPlus←P1380((word) &var←c53592, alignBag←v11600, sceneBag←v11628, testPoint←v11544, ggData←v11656, t←v11572
         , innerR←v17764);
      curveCount←v17736 = var←c53592.f1;
      bestCurves←v17652 = var←c53592.f0;
      };
SOURCE(15582, 131)
   {
      W2 var←c53624;
      (void) VertsInNeighborhoodPlus←P1200((word) &var←c53624, bestCurves←v17652, curveCount←v17736, alignBag←v11600, sceneBag←v11628, testPoint←v11544
         , t←v11572, ggData←v11656, intersections←v11684);
      pointCount←v17708 = var←c53624.f1;
      bestPoints←v17680 = var←c53624.f0;
      };
SOURCE(15715, 34)
   (void) SortPoints←P1980(bestPoints←v17680, pointCount←v17708);
SOURCE(15752, 374)
   {
      word tc103;
      word limit104;
      word x105;
      word x106;
      if ((pointCount←v17708 > 0)) {
         tc103 =  (word) ((
            x105 = (*  (ptr) (* ((( (ptr) bestPoints←v17680)+10)+(
                  limit104 = (* (( (ptr) bestPoints←v17680)+9) ),
                  BCK(0, limit104)
                  )) ) ),  *(float*)&x105
            ) < (
            x106 = innerR←v17764,  *(float*)&x106
            ));
         }
      else {
         tc103 =  (word) 0;
         };
      if (tc103) {
SOURCE(15809, 18)
         count←v11756 = pointCount←v17708;
SOURCE(15829, 47)
         {
            word var←c53656;
            word var←c53688;
            word var←c53720;
            var←c53656 = BCK(count←v11756, 67108863);
            var←c53688 = ((word) var←c53656 << 2);
            var←c53720 = XR←NewObject((4 + var←c53688), (* (( (ptr) gf←c59768)+59) ));
            (*  (ptr) var←c53720 ) = var←c53656;
            nearVEF←v11728 = var←c53720;
            };
SOURCE(15878, 53)
         (void) NearPointsFromPoints←P1800(bestPoints←v17680, pointCount←v17708, nearVEF←v11728);
         }
      else {
SOURCE(15942, 49)
         {
            word x107;
            count←v11756 = (x107 = (* (( (ptr) gf←c59768)+4)/* MaxFeatures←v5240 */  ),
               MIN( (unsigned) , (pointCount←v17708 + curveCount←v17736), x107));
            };
SOURCE(15993, 47)
         {
            word var←c53752;
            word var←c53784;
            word var←c53816;
            var←c53752 = BCK(count←v11756, 67108863);
            var←c53784 = ((word) var←c53752 << 2);
            var←c53816 = XR←NewObject((4 + var←c53784), (* (( (ptr) gf←c59768)+59) ));
            (*  (ptr) var←c53816 ) = var←c53752;
            nearVEF←v11728 = var←c53816;
            };
SOURCE(16042, 84)
         (void) MergePointsAndCurves←P1860(bestPoints←v17680, pointCount←v17708, bestCurves←v17652, curveCount←v17736, nearVEF←v11728, count←v11756)
         ;
         };
      };
   /* removed tail goto */ 
   lab←L100048: ;
   (*  (ptr) formal←c0356 ) = nearVEF←v11728;
   (* (( (ptr) formal←c0356)+1) ) = count←v11756;
   return;
   }

static void VertsInNeighborhoodPlus←P1200(formal←c0378, bestCurves←v11816, curveCount←v11844, alignBag←v11872, sceneBag←v11900, formal←c01067, t←v11956, formal←c01068, intersections←v12012)
   word formal←c0378;
   word bestCurves←v11816;
   word curveCount←v11844;
   word alignBag←v11872;
   word sceneBag←v11900;
   W2 formal←c01067;
   word t←v11956;
   word formal←c01068;
   word intersections←v12012;
   {
   W18 var←c59800;
   /* declaration of q←v11928 skipped */ 
   /* declaration of ggData←v11984 skipped */ 
   register ptr gf←c59832 =  (ptr) &globalframe;
   /* declaration of h←v12056 skipped */ 
   word pointCount←v12084;
   /* declaration of var←c53848 skipped */ 
   /* declaration of var←c53880 skipped */ 
   /* declaration of var←c53912 skipped */ 
   /* declaration of thisPoint←v17808 skipped */ 
   /* declaration of sliceD←v17920 skipped */ 
   word featureData←v17948 = 0;
   /* declaration of success←v17976 skipped */ 
   /* declaration of dTol←v18004 skipped */ 
   word midpoints←v18032;
   (*  (W2Pt) (( (ptr) &var←c59800)+4)/* q←v11928 */  ) = formal←c01067;
   (* (( (ptr) &var←c59800)+6)/* ggData←v11984 */  ) = formal←c01068;
   /* VertsInNeighborhoodPlus: */ 
SOURCE(16135, 2326)
   {
      word tmpAddr108;
      tmpAddr108 = (word) (( (ptr) &var←c59800)+8)/* var←c53848 */ ;
      (*  (ptr) tmpAddr108 ) = ( ((word)  (fPt) DoForSliceTrigger←P4068) );
      (* (( (ptr) tmpAddr108) + 1) ) = 1;
      };
   {
      word tmpAddr109;
      tmpAddr109 = (word) (( (ptr) &var←c59800)+10)/* var←c53880 */ ;
      (*  (ptr) tmpAddr109 ) = ( ((word)  (fPt) ProcessSlice←P4008) );
      (* (( (ptr) tmpAddr109) + 1) ) = 1;
      };
   {
      word tmpAddr110;
      tmpAddr110 = (word) (( (ptr) &var←c59800)+12)/* var←c53912 */ ;
      (*  (ptr) tmpAddr110 ) = ( ((word)  (fPt) ProcessPoint←P3948) );
      (* (( (ptr) tmpAddr110) + 1) ) = 1;
      };
SOURCE(16135, 2326)
   (* (( (ptr) &var←c59800)+7)/* h←v12056 */  ) = 0;
SOURCE(16358, 20)
   (* (( (ptr) &var←c59800)+14)/* thisPoint←v17808 */  ) = 0;
SOURCE(17621, 23)
   (* (( (ptr) &var←c59800)+15)/* sliceD←v17920 */  ) = 0;
SOURCE(17672, 21)
   (* (( (ptr) &var←c59800)+16)/* success←v17976 */  ) = 0;
SOURCE(17695, 14)
   (* (( (ptr) &var←c59800)+17)/* dTol←v18004 */  ) = t←v11956;
SOURCE(17711, 46)
   {
      word pd111;
      pd111 = (* (( (ptr) (* (( (ptr) gf←c59832)+201)/* var←c51448 */  ))+56) );
      midpoints←v18032 = (word) ( *( (fPt) ((*  (ptr) pd111 ))))((* ((( (ptr) &var←c59800)+6)/* ggData←v11984 */ ) ), pd111);
      };
SOURCE(17760, 29)
   (* (( (ptr) &var←c59800)+14)/* thisPoint←v17808 */  ) = XR←NewObject(36, (* (( (ptr) gf←c59832)+60) ));
SOURCE(17791, 33)
   (* (( (ptr) &var←c59800)+7)/* h←v12056 */  ) = (word) BestPointsFromPool←P1620((* (( (ptr) &var←c59800)+6)/* ggData←v11984 */  ), t←v11956)
   ;
SOURCE(17827, 210)
   if ((0 != intersections←v12012)) {
SOURCE(17851, 85)
      (* (( (ptr) &var←c59800)+17)/* dTol←v18004 */  ) = (word) FindIntersections←P1260(bestCurves←v11816, curveCount←v11844, (* (
            ( (ptr) &var←c59800)+14)/* thisPoint←v17808 */  ), (*  (W2Pt) (( (ptr) &var←c59800)+4)/* q←v11928 */  ), (* (( (ptr) &var←c59800)+17)
         /* dTol←v18004 */  ), (* (( (ptr) &var←c59800)+7)/* h←v12056 */  )
         , (* (( (ptr) (* (( (ptr) &var←c59800)+6)/* ggData←v11984 */  ))+11) ));
SOURCE(17938, 99)
      if ((0 != midpoints←v18032)) {
SOURCE(17956, 81)
         (* (( (ptr) &var←c59800)+17)/* dTol←v18004 */  ) = (word) FindMidpoints←P1320(bestCurves←v11816, curveCount←v11844, (* (( (ptr) &var←c59800)+14)
            /* thisPoint←v17808 */  ), (*  (W2Pt) (( (ptr) &var←c59800)+4)/* q←v11928 */  ), (* (( (ptr) &var←c59800)+17)/* dTol←v18004 */  ), (* (
               ( (ptr) &var←c59800)+7)/* h←v12056 */  )
            , (* (( (ptr) (* (( (ptr) &var←c59800)+6)/* ggData←v11984 */  ))+11) ));
         };
      };
SOURCE(18043, 54)
   {
      word pd112;
      pd112 = (* (( (ptr) (* (( (ptr) gf←c59832)+203)/* var←c53176 */  ))+9) );
      (void) ( *( (fPt) ((*  (ptr) pd112 ))))(sceneBag←v11900, (word) (( (bPt) &var←c59800)+32)/* var←c53848 */ , pd112);
      };
SOURCE(18099, 29)
   featureData←v17948 = (* (( (ptr) alignBag←v11872)+4) );
SOURCE(18130, 193)
   if ((featureData←v17948 != 0)) {
SOURCE(18156, 169)
      {
         word anchor←v18280;
SOURCE(18158, 41)
         anchor←v18280 = XR←Narrow((* (( (ptr) featureData←v17948)+1) ), (* (( (ptr) gf←c59832)+62) ));
SOURCE(18201, 35)
         {
            word pd113;
            pd113 = (* (( (ptr) (* (( (ptr) gf←c59832)+204)/* var←c53976 */  ))+7) );
            if ((0 == (word) ( *( (fPt) ((*  (ptr) pd113 ))))(anchor←v18280, pd113))) {
SOURCE(18236, 5)
               (void) XR←RaiseUnnamedError();
               };
            };
SOURCE(18243, 42)
         {
            word pd114;
            pd114 = (* (( (ptr) (* (( (ptr) gf←c59832)+204)/* var←c53976 */  ))+15) );
            (void) ( *( (fPt) ((*  (ptr) pd114 ))))((word) (( (bPt) (* (( (ptr) &var←c59800)+14)/* thisPoint←v17808 */  ))+4), anchor←v18280, pd114)
            ;
            };
SOURCE(18287, 36)
         (void) ProcessPoint←P3948((* (( (ptr) &var←c59800)+14)/* thisPoint←v17808 */  ), featureData←v17948, (word) (( (bPt) &var←c59800)+48)
            /* var←c53912 */ );
         };
      };
SOURCE(18328, 19)
   pointCount←v12084 = (*  (ptr) (* (( (ptr) &var←c59800)+7)/* h←v12056 */  ) );
SOURCE(18349, 112)
   if ((0 != (* (( (ptr) (* (( (ptr) &var←c59800)+7)/* h←v12056 */  ))+8) ))) {
SOURCE(18370, 45)
      {
         word pd115;
         pd115 = (* (( (ptr) (* (( (ptr) gf←c59832)+202)/* var←c51480 */  ))+12) );
         (void) ( *( (fPt) ((*  (ptr) pd115 ))))((* (( (ptr) gf←c59832)+83) ), (* (( (ptr) gf←c59832)+84) ), pd115);
         };
SOURCE(18417, 44)
      {
         word pd116;
         pd116 = (* (( (ptr) (* (( (ptr) gf←c59832)+202)/* var←c51480 */  ))+14) );
         (void) ( *( (fPt) ((*  (ptr) pd116 ))))((* (( (ptr) gf←c59832)+83) ), (* (( (ptr) gf←c59832)+84) ), pd116);
         };
      };
   /* removed tail goto */ 
   (*  (ptr) formal←c0378 ) = (* (( (ptr) &var←c59800)+7)/* h←v12056 */  );
   (* (( (ptr) formal←c0378)+1) ) = pointCount←v12084;
   return;
   }

static void ProcessPoint←P3948(thisPoint←v18108, featureData←v18136, formal←c59896)
   word thisPoint←v18108;
   word featureData←v18136;
   word formal←c59896;
   {
   register ptr gf←c59864 =  (ptr) &globalframe;
   word dSquared←v18324;
   word dTolSquared←v18352;
   formal←c59896 = (formal←c59896 - 48);
   /* ProcessPoint: */ 
SOURCE(16380, 564)
SOURCE(16491, 29)
   {
      word x117;
      word x118;
      *(float*)&dTolSquared←v18352 = (
         x117 = (* (( (ptr) formal←c59896)+17) ),  *(float*)&x117
         ) * (
         x118 = (* (( (ptr) formal←c59896)+17) ),  *(float*)&x118
         );
      };
SOURCE(16522, 56)
   {
      word pd119;
      pd119 = (* (( (ptr) (* (( (ptr) gf←c59864)+205)/* var←c54008 */  ))+21) );
      dSquared←v18324 = (word) ( *( (fPt) ((*  (ptr) pd119 ))))((*  (W2Pt) (( (ptr) thisPoint←v18108)+1) ), (*  (W2Pt) (( (ptr) formal←c59896)+4)
          ), pd119);
      };
SOURCE(16580, 23)
   (* (( (ptr) thisPoint←v18108)+6) ) = 0;
SOURCE(16605, 339)
   {
      word x120;
      word x121;
      if (((
         x120 = dSquared←v18324,  *(float*)&x120
         ) < (
         x121 = dTolSquared←v18352,  *(float*)&x121
         ))) {
SOURCE(16638, 39)
         {
            word pd122;
            pd122 = (* (( (ptr) (* (( (ptr) gf←c59864)+206)/* var←c54040 */  ))+9) );
            (*  (ptr) thisPoint←v18108 ) = (word) ( *( (fPt) ((*  (ptr) pd122 ))))(dSquared←v18324, pd122);
            };
SOURCE(16679, 63)
         {
            word var←c54072;
            var←c54072 = XR←Narrow((* (( (ptr) featureData←v18136)+1) ), (* (( (ptr) gf←c59864)+62) ));
            {
               word pd123;
               pd123 = (* (( (ptr) (* (( (ptr) gf←c59864)+204)/* var←c53976 */  ))+16) );
               (void) ( *( (fPt) ((*  (ptr) pd123 ))))((word) (( (bPt) thisPoint←v18108)+12), var←c54072, pd123);
               };
            };
SOURCE(16758, 83)
         {
            word pd124;
            word x125;
            word x126;
            pd124 = (* (( (ptr) (* (( (ptr) gf←c59864)+205)/* var←c54008 */  ))+20) );
            if (((
               x125 = (word) ( *( (fPt) ((*  (ptr) pd124 ))))((*  (W2Pt) ((( (ptr) thisPoint←v18108)+3)) ), pd124),  *(float*)&x125
               ) == (
               x126 = (*  (ptr) &fc58 ),  *(float*)&x126
               ))) {
SOURCE(16815, 26)
               (* (( (ptr) thisPoint←v18108)+3) ) = (*  (ptr) &fc58 );
               (* (( (ptr) thisPoint←v18108)+4) ) = (*  (ptr) &fc59 );
               };
            };
SOURCE(16843, 35)
         (* (( (ptr) thisPoint←v18108)+5) ) = featureData←v18136;
SOURCE(16880, 23)
         (* (( (ptr) thisPoint←v18108)+8) ) =  (word) -1;
SOURCE(16905, 39)
         (* (( (ptr) formal←c59896)+17) ) = (word) AddNeighbor←P1680(thisPoint←v18108, (* (( (ptr) formal←c59896)+7) ), 0);
         };
      };
   }

static void ProcessSlice←P4008(sliceD←v18196, thisPoint←v18224, featureData←v18252, formal←c59960)
   word sliceD←v18196;
   word thisPoint←v18224;
   word featureData←v18252;
   word formal←c59960;
   {
   register ptr gf←c59928 =  (ptr) &globalframe;
   formal←c59960 = (formal←c59960 - 40);
   /* ProcessSlice: */ 
SOURCE(16952, 516)
SOURCE(17049, 130)
   {
      W7 var←c54104;
      {
         word pd127;
         pd127 = (* (( (ptr) (*  (ptr) (*  (ptr) sliceD←v18196 ) ))+38) );
         (void) ( *( (fPt) ((*  (ptr) pd127 ))))((word) &var←c54104, sliceD←v18196, (*  (W2Pt) (( (ptr) formal←c59960)+4) ), (* (( (ptr) formal←c59960)+17)
             ), pd127);
         };
      (* (( (ptr) formal←c59960)+16) ) = var←c54104.f6;
      (* (( (ptr) thisPoint←v18224)+6) ) = var←c54104.f5;
      (*  (W2Pt) (( (ptr) thisPoint←v18224)+3) ) = (*  (W2Pt) (( (ptr) &var←c54104)+3) );
      (*  (ptr) thisPoint←v18224 ) = var←c54104.f2;
      (*  (W2Pt) (( (ptr) thisPoint←v18224)+1) ) = (*  (W2Pt) &var←c54104 );
      };
SOURCE(17181, 287)
   if ((0 != (* (( (ptr) formal←c59960)+16) ))) {
SOURCE(17199, 269)
      {
         word x128;
         word x129;
         if (((
            x128 = (*  (ptr) thisPoint←v18224 ),  *(float*)&x128
            ) < (
            x129 = (* (( (ptr) formal←c59960)+17) ),  *(float*)&x129
            ))) {
SOURCE(17231, 35)
            (* (( (ptr) thisPoint←v18224)+5) ) = featureData←v18252;
SOURCE(17268, 86)
            {
               word pd130;
               word x131;
               word x132;
               pd130 = (* (( (ptr) (* (( (ptr) gf←c59928)+205)/* var←c54008 */  ))+20) );
               if (((
                  x131 = (word) ( *( (fPt) ((*  (ptr) pd130 ))))((*  (W2Pt) ((( (ptr) thisPoint←v18224)+3)) ), pd130),  *(float*)&x131
                  ) == (
                  x132 = (*  (ptr) &fc58 ),  *(float*)&x132
                  ))) {
SOURCE(17328, 26)
                  (* (( (ptr) thisPoint←v18224)+3) ) = (*  (ptr) &fc58 );
                  (* (( (ptr) thisPoint←v18224)+4) ) = (*  (ptr) &fc59 );
                  };
               };
SOURCE(17359, 68)
            {
               word pd133;
               pd133 = (* (( (ptr) (* (( (ptr) gf←c59928)+207)/* var←c54136 */  ))+21) );
               (* (( (ptr) thisPoint←v18224)+8) ) = (word) ( *( (fPt) ((*  (ptr) pd133 ))))((* (( (ptr) (* (( (ptr) formal←c59960)+6) ))+11)
                   ), (*  (ptr) sliceD←v18196 ), pd133);
               };
SOURCE(17429, 39)
            (* (( (ptr) formal←c59960)+17) ) = (word) AddNeighbor←P1680(thisPoint←v18224, (* (( (ptr) formal←c59960)+7) ), 0);
            };
         };
      };
   }

static word DoForSliceTrigger←P4068(feature←v35032, formal←c60024)
   word feature←v35032;
   word formal←c60024;
   {
   register ptr gf←c59992 =  (ptr) &globalframe;
   word done←v35076;
   formal←c60024 = (formal←c60024 - 32);
   /* DoForSliceTrigger: */ 
SOURCE(17479, 136)
SOURCE(17479, 136)
   done←v35076 = 0;
SOURCE(17526, 47)
   (* (( (ptr) formal←c60024)+15) ) = XR←Narrow((* (( (ptr) feature←v35032)+1) ), (* (( (ptr) gf←c59992)+64) ));
SOURCE(17575, 40)
   (void) ProcessSlice←P4008((* (( (ptr) formal←c60024)+15) ), (* (( (ptr) formal←c60024)+14) ), feature←v35032, (word) (( (bPt) formal←c60024)+40)
      );
SOURCE(17479, 136)
   return(done←v35076);
   }

static word FindIntersections←P1260(bestCurves←v12144, curveCount←v12172, thisPoint←v12200, q←v12228, tolerance←v12256, h←v12284, scene←v12312)
   word bestCurves←v12144;
   word curveCount←v12172;
   word thisPoint←v12200;
   W2 q←v12228;
   word tolerance←v12256;
   word h←v12284;
   word scene←v12312;
   {
   register ptr gf←c60056 =  (ptr) &globalframe;
   word dTol←v12356;
   word curveI←v18396 = 0;
   word curveJ←v18424 = 0;
   word theseIPoints←v18452 = 0;
   word thisTangency←v18480 = 0;
   word tangentList←v18508 = 0;
   word success←v18536 = 0;
   /* FindIntersections: */ 
SOURCE(18504, 2180)
SOURCE(18793, 16)
   dTol←v12356 = tolerance←v12256;
SOURCE(18811, 1873)
   {
      register word i←v18748 = 0;
      register word noName←c54168;
      noName←c54168 = curveCount←v12172;
      if ((i←v18748 >= noName←c54168)) {
         goto lab←L100050;
         };
      lab←L100053: ;
SOURCE(18844, 22)
      {
         word limit134;
         curveI←v18396 = (* ((( (ptr) bestCurves←v12144)+10)+(
               limit134 = (* (( (ptr) bestCurves←v12144)+9) ),
               BCK(i←v18748, limit134)
               )) );
         };
SOURCE(18868, 27)
      {
         word x135;
         word x136;
         if (((
            x135 = (*  (ptr) curveI←v18396 ),  *(float*)&x135
            ) > (
            x136 = dTol←v12356,  *(float*)&x136
            ))) {
SOURCE(18895, 4)
            goto lab←L100051;
            };
         };
SOURCE(18958, 1726)
      {
         register word j←v18792 = 0;
         if ((j←v18792 > i←v18748)) {
            goto lab←L100054;
            };
         lab←L100057: ;
SOURCE(18982, 22)
         {
            word limit137;
            curveJ←v18424 = (* ((( (ptr) bestCurves←v12144)+10)+(
                  limit137 = (* (( (ptr) bestCurves←v12144)+9) ),
                  BCK(j←v18792, limit137)
                  )) );
            };
SOURCE(19006, 27)
         {
            word x138;
            word x139;
            if (((
               x138 = (*  (ptr) curveJ←v18424 ),  *(float*)&x138
               ) > (
               x139 = dTol←v12356,  *(float*)&x139
               ))) {
SOURCE(19033, 4)
               goto lab←L100056;
               };
            };
SOURCE(19093, 62)
         {
            W2 var←c54200;
            (void) CurveMeetsCurve←P2340((word) &var←c54200, curveI←v18396, curveJ←v18424);
            thisTangency←v18480 = var←c54200.f1;
            theseIPoints←v18452 = var←c54200.f0;
            };
SOURCE(19157, 26)
         tangentList←v18508 = thisTangency←v18480;
SOURCE(19185, 1499)
         {
            register word list←v18836;
            list←v18836 = theseIPoints←v18452;
            lab←L100061: ;
            if ((list←v18836 != 0)) {
               }
            else {
               goto lab←L100058;
               };
SOURCE(19255, 28)
            (*  (W2Pt) (( (ptr) thisPoint←v12200)+1) ) = (*  (W2Pt) list←v18836 );
SOURCE(19285, 55)
            {
               word pd140;
               pd140 = (* (( (ptr) (* (( (ptr) gf←c60056)+205)/* var←c54008 */  ))+19) );
               (*  (ptr) thisPoint←v12200 ) = (word) ( *( (fPt) ((*  (ptr) pd140 ))))((*  (W2Pt) (( (ptr) thisPoint←v12200)+1) ), q←v12228, pd140)
               ;
               };
SOURCE(19342, 32)
            {
               word x141;
               word x142;
               success←v18536 =  (unsigned) ((
                  x141 = (*  (ptr) thisPoint←v12200 ),  *(float*)&x141
                  ) <= (
                  x142 = dTol←v12356,  *(float*)&x142
                  ));
               };
SOURCE(19376, 1273)
            if ((0 != success←v18536)) {
SOURCE(19392, 1259)
               {
                  word featureData←v18964;
                  word alignmentPoint←v18992;
SOURCE(19394, 46)
                  featureData←v18964 = XR←NewObject(8, (* (( (ptr) gf←c60056)+65) ));
SOURCE(19442, 167)
                  alignmentPoint←v18992 = XR←NewObject(20, (* (( (ptr) gf←c60056)+66) ));
                  (*  (W2Pt) alignmentPoint←v18992 ) = (*  (W2Pt) (( (ptr) thisPoint←v12200)+1) );
                  (* (( (ptr) alignmentPoint←v18992)+2) ) = (*  (ptr) tangentList←v18508 );
                  (* (( (ptr) alignmentPoint←v18992)+3) ) = (* (( (ptr) curveI←v18396)+5) );
                  (* (( (ptr) alignmentPoint←v18992)+4) ) = (* (( (ptr) curveJ←v18424)+5) );
SOURCE(19611, 36)
                  (*  (ptr) featureData←v18964 ) = 6;
SOURCE(19649, 34)
                  (* (( (ptr) featureData←v18964)+1) ) = alignmentPoint←v18992;
SOURCE(19685, 35)
                  (* (( (ptr) thisPoint←v12200)+5) ) = featureData←v18964;
SOURCE(19722, 23)
                  (* (( (ptr) thisPoint←v12200)+8) ) =  (word) -1;
SOURCE(19747, 776)
                  if (((*  (ptr) (* (( (ptr) curveI←v18396)+5) ) ) == 0)) {
SOURCE(19787, 317)
                     {
                        word sliceD←v19036;
                        word slice←v19064;
SOURCE(19789, 58)
                        sliceD←v19036 = XR←Narrow((* (( (ptr) (* (( (ptr) curveI←v18396)+5) ))+1) ), (* (( (ptr) gf←c60056)+64) ));
SOURCE(19849, 27)
                        slice←v19064 = (*  (ptr) sliceD←v19036 );
SOURCE(19878, 54)
                        {
                           word pd143;
                           pd143 = (* (( (ptr) (* (( (ptr) gf←c60056)+207)/* var←c54136 */  ))+21) );
                           (* (( (ptr) thisPoint←v12200)+8) ) = (word) ( *( (fPt) ((*  (ptr) pd143 ))))(scene←v12312, slice←v19064, pd143);
                           };
SOURCE(19934, 34)
                        (* (( (ptr) thisPoint←v12200)+6) ) = (* (( (ptr) curveI←v18396)+6) );
SOURCE(19970, 72)
                        {
                           W2 var←c54296;
                           W7 var←c0417;
                           {
/*1*/   word pd144;
/*1*/   pd144 = (* (( (ptr) (* (( (ptr) gf←c60056)+208)/* var←c54328 */  ))+47) );
/*1*/   (void) ( *( (fPt) ((*  (ptr) pd144 ))))((word) &var←c0417, sliceD←v19036, q←v12228, dTol←v12356, pd144);
/*1*/   };
                           var←c54296 = (*  (W2Pt) (( (ptr) &var←c0417)+3) );
                           (*  (W2Pt) (( (ptr) thisPoint←v12200)+3) ) = var←c54296;
                           };
                        };
                     }
                  else {
SOURCE(20111, 412)
                     if (((*  (ptr) (* (( (ptr) curveJ←v18424)+5) ) ) == 0)) {
SOURCE(20151, 342)
                        {
                           word sliceD←v19108;
                           word slice←v19136;
SOURCE(20153, 58)
                           sliceD←v19108 = XR←Narrow((* (( (ptr) (* (( (ptr) curveJ←v18424)+5) ))+1) ), (* (( (ptr) gf←c60056)+64) ));
SOURCE(20213, 27)
                           slice←v19136 = (*  (ptr) sliceD←v19108 );
SOURCE(20242, 79)
                           {
/*1*/   word var←c54360;
/*1*/   {
/*1*/      word x145;
/*1*/      word pd146;
/*1*/      word x147;
/*1*/      pd146 = (* (( (ptr) (* (( (ptr) gf←c60056)+207)/* var←c54136 */  ))+21) );
/*1*/      var←c54360 = (x145 = (* (( (ptr) thisPoint←v12200)+8) ),
/*1*/         x147 = (word) ( *( (fPt) ((*  (ptr) pd146 ))))(scene←v12312, slice←v19136, pd146),
/*1*/         MIN((int)(word), x145, x147));
/*1*/      };
/*1*/   (* (( (ptr) thisPoint←v12200)+8) ) = var←c54360;
/*1*/   };
SOURCE(20323, 34)
                           (* (( (ptr) thisPoint←v12200)+6) ) = (* (( (ptr) curveJ←v18424)+6) );
SOURCE(20359, 72)
                           {
/*1*/   W2 var←c54392;
/*1*/   W7 var←c0422;
/*1*/   {
/*1*/      word pd148;
/*1*/      pd148 = (* (( (ptr) (* (( (ptr) gf←c60056)+208)/* var←c54328 */  ))+47) );
/*1*/      (void) ( *( (fPt) ((*  (ptr) pd148 ))))((word) &var←c0422, sliceD←v19108, q←v12228, dTol←v12356, pd148);
/*1*/      };
/*1*/   var←c54392 = (*  (W2Pt) (( (ptr) &var←c0422)+3) );
/*1*/   (*  (W2Pt) (( (ptr) thisPoint←v12200)+3) ) = var←c54392;
/*1*/   };
                           };
                        }
                     else {
SOURCE(20500, 23)
                        (* (( (ptr) thisPoint←v12200)+6) ) = 0;
                        };
                     };
SOURCE(20525, 83)
                  {
                     word pd149;
                     word x150;
                     word x151;
                     pd149 = (* (( (ptr) (* (( (ptr) gf←c60056)+205)/* var←c54008 */  ))+20) );
                     if (((
                        x150 = (word) ( *( (fPt) ((*  (ptr) pd149 ))))((*  (W2Pt) ((( (ptr) thisPoint←v12200)+3)) ), pd149),  *(float*)&x150
                        ) == (
                        x151 = (*  (ptr) &fc58 ),  *(float*)&x151
                        ))) {
SOURCE(20582, 26)
                        (* (( (ptr) thisPoint←v12200)+3) ) = (*  (ptr) &fc58 );
                        (* (( (ptr) thisPoint←v12200)+4) ) = (*  (ptr) &fc59 );
                        };
                     };
SOURCE(20610, 39)
                  dTol←v12356 = (word) AddNeighbor←P1680(thisPoint←v12200, h←v12284, 0);
                  };
               };
SOURCE(20654, 30)
            tangentList←v18508 = (* (( (ptr) tangentList←v18508)+1) );
            list←v18836 = (* (( (ptr) list←v18836)+2) );
            goto lab←L100061;
            lab←L100058: ;
            };
         lab←L100056: ;
         if ((j←v18792 >= i←v18748)) {
            goto lab←L100054;
            };
         j←v18792 = (j←v18792 + 1);
         goto lab←L100057;
         lab←L100054: ;
         };
      i←v18748 = (i←v18748 + 1);
      if ((i←v18748 < noName←c54168)) {
         goto lab←L100053;
         };
      lab←L100050: ;
      lab←L100051: ;
      };
SOURCE(18504, 2180)
   return(dTol←v12356);
   }

static word FindMidpoints←P1320(bestCurves←v12416, curveCount←v12444, thisPoint←v12472, q←v12500, tolerance←v12528, h←v12556, scene←v12584)
   word bestCurves←v12416;
   word curveCount←v12444;
   word thisPoint←v12472;
   W2 q←v12500;
   word tolerance←v12528;
   word h←v12556;
   word scene←v12584;
   {
   register ptr gf←c60088 =  (ptr) &globalframe;
   word dTol←v12628;
   word curve←v19180 = 0;
   W2 midpoint←v19208;
   word success←v19236 = 0;
   /* FindMidpoints: */ 
SOURCE(20717, 1268)
SOURCE(20940, 16)
   dTol←v12628 = tolerance←v12528;
SOURCE(20958, 1027)
   {
      register word i←v19280 = 0;
      register word noName←c54424;
      noName←c54424 = curveCount←v12444;
      if ((i←v19280 >= noName←c54424)) {
         goto lab←L100062;
         };
      lab←L100065: ;
SOURCE(20991, 21)
      {
         word limit152;
         curve←v19180 = (* ((( (ptr) bestCurves←v12416)+10)+(
               limit152 = (* (( (ptr) bestCurves←v12416)+9) ),
               BCK(i←v19280, limit152)
               )) );
         };
SOURCE(21014, 37)
      if (((*  (ptr) (* (( (ptr) curve←v19180)+5) ) ) != 0)) {
SOURCE(21051, 4)
         goto lab←L100064;
         };
SOURCE(21057, 44)
      {
         W3 var←c54456;
         (void) ComputeMidpoint←P2220((word) &var←c54456, curve←v19180);
         success←v19236 = var←c54456.f2;
         midpoint←v19208 = (*  (W2Pt) &var←c54456 );
         };
SOURCE(21103, 20)
      if ((0 == success←v19236)) {
SOURCE(21123, 4)
         goto lab←L100064;
         };
SOURCE(21129, 26)
      (*  (W2Pt) (( (ptr) thisPoint←v12472)+1) ) = midpoint←v19208;
SOURCE(21157, 55)
      {
         word pd153;
         pd153 = (* (( (ptr) (* (( (ptr) gf←c60088)+205)/* var←c54008 */  ))+19) );
         (*  (ptr) thisPoint←v12472 ) = (word) ( *( (fPt) ((*  (ptr) pd153 ))))((*  (W2Pt) (( (ptr) thisPoint←v12472)+1) ), q←v12500, pd153)
         ;
         };
SOURCE(21214, 32)
      {
         word x154;
         word x155;
         success←v19236 =  (unsigned) ((
            x154 = (*  (ptr) thisPoint←v12472 ),  *(float*)&x154
            ) <= (
            x155 = dTol←v12628,  *(float*)&x155
            ));
         };
SOURCE(21248, 737)
      if ((0 != success←v19236)) {
SOURCE(21264, 723)
         {
            word sliceD←v19324;
            word slice←v19352;
            word featureData←v19380;
            word alignmentPoint←v19408;
SOURCE(21266, 57)
            sliceD←v19324 = XR←Narrow((* (( (ptr) (* (( (ptr) curve←v19180)+5) ))+1) ), (* (( (ptr) gf←c60088)+64) ));
SOURCE(21325, 27)
            slice←v19352 = (*  (ptr) sliceD←v19324 );
SOURCE(21354, 46)
            featureData←v19380 = XR←NewObject(8, (* (( (ptr) gf←c60088)+65) ));
SOURCE(21402, 139)
            alignmentPoint←v19408 = XR←NewObject(20, (* (( (ptr) gf←c60088)+66) ));
            (*  (W2Pt) alignmentPoint←v19408 ) = (*  (W2Pt) (( (ptr) thisPoint←v12472)+1) );
            (* (( (ptr) alignmentPoint←v19408)+3) ) = (* (( (ptr) curve←v19180)+5) );
SOURCE(21543, 27)
            (*  (ptr) featureData←v19380 ) = 7;
SOURCE(21572, 34)
            (* (( (ptr) featureData←v19380)+1) ) = alignmentPoint←v19408;
SOURCE(21608, 35)
            (* (( (ptr) thisPoint←v12472)+5) ) = featureData←v19380;
SOURCE(21645, 33)
            (* (( (ptr) thisPoint←v12472)+6) ) = (* (( (ptr) curve←v19180)+6) );
SOURCE(21680, 72)
            {
               W2 var←c54552;
               W7 var←c0443;
               {
                  word pd156;
                  pd156 = (* (( (ptr) (* (( (ptr) gf←c60088)+208)/* var←c54328 */  ))+47) );
                  (void) ( *( (fPt) ((*  (ptr) pd156 ))))((word) &var←c0443, sliceD←v19324, q←v12500, dTol←v12628, pd156);
                  };
               var←c54552 = (*  (W2Pt) (( (ptr) &var←c0443)+3) );
               (*  (W2Pt) (( (ptr) thisPoint←v12472)+3) ) = var←c54552;
               };
SOURCE(21805, 83)
            {
               word pd157;
               word x158;
               word x159;
               pd157 = (* (( (ptr) (* (( (ptr) gf←c60088)+205)/* var←c54008 */  ))+20) );
               if (((
                  x158 = (word) ( *( (fPt) ((*  (ptr) pd157 ))))((*  (W2Pt) ((( (ptr) thisPoint←v12472)+3)) ), pd157),  *(float*)&x158
                  ) == (
                  x159 = (*  (ptr) &fc58 ),  *(float*)&x159
                  ))) {
SOURCE(21862, 26)
                  (* (( (ptr) thisPoint←v12472)+3) ) = (*  (ptr) &fc58 );
                  (* (( (ptr) thisPoint←v12472)+4) ) = (*  (ptr) &fc59 );
                  };
               };
SOURCE(21890, 54)
            {
               word pd160;
               pd160 = (* (( (ptr) (* (( (ptr) gf←c60088)+207)/* var←c54136 */  ))+21) );
               (* (( (ptr) thisPoint←v12472)+8) ) = (word) ( *( (fPt) ((*  (ptr) pd160 ))))(scene←v12584, slice←v19352, pd160);
               };
SOURCE(21946, 39)
            dTol←v12628 = (word) AddNeighbor←P1680(thisPoint←v12472, h←v12556, 0);
            };
         };
      lab←L100064: ;
      i←v19280 = (i←v19280 + 1);
      if ((i←v19280 < noName←c54424)) {
         goto lab←L100065;
         };
      lab←L100062: ;
      };
SOURCE(20717, 1268)
   return(dTol←v12628);
   }

static void CurvesInNeighborhoodPlus←P1380(formal←c0467, alignBag←v12688, sceneBag←v12716, formal←c01069, formal←c01070, t←v12800, innerR←v12828)
   word formal←c0467;
   word alignBag←v12688;
   word sceneBag←v12716;
   W2 formal←c01069;
   word formal←c01070;
   word t←v12800;
   word innerR←v12828;
   {
   W22 var←c60120;
   /* declaration of q←v12744 skipped */ 
   /* declaration of ggData←v12772 skipped */ 
   register ptr gf←c60152 =  (ptr) &globalframe;
   /* declaration of h←v12872 skipped */ 
   word curveCount←v12900;
   /* declaration of var←c54584 skipped */ 
   /* declaration of var←c54616 skipped */ 
   /* declaration of var←c54648 skipped */ 
   /* declaration of var←c54680 skipped */ 
   /* declaration of var←c54712 skipped */ 
   /* declaration of line←v19592 skipped */ 
   word circle←v19620 = 0;
   /* declaration of sliceD←v19648 skipped */ 
   word featureData←v19676 = 0;
   word added←v19704 = 0;
   /* declaration of thisCurve←v19732 skipped */ 
   /* declaration of dTol←v19760 skipped */ 
   (*  (W2Pt) (( (ptr) &var←c60120)+4)/* q←v12744 */  ) = formal←c01069;
   (* (( (ptr) &var←c60120)+6)/* ggData←v12772 */  ) = formal←c01070;
   /* CurvesInNeighborhoodPlus: */ 
SOURCE(22003, 3516)
   {
      word tmpAddr161;
      tmpAddr161 = (word) (( (ptr) &var←c60120)+8)/* var←c54584 */ ;
      (*  (ptr) tmpAddr161 ) = ( ((word)  (fPt) DoForSceneSlice←P4800) );
      (* (( (ptr) tmpAddr161) + 1) ) = 1;
      };
   {
      word tmpAddr162;
      tmpAddr162 = (word) (( (ptr) &var←c60120)+10)/* var←c54616 */ ;
      (*  (ptr) tmpAddr162 ) = ( ((word)  (fPt) ProcessSlopeLine←P4740) );
      (* (( (ptr) tmpAddr162) + 1) ) = 1;
      };
   {
      word tmpAddr163;
      tmpAddr163 = (word) (( (ptr) &var←c60120)+12)/* var←c54648 */ ;
      (*  (ptr) tmpAddr163 ) = ( ((word)  (fPt) ProcessSlice←P4680) );
      (* (( (ptr) tmpAddr163) + 1) ) = 1;
      };
   {
      word tmpAddr164;
      tmpAddr164 = (word) (( (ptr) &var←c60120)+14)/* var←c54680 */ ;
      (*  (ptr) tmpAddr164 ) = ( ((word)  (fPt) ProcessCircle←P4620) );
      (* (( (ptr) tmpAddr164) + 1) ) = 1;
      };
   {
      word tmpAddr165;
      tmpAddr165 = (word) (( (ptr) &var←c60120)+16)/* var←c54712 */ ;
      (*  (ptr) tmpAddr165 ) = ( ((word)  (fPt) ProcessLine←P4560) );
      (* (( (ptr) tmpAddr165) + 1) ) = 1;
      };
SOURCE(22003, 3516)
   (* (( (ptr) &var←c60120)+7)/* h←v12872 */  ) = 0;
SOURCE(24364, 10)
   (* (( (ptr) &var←c60120)+18)/* line←v19592 */  ) = 0;
SOURCE(24392, 23)
   (* (( (ptr) &var←c60120)+19)/* sliceD←v19648 */  ) = 0;
SOURCE(24464, 40)
   (* (( (ptr) &var←c60120)+20)/* thisCurve←v19732 */  ) = XR←NewObject(36, (* (( (ptr) gf←c60152)+60) ));
SOURCE(24506, 14)
   (* (( (ptr) &var←c60120)+21)/* dTol←v19760 */  ) = t←v12800;
SOURCE(24522, 41)
   (* (( (ptr) &var←c60120)+7)/* h←v12872 */  ) = (word) BestCurvesFromPool←P1560((* (( (ptr) &var←c60120)+6)/* ggData←v12772 */  ), t←v12800, innerR←v12828)
   ;
SOURCE(24566, 50)
   {
      word pd166;
      pd166 = (* (( (ptr) (* (( (ptr) gf←c60152)+203)/* var←c53176 */  ))+21) );
      (void) ( *( (fPt) ((*  (ptr) pd166 ))))(alignBag←v12688, (word) (( (bPt) &var←c60120)+40)/* var←c54616 */ , pd166);
      };
SOURCE(24618, 228)
   {
      register word angleLines←v20152;
      angleLines←v20152 = (* (( (ptr) alignBag←v12688)+1) );
      lab←L100070: ;
      if ((angleLines←v20152 != 0)) {
         }
      else {
         goto lab←L100067;
         };
SOURCE(24719, 30)
      featureData←v19676 = (*  (ptr) angleLines←v20152 );
SOURCE(24751, 52)
      (* (( (ptr) &var←c60120)+18)/* line←v19592 */  ) = (*  (ptr) XR←Narrow((* (( (ptr) featureData←v19676)+1) ), (* (( (ptr) gf←c60152)+67)
          )) );
SOURCE(24805, 41)
      (void) ProcessLine←P4560((* (( (ptr) &var←c60120)+18)/* line←v19592 */  ), (* (( (ptr) &var←c60120)+20)/* thisCurve←v19732 */  ), featureData←v19676, (word) (
            ( (bPt) &var←c60120)+64)/* var←c54712 */ );
      angleLines←v20152 = (* (( (ptr) angleLines←v20152)+1) );
      goto lab←L100070;
      lab←L100067: ;
      };
SOURCE(24857, 195)
   {
      register word dLines←v20280;
      dLines←v20280 = (* (( (ptr) alignBag←v12688)+3) );
      lab←L100074: ;
      if ((dLines←v20280 != 0)) {
         }
      else {
         goto lab←L100071;
         };
SOURCE(24949, 26)
      featureData←v19676 = (*  (ptr) dLines←v20280 );
SOURCE(24977, 32)
      (* (( (ptr) &var←c60120)+18)/* line←v19592 */  ) = XR←Narrow((* (( (ptr) featureData←v19676)+1) ), (* (( (ptr) gf←c60152)+68)
          ));
SOURCE(25011, 41)
      (void) ProcessLine←P4560((* (( (ptr) &var←c60120)+18)/* line←v19592 */  ), (* (( (ptr) &var←c60120)+20)/* thisCurve←v19732 */  ), featureData←v19676, (word) (
            ( (bPt) &var←c60120)+64)/* var←c54712 */ );
      dLines←v20280 = (* (( (ptr) dLines←v20280)+1) );
      goto lab←L100074;
      lab←L100071: ;
      };
SOURCE(25063, 228)
   {
      register word circles←v20408;
      circles←v20408 = (* (( (ptr) alignBag←v12688)+2) );
      lab←L100078: ;
      if ((circles←v20408 != 0)) {
         }
      else {
         goto lab←L100075;
         };
SOURCE(25157, 27)
      featureData←v19676 = (*  (ptr) circles←v20408 );
SOURCE(25186, 58)
      circle←v19620 = (*  (ptr) XR←Narrow((* (( (ptr) featureData←v19676)+1) ), (* (( (ptr) gf←c60152)+69) )) );
SOURCE(25246, 45)
      (void) ProcessCircle←P4620(circle←v19620, (* (( (ptr) &var←c60120)+20)/* thisCurve←v19732 */  ), featureData←v19676, (word) (
            ( (bPt) &var←c60120)+56)/* var←c54680 */ );
      circles←v20408 = (* (( (ptr) circles←v20408)+1) );
      goto lab←L100078;
      lab←L100075: ;
      };
SOURCE(25302, 52)
   {
      word pd167;
      pd167 = (* (( (ptr) (* (( (ptr) gf←c60152)+203)/* var←c53176 */  ))+9) );
      (void) ( *( (fPt) ((*  (ptr) pd167 ))))(sceneBag←v12716, (word) (( (bPt) &var←c60120)+32)/* var←c54584 */ , pd167);
      };
SOURCE(25356, 19)
   curveCount←v12900 = (*  (ptr) (* (( (ptr) &var←c60120)+7)/* h←v12872 */  ) );
SOURCE(25377, 112)
   if ((0 != (* (( (ptr) (* (( (ptr) &var←c60120)+7)/* h←v12872 */  ))+8) ))) {
SOURCE(25398, 45)
      {
         word pd168;
         pd168 = (* (( (ptr) (* (( (ptr) gf←c60152)+202)/* var←c51480 */  ))+12) );
         (void) ( *( (fPt) ((*  (ptr) pd168 ))))((* (( (ptr) gf←c60152)+82) ), (* (( (ptr) gf←c60152)+84) ), pd168);
         };
SOURCE(25445, 44)
      {
         word pd169;
         pd169 = (* (( (ptr) (* (( (ptr) gf←c60152)+202)/* var←c51480 */  ))+14) );
         (void) ( *( (fPt) ((*  (ptr) pd169 ))))((* (( (ptr) gf←c60152)+82) ), (* (( (ptr) gf←c60152)+84) ), pd169);
         };
      };
SOURCE(25494, 25)
   (void) SortCurves←P2040((* (( (ptr) &var←c60120)+7)/* h←v12872 */  ), curveCount←v12900);
   /* removed tail goto */ 
   (*  (ptr) formal←c0467 ) = (* (( (ptr) &var←c60120)+7)/* h←v12872 */  );
   (* (( (ptr) formal←c0467)+1) ) = curveCount←v12900;
   return;
   }

static void ProcessLine←P4560(line←v19836, thisCurve←v19864, featureData←v19892, formal←c60216)
   word line←v19836;
   word thisCurve←v19864;
   word featureData←v19892;
   word formal←c60216;
   {
   register ptr gf←c60184 =  (ptr) &globalframe;
   formal←c60216 = (formal←c60216 - 64);
   /* ProcessLine: */ 
SOURCE(22171, 486)
SOURCE(22254, 46)
   {
      word pd170;
      pd170 = (* (( (ptr) (* (( (ptr) gf←c60184)+209)/* var←c54776 */  ))+39) );
      (*  (ptr) thisCurve←v19864 ) = (word) ( *( (fPt) ((*  (ptr) pd170 ))))((*  (W2Pt) (( (ptr) formal←c60216)+4) ), line←v19836, pd170)
      ;
      };
SOURCE(22302, 355)
   {
      word x171;
      word x172;
      if (((
         x171 = (*  (ptr) thisCurve←v19864 ),  *(float*)&x171
         ) < (
         x172 = (* (( (ptr) formal←c60216)+21) ),  *(float*)&x172
         ))) {
SOURCE(22334, 35)
         (* (( (ptr) thisCurve←v19864)+5) ) = featureData←v19892;
SOURCE(22371, 52)
         {
            word pd173;
            pd173 = (* (( (ptr) (* (( (ptr) gf←c60184)+209)/* var←c54776 */  ))+40) );
            (void) ( *( (fPt) ((*  (ptr) pd173 ))))((word) (( (bPt) thisCurve←v19864)+4), (*  (W2Pt) (( (ptr) formal←c60216)+4) ), line←v19836, pd173)
            ;
            };
SOURCE(22425, 52)
         {
            word pd174;
            pd174 = (* (( (ptr) (* (( (ptr) gf←c60184)+205)/* var←c54008 */  ))+11) );
            (void) ( *( (fPt) ((*  (ptr) pd174 ))))((word) (( (bPt) thisCurve←v19864)+12), (*  (W2Pt) (( (ptr) formal←c60216)+4) ), (*  (W2Pt) (
                  ( (ptr) thisCurve←v19864)+1) ), pd174);
            };
SOURCE(22479, 86)
         {
            word pd175;
            word x176;
            word x177;
            pd175 = (* (( (ptr) (* (( (ptr) gf←c60184)+205)/* var←c54008 */  ))+20) );
            if (((
               x176 = (word) ( *( (fPt) ((*  (ptr) pd175 ))))((*  (W2Pt) ((( (ptr) thisCurve←v19864)+3)) ), pd175),  *(float*)&x176
               ) == (
               x177 = (*  (ptr) &fc58 ),  *(float*)&x177
               ))) {
SOURCE(22539, 26)
               (* (( (ptr) thisCurve←v19864)+3) ) = (*  (ptr) &fc58 );
               (* (( (ptr) thisCurve←v19864)+4) ) = (*  (ptr) &fc59 );
               };
            };
SOURCE(22569, 23)
         (* (( (ptr) thisCurve←v19864)+6) ) = 0;
SOURCE(22594, 23)
         (* (( (ptr) thisCurve←v19864)+8) ) =  (word) -1;
SOURCE(22619, 38)
         (* (( (ptr) formal←c60216)+21) ) = (word) AddNeighbor←P1680(thisCurve←v19864, (* (( (ptr) formal←c60216)+7) ), 1);
         };
      };
   }

static void ProcessCircle←P4620(formal←c01071, thisCurve←v19980, featureData←v20008, formal←c60312)
   word formal←c01071;
   word thisCurve←v19980;
   word featureData←v20008;
   word formal←c60312;
   {
   W10 var←c60248;
   /* declaration of circle←v19952 skipped */ 
   register ptr gf←c60280 =  (ptr) &globalframe;
   /* declaration of var←c54808 skipped */ 
   /* declaration of centerToQ←v20564 skipped */ 
   /* declaration of distQtoCenter←v20592 skipped */ 
   formal←c60312 = (formal←c60312 - 56);
   (* (( (ptr) &var←c60248)+4)/* circle←v19952 */  ) = formal←c01071;
   (*  (ptr) &var←c60248 ) = formal←c60312;
   /* ProcessCircle: */ 
SOURCE(22664, 864)
   {
      word tmpAddr178;
      tmpAddr178 = (word) (( (ptr) &var←c60248)+5)/* var←c54808 */ ;
      (*  (ptr) tmpAddr178 ) = ( ((word)  (fPt) QProjectedOntoCircle←P5004) );
      (* (( (ptr) tmpAddr178) + 1) ) = 1;
      };
SOURCE(23054, 51)
   {
      word pd179;
      pd179 = (* (( (ptr) (* (( (ptr) gf←c60280)+205)/* var←c54008 */  ))+11) );
      (void) ( *( (fPt) ((*  (ptr) pd179 ))))((word) (( (bPt) &var←c60248)+28)/* centerToQ←v20564 */ , (*  (W2Pt) (( (ptr) formal←c60312)+4)
          ), (*  (W2Pt) (* (( (ptr) &var←c60248)+4)/* circle←v19952 */  ) ), pd179);
      };
SOURCE(23107, 52)
   {
      word pd180;
      pd180 = (* (( (ptr) (* (( (ptr) gf←c60280)+205)/* var←c54008 */  ))+18) );
      (* (( (ptr) &var←c60248)+9)/* distQtoCenter←v20592 */  ) = (word) ( *( (fPt) ((*  (ptr) pd180 ))))((*  (W2Pt) ((( (ptr) &var←c60248)+7)
         /* centerToQ←v20564 */ ) ), pd180);
      };
SOURCE(23161, 49)
   {
      float tf181;
      word x182;
      word x183;
      float tf184;
      (*  (ptr) thisCurve←v19980 ) = (
         tf184 = FABS(((
               x182 = (* (( (ptr) &var←c60248)+9)/* distQtoCenter←v20592 */  ),  *(float*)&x182
               ) - (
               x183 = (* (( (ptr) (* (( (ptr) &var←c60248)+4)/* circle←v19952 */  ))+2) ),  *(float*)&x183
               )), tf181),  *(word*)&tf184
         );
      };
SOURCE(23212, 316)
   {
      word x185;
      word x186;
      if (((
         x185 = (*  (ptr) thisCurve←v19980 ),  *(float*)&x185
         ) < (
         x186 = (* (( (ptr) formal←c60312)+21) ),  *(float*)&x186
         ))) {
SOURCE(23244, 35)
         (* (( (ptr) thisCurve←v19980)+5) ) = featureData←v20008;
SOURCE(23281, 40)
         (void) QProjectedOntoCircle←P5004((word) (( (bPt) thisCurve←v19980)+4), (word) (( (bPt) &var←c60248)+20)/* var←c54808 */ )
         ;
SOURCE(23323, 115)
         {
            word x187;
            word x188;
            if (((
               x187 = (*  (ptr) thisCurve←v19980 ),  *(float*)&x187
               ) == (
               x188 = (*  (ptr) &fc58 ),  *(float*)&x188
               ))) {
SOURCE(23352, 34)
               (*  (W2Pt) (( (ptr) thisCurve←v19980)+3) ) = (*  (W2Pt) (( (ptr) &var←c60248)+7)/* centerToQ←v20564 */  );
               }
            else {
SOURCE(23386, 52)
               {
                  word pd189;
                  pd189 = (* (( (ptr) (* (( (ptr) gf←c60280)+205)/* var←c54008 */  ))+11) );
                  (void) ( *( (fPt) ((*  (ptr) pd189 ))))((word) (( (bPt) thisCurve←v19980)+12), (*  (W2Pt) (( (ptr) formal←c60312)+4) ), (*  (W2Pt) (
                        ( (ptr) thisCurve←v19980)+1) ), pd189);
                  };
               };
            };
SOURCE(23440, 23)
         (* (( (ptr) thisCurve←v19980)+6) ) = 0;
SOURCE(23465, 23)
         (* (( (ptr) thisCurve←v19980)+8) ) =  (word) -1;
SOURCE(23490, 38)
         (* (( (ptr) formal←c60312)+21) ) = (word) AddNeighbor←P1680(thisCurve←v19980, (* (( (ptr) formal←c60312)+7) ), 1);
         };
      };
   }

static void QProjectedOntoCircle←P5004(formal←c0486, formal←c60376)
   word formal←c0486;
   word formal←c60376;
   {
   register ptr gf←c60344 =  (ptr) &globalframe;
   W2 projectedPt←v20668;
   formal←c60376 = (formal←c60376 - 20);
   /* QProjectedOntoCircle: */ 
SOURCE(22753, 296)
SOURCE(22848, 201)
   {
      word x190;
      word x192;
      if (((
         x190 = (* (( (ptr) formal←c60376)+9) ),  *(float*)&x190
         ) < (
         x192 = (*  (ptr) &fc191 ),  *(float*)&x192
         ))) {
SOURCE(22880, 70)
         {
            word x193;
            word x194;
            *(float*)&projectedPt←v20668.f0 = (
               x193 = (*  (ptr) (* (( (ptr) formal←c60376)+4) ) ),  *(float*)&x193
               ) + (
               x194 = (* (( (ptr) (* (( (ptr) formal←c60376)+4) ))+2) ),  *(float*)&x194
               );
            };
         projectedPt←v20668.f1 = (* (( (ptr) (* (( (ptr) formal←c60376)+4) ))+1) );
         }
      else {
SOURCE(22950, 99)
         {
            W2 var←c54840;
            {
               word pd195;
               word x196;
               word x197;
               float tf198;
               pd195 = (* (( (ptr) (* (( (ptr) gf←c60344)+205)/* var←c54008 */  ))+12) );
               (void) ( *( (fPt) ((*  (ptr) pd195 ))))((word) &var←c54840, (*  (W2Pt) (( (ptr) formal←c60376)+7) ), (
                     tf198 = (
                        x196 = (* (( (ptr) (* (( (ptr) formal←c60376)+4) ))+2) ),  *(float*)&x196
                        ) / (
                        x197 = (* (( (ptr) formal←c60376)+9) ),  *(float*)&x197
                        ),  *(word*)&tf198
                     ), pd195);
               };
            {
               W2 var←c0485;
               {
                  word pd199;
                  pd199 = (* (( (ptr) (* (( (ptr) gf←c60344)+205)/* var←c54008 */  ))+10) );
                  (void) ( *( (fPt) ((*  (ptr) pd199 ))))((word) &var←c0485, (*  (W2Pt) (* (( (ptr) formal←c60376)+4) ) ), var←c54840, pd199)
                  ;
                  };
               projectedPt←v20668 = var←c0485;
               };
            };
         };
      };
   /* removed tail goto */ 
   (*  (W2Pt) formal←c0486 ) = projectedPt←v20668;
   return;
   }

static void ProcessSlice←P4680(sliceD←v20068, thisCurve←v20096, featureData←v20124, formal←c60440)
   word sliceD←v20068;
   word thisCurve←v20096;
   word featureData←v20124;
   word formal←c60440;
   {
   register ptr gf←c60408 =  (ptr) &globalframe;
   word success←v20740 = 0;
   formal←c60440 = (formal←c60440 - 48);
   /* ProcessSlice: */ 
SOURCE(23536, 540)
SOURCE(23656, 132)
   {
      W7 var←c54872;
      {
         word pd200;
         pd200 = (* (( (ptr) (*  (ptr) (*  (ptr) sliceD←v20068 ) ))+41) );
         (void) ( *( (fPt) ((*  (ptr) pd200 ))))((word) &var←c54872, sliceD←v20068, (*  (W2Pt) (( (ptr) formal←c60440)+4) ), (* (( (ptr) formal←c60440)+21)
             ), pd200);
         };
      success←v20740 = var←c54872.f6;
      (* (( (ptr) thisCurve←v20096)+6) ) = var←c54872.f5;
      (*  (W2Pt) (( (ptr) thisCurve←v20096)+3) ) = (*  (W2Pt) (( (ptr) &var←c54872)+3) );
      (*  (ptr) thisCurve←v20096 ) = var←c54872.f2;
      (*  (W2Pt) (( (ptr) thisCurve←v20096)+1) ) = (*  (W2Pt) &var←c54872 );
      };
SOURCE(23790, 286)
   if ((0 != success←v20740)) {
SOURCE(23808, 268)
      {
         word x201;
         word x202;
         if (((
            x201 = (*  (ptr) thisCurve←v20096 ),  *(float*)&x201
            ) < (
            x202 = (* (( (ptr) formal←c60440)+21) ),  *(float*)&x202
            ))) {
SOURCE(23840, 35)
            (* (( (ptr) thisCurve←v20096)+5) ) = featureData←v20124;
SOURCE(23877, 86)
            {
               word pd203;
               word x204;
               word x205;
               pd203 = (* (( (ptr) (* (( (ptr) gf←c60408)+205)/* var←c54008 */  ))+20) );
               if (((
                  x204 = (word) ( *( (fPt) ((*  (ptr) pd203 ))))((*  (W2Pt) ((( (ptr) thisCurve←v20096)+3)) ), pd203),  *(float*)&x204
                  ) == (
                  x205 = (*  (ptr) &fc58 ),  *(float*)&x205
                  ))) {
SOURCE(23937, 26)
                  (* (( (ptr) thisCurve←v20096)+3) ) = (*  (ptr) &fc58 );
                  (* (( (ptr) thisCurve←v20096)+4) ) = (*  (ptr) &fc59 );
                  };
               };
SOURCE(23968, 68)
            {
               word pd206;
               pd206 = (* (( (ptr) (* (( (ptr) gf←c60408)+207)/* var←c54136 */  ))+21) );
               (* (( (ptr) thisCurve←v20096)+8) ) = (word) ( *( (fPt) ((*  (ptr) pd206 ))))((* (( (ptr) (* (( (ptr) formal←c60440)+6) ))+11)
                   ), (*  (ptr) sliceD←v20068 ), pd206);
               };
SOURCE(24038, 38)
            (* (( (ptr) formal←c60440)+21) ) = (word) AddNeighbor←P1680(thisCurve←v20096, (* (( (ptr) formal←c60440)+7) ), 1);
            };
         };
      };
   }

static word ProcessSlopeLine←P4740(feature←v38372, formal←c60504)
   word feature←v38372;
   word formal←c60504;
   {
   register ptr gf←c60472 =  (ptr) &globalframe;
   word done←v38416;
   formal←c60504 = (formal←c60504 - 40);
   /* ProcessSlopeLine: */ 
SOURCE(24087, 133)
SOURCE(24087, 133)
   done←v38416 = 0;
SOURCE(24133, 48)
   (* (( (ptr) formal←c60504)+18) ) = (*  (ptr) XR←Narrow((* (( (ptr) feature←v38372)+1) ), (* (( (ptr) gf←c60472)+67) )) );
SOURCE(24183, 37)
   (void) ProcessLine←P4560((* (( (ptr) formal←c60504)+18) ), (* (( (ptr) formal←c60504)+20) ), feature←v38372, (word) (( (bPt) formal←c60504)+64)
      );
SOURCE(24087, 133)
   return(done←v38416);
   }

static word DoForSceneSlice←P4800(feature←v38476, formal←c60568)
   word feature←v38476;
   word formal←c60568;
   {
   register ptr gf←c60536 =  (ptr) &globalframe;
   word done←v38520;
   formal←c60568 = (formal←c60568 - 32);
   /* DoForSceneSlice: */ 
SOURCE(24225, 134)
SOURCE(24225, 134)
   done←v38520 = 0;
SOURCE(24270, 47)
   (* (( (ptr) formal←c60568)+19) ) = XR←Narrow((* (( (ptr) feature←v38476)+1) ), (* (( (ptr) gf←c60536)+64) ));
SOURCE(24319, 40)
   (void) ProcessSlice←P4680((* (( (ptr) formal←c60568)+19) ), (* (( (ptr) formal←c60568)+20) ), feature←v38476, (word) (( (bPt) formal←c60568)+48)
      );
SOURCE(24225, 134)
   return(done←v38520);
   }

static void FacesInNeighborhoodPlus←P1440(formal←c0510, alignBag←v12960, sceneBag←v12988, formal←c01072, formal←c01073, formal←c01074)
   word formal←c0510;
   word alignBag←v12960;
   word sceneBag←v12988;
   W2 formal←c01072;
   word formal←c01073;
   word formal←c01074;
   {
   W16 var←c60600;
   /* declaration of q←v13016 skipped */ 
   /* declaration of ggData←v13044 skipped */ 
   /* declaration of t←v13072 skipped */ 
   register ptr gf←c60632 =  (ptr) &globalframe;
   /* declaration of h←v13116 skipped */ 
   word faceCount←v13144;
   /* declaration of var←c54904 skipped */ 
   /* declaration of var←c54936 skipped */ 
   /* declaration of sliceD←v20784 skipped */ 
   word added←v20812 = 0;
   /* declaration of thisFace←v20840 skipped */ 
   /* declaration of priorityTol←v20868 skipped */ 
   (*  (W2Pt) (( (ptr) &var←c60600)+4)/* q←v13016 */  ) = formal←c01072;
   (* (( (ptr) &var←c60600)+6)/* ggData←v13044 */  ) = formal←c01073;
   (* (( (ptr) &var←c60600)+7)/* t←v13072 */  ) = formal←c01074;
   /* FacesInNeighborhoodPlus: */ 
SOURCE(25557, 1515)
   {
      word tmpAddr207;
      tmpAddr207 = (word) (( (ptr) &var←c60600)+9)/* var←c54904 */ ;
      (*  (ptr) tmpAddr207 ) = ( ((word)  (fPt) DoForSceneSlice←P5124) );
      (* (( (ptr) tmpAddr207) + 1) ) = 1;
      };
   {
      word tmpAddr208;
      tmpAddr208 = (word) (( (ptr) &var←c60600)+11)/* var←c54936 */ ;
      (*  (ptr) tmpAddr208 ) = ( ((word)  (fPt) ProcessSlice←P5064) );
      (* (( (ptr) tmpAddr208) + 1) ) = 1;
      };
SOURCE(25557, 1515)
   (* (( (ptr) &var←c60600)+8)/* h←v13116 */  ) = 0;
SOURCE(25708, 23)
   (* (( (ptr) &var←c60600)+13)/* sliceD←v20784 */  ) = 0;
SOURCE(25754, 39)
   (* (( (ptr) &var←c60600)+14)/* thisFace←v20840 */  ) = XR←NewObject(36, (* (( (ptr) gf←c60632)+60) ));
SOURCE(25795, 21)
   (* (( (ptr) &var←c60600)+15)/* priorityTol←v20868 */  ) =  (word) -1;
SOURCE(26827, 29)
   (* (( (ptr) &var←c60600)+8)/* h←v13116 */  ) = (word) BestFacesFromPool←P1500((* ((( (ptr) &var←c60600)+6)/* ggData←v13044 */ ) ))
   ;
SOURCE(26859, 52)
   {
      word pd209;
      pd209 = (* (( (ptr) (* (( (ptr) gf←c60632)+203)/* var←c53176 */  ))+9) );
      (void) ( *( (fPt) ((*  (ptr) pd209 ))))(sceneBag←v12988, (word) (( (bPt) &var←c60600)+36)/* var←c54904 */ , pd209);
      };
SOURCE(26914, 18)
   faceCount←v13144 = (*  (ptr) (* (( (ptr) &var←c60600)+8)/* h←v13116 */  ) );
SOURCE(26934, 110)
   if ((0 != (* (( (ptr) (* (( (ptr) &var←c60600)+8)/* h←v13116 */  ))+6) ))) {
SOURCE(26955, 44)
      {
         word pd210;
         pd210 = (* (( (ptr) (* (( (ptr) gf←c60632)+202)/* var←c51480 */  ))+12) );
         (void) ( *( (fPt) ((*  (ptr) pd210 ))))((* (( (ptr) gf←c60632)+81) ), (* (( (ptr) gf←c60632)+84) ), pd210);
         };
SOURCE(27001, 43)
      {
         word pd211;
         pd211 = (* (( (ptr) (* (( (ptr) gf←c60632)+202)/* var←c51480 */  ))+14) );
         (void) ( *( (fPt) ((*  (ptr) pd211 ))))((* (( (ptr) gf←c60632)+81) ), (* (( (ptr) gf←c60632)+84) ), pd211);
         };
      };
SOURCE(27049, 23)
   (void) SortFaces←P2100((* (( (ptr) &var←c60600)+8)/* h←v13116 */  ), faceCount←v13144);
   /* removed tail goto */ 
   (*  (ptr) formal←c0510 ) = (* (( (ptr) &var←c60600)+8)/* h←v13116 */  );
   (* (( (ptr) formal←c0510)+1) ) = faceCount←v13144;
   return;
   }

static void ProcessSlice←P5064(sliceD←v21000, thisFace←v21028, featureData←v21056, formal←c60696)
   word sliceD←v21000;
   word thisFace←v21028;
   word featureData←v21056;
   word formal←c60696;
   {
   register ptr gf←c60664 =  (ptr) &globalframe;
   word hitData←v21084 = 0;
   word moreHitDatas←v21112 = 0;
   word success←v21140 = 1;
   formal←c60696 = (formal←c60696 - 44);
   /* ProcessSlice: */ 
SOURCE(25819, 852)
SOURCE(25986, 685)
   {
      word pd212;
      pd212 = (* (( (ptr) (* (( (ptr) gf←c60664)+207)/* var←c54136 */  ))+21) );
      if (( (int)(word) ( *( (fPt) ((*  (ptr) pd212 ))))((* (( (ptr) (* (( (ptr) formal←c60696)+6) ))+11) ), (*  (ptr) sliceD←v21000 ), pd212)
       >=  (int)(* (( (ptr) formal←c60696)+15) ))) {
SOURCE(26059, 78)
         {
            W2 var←c55000;
            {
               word pd213;
               pd213 = (* (( (ptr) (* (( (ptr) gf←c60664)+208)/* var←c54328 */  ))+48) );
               (void) ( *( (fPt) ((*  (ptr) pd213 ))))((word) &var←c55000, (*  (ptr) sliceD←v21000 ), (*  (W2Pt) (( (ptr) formal←c60696)+4)
                   ), (* (( (ptr) formal←c60696)+7) ), pd213);
               };
            moreHitDatas←v21112 = var←c55000.f1;
            hitData←v21084 = var←c55000.f0;
            };
SOURCE(26139, 238)
         if ((hitData←v21084 != 0)) {
SOURCE(26163, 18)
            (*  (W2Pt) (( (ptr) thisFace←v21028)+1) ) = (*  (W2Pt) (( (ptr) formal←c60696)+4) );
SOURCE(26183, 67)
            {
               word pd214;
               pd214 = (* (( (ptr) (* (( (ptr) gf←c60664)+207)/* var←c54136 */  ))+21) );
               (* (( (ptr) thisFace←v21028)+8) ) = (word) ( *( (fPt) ((*  (ptr) pd214 ))))((* (( (ptr) (* (( (ptr) formal←c60696)+6) ))+11)
                   ), (*  (ptr) sliceD←v21000 ), pd214);
               };
SOURCE(26252, 25)
            (* (( (ptr) thisFace←v21028)+3) ) = (*  (ptr) &fc58 );
            (* (( (ptr) thisFace←v21028)+4) ) = (*  (ptr) &fc59 );
SOURCE(26279, 26)
            (* (( (ptr) thisFace←v21028)+6) ) = hitData←v21084;
SOURCE(26307, 34)
            (* (( (ptr) thisFace←v21028)+5) ) = featureData←v21056;
SOURCE(26343, 34)
            (* (( (ptr) formal←c60696)+15) ) = (word) AddFace←P1740(thisFace←v21028, (* (( (ptr) formal←c60696)+8) ));
            };
SOURCE(26382, 289)
         {
            register word list←v21292;
            list←v21292 = moreHitDatas←v21112;
            lab←L100084: ;
            if ((list←v21292 != 0)) {
               }
            else {
               goto lab←L100081;
               };
SOURCE(26454, 18)
            (*  (W2Pt) (( (ptr) thisFace←v21028)+1) ) = (*  (W2Pt) (( (ptr) formal←c60696)+4) );
SOURCE(26474, 67)
            {
               word pd215;
               pd215 = (* (( (ptr) (* (( (ptr) gf←c60664)+207)/* var←c54136 */  ))+21) );
               (* (( (ptr) thisFace←v21028)+8) ) = (word) ( *( (fPt) ((*  (ptr) pd215 ))))((* (( (ptr) (* (( (ptr) formal←c60696)+6) ))+11)
                   ), (*  (ptr) sliceD←v21000 ), pd215);
               };
SOURCE(26543, 25)
            (* (( (ptr) thisFace←v21028)+3) ) = (*  (ptr) &fc58 );
            (* (( (ptr) thisFace←v21028)+4) ) = (*  (ptr) &fc59 );
SOURCE(26570, 29)
            (* (( (ptr) thisFace←v21028)+6) ) = (*  (ptr) list←v21292 );
SOURCE(26601, 34)
            (* (( (ptr) thisFace←v21028)+5) ) = featureData←v21056;
SOURCE(26637, 34)
            (* (( (ptr) formal←c60696)+15) ) = (word) AddFace←P1740(thisFace←v21028, (* (( (ptr) formal←c60696)+8) ));
            list←v21292 = (* (( (ptr) list←v21292)+1) );
            goto lab←L100084;
            lab←L100081: ;
            };
         };
      };
   }

static word DoForSceneSlice←P5124(feature←v40596, formal←c60760)
   word feature←v40596;
   word formal←c60760;
   {
   register ptr gf←c60728 =  (ptr) &globalframe;
   word done←v40640;
   formal←c60760 = (formal←c60760 - 36);
   /* DoForSceneSlice: */ 
SOURCE(26688, 133)
SOURCE(26688, 133)
   done←v40640 = 0;
SOURCE(26733, 47)
   (* (( (ptr) formal←c60760)+13) ) = XR←Narrow((* (( (ptr) feature←v40596)+1) ), (* (( (ptr) gf←c60728)+64) ));
SOURCE(26782, 39)
   (void) ProcessSlice←P5064((* (( (ptr) formal←c60760)+13) ), (* (( (ptr) formal←c60760)+14) ), feature←v40596, (word) (( (bPt) formal←c60760)+44)
      );
SOURCE(26688, 133)
   return(done←v40640);
   }

static word BestFacesFromPool←P1500(ggData←v13204)
   word ggData←v13204;
   {
   register ptr gf←c60792 =  (ptr) &globalframe;
   word h←v13248;
   /* BestFacesFromPool: */ 
SOURCE(27102, 346)
SOURCE(27102, 346)
   h←v13248 = 0;
SOURCE(27170, 63)
   h←v13248 = (* (( (ptr) XR←Narrow((* (( (ptr) ggData←v13204)+52) ), (* (( (ptr) gf←c60792)+72) )))+2) );
SOURCE(27235, 10)
   (*  (ptr) h←v13248 ) = 0;
SOURCE(27247, 18)
   (* (( (ptr) h←v13248)+1) ) =  (word) -1;
SOURCE(27267, 17)
   (* (( (ptr) h←v13248)+3) ) = 9999;
SOURCE(27286, 25)
   (* (( (ptr) h←v13248)+2) ) = 2147483647;
SOURCE(27313, 25)
   (* (( (ptr) h←v13248)+4) ) =  (word) -1;
SOURCE(27340, 18)
   (* (( (ptr) h←v13248)+6) ) = 0;
SOURCE(27360, 88)
   {
      register word i←v21432 = 0;
      register word noName←c55032;
      noName←c55032 = (* (( (ptr) gf←c60792)+4)/* MaxFeatures←v5240 */  );
      if ((i←v21432 >= noName←c55032)) {
         goto lab←L100085;
         };
      lab←L100088: ;
SOURCE(27394, 30)
      {
         word limit216;
         (*  (ptr) (* ((( (ptr) h←v13248)+8)+(
               limit216 = (* (( (ptr) h←v13248)+7) ),
               BCK(i←v21432, limit216)
               )) ) ) = 2139095039;
         };
SOURCE(27426, 22)
      {
         word limit217;
         (* (( (ptr) (* ((( (ptr) h←v13248)+8)+(
                  limit217 = (* (( (ptr) h←v13248)+7) ),
                  BCK(i←v21432, limit217)
                  )) ))+5) ) = 0;
         };
      i←v21432 = (i←v21432 + 1);
      if ((i←v21432 < noName←c55032)) {
         goto lab←L100088;
         };
      lab←L100085: ;
      };
SOURCE(27102, 346)
   return(h←v13248);
   }

static word BestCurvesFromPool←P1560(ggData←v13308, t←v13336, innerR←v13364)
   word ggData←v13308;
   word t←v13336;
   word innerR←v13364;
   {
   register ptr gf←c60824 =  (ptr) &globalframe;
   word h←v13408;
   /* BestCurvesFromPool: */ 
SOURCE(27463, 435)
SOURCE(27463, 435)
   h←v13408 = 0;
SOURCE(27556, 64)
   h←v13408 = (* (( (ptr) XR←Narrow((* (( (ptr) ggData←v13308)+52) ), (* (( (ptr) gf←c60824)+72) )))+1) );
SOURCE(27622, 10)
   (*  (ptr) h←v13408 ) = 0;
SOURCE(27634, 11)
   (* (( (ptr) h←v13408)+1) ) = (*  (ptr) &fc58 );
SOURCE(27647, 17)
   (* (( (ptr) h←v13408)+3) ) = 9999;
SOURCE(27666, 26)
   (* (( (ptr) h←v13408)+2) ) = 2139095039;
SOURCE(27694, 10)
   (* (( (ptr) h←v13408)+5) ) = t←v13336;
SOURCE(27706, 17)
   (* (( (ptr) h←v13408)+6) ) = innerR←v13364;
SOURCE(27725, 11)
   (* (( (ptr) h←v13408)+7) ) = (*  (ptr) &fc65 );
SOURCE(27755, 33)
   (* (( (ptr) h←v13408)+4) ) = 2139095039;
SOURCE(27790, 18)
   (* (( (ptr) h←v13408)+8) ) = 0;
SOURCE(27810, 88)
   {
      register word i←v21476 = 0;
      register word noName←c55064;
      noName←c55064 = (* (( (ptr) gf←c60824)+4)/* MaxFeatures←v5240 */  );
      if ((i←v21476 >= noName←c55064)) {
         goto lab←L100089;
         };
      lab←L100092: ;
SOURCE(27844, 30)
      {
         word limit218;
         (*  (ptr) (* ((( (ptr) h←v13408)+10)+(
               limit218 = (* (( (ptr) h←v13408)+9) ),
               BCK(i←v21476, limit218)
               )) ) ) = 2139095039;
         };
SOURCE(27876, 22)
      {
         word limit219;
         (* (( (ptr) (* ((( (ptr) h←v13408)+10)+(
                  limit219 = (* (( (ptr) h←v13408)+9) ),
                  BCK(i←v21476, limit219)
                  )) ))+5) ) = 0;
         };
      i←v21476 = (i←v21476 + 1);
      if ((i←v21476 < noName←c55064)) {
         goto lab←L100092;
         };
      lab←L100089: ;
      };
SOURCE(27463, 435)
   return(h←v13408);
   }

static word BestPointsFromPool←P1620(ggData←v13468, t←v13496)
   word ggData←v13468;
   word t←v13496;
   {
   register ptr gf←c60856 =  (ptr) &globalframe;
   word h←v13540;
   /* BestPointsFromPool: */ 
SOURCE(27913, 402)
SOURCE(27913, 402)
   h←v13540 = 0;
SOURCE(27992, 64)
   h←v13540 = (*  (ptr) XR←Narrow((* (( (ptr) ggData←v13468)+52) ), (* (( (ptr) gf←c60856)+72) )) );
SOURCE(28058, 10)
   (*  (ptr) h←v13540 ) = 0;
SOURCE(28070, 11)
   (* (( (ptr) h←v13540)+1) ) = (*  (ptr) &fc58 );
SOURCE(28083, 17)
   (* (( (ptr) h←v13540)+3) ) = 9999;
SOURCE(28102, 26)
   (* (( (ptr) h←v13540)+2) ) = 2139095039;
SOURCE(28130, 10)
   (* (( (ptr) h←v13540)+5) ) = t←v13496;
SOURCE(28142, 11)
   (* (( (ptr) h←v13540)+7) ) = (*  (ptr) &fc65 );
SOURCE(28172, 33)
   (* (( (ptr) h←v13540)+4) ) = 2139095039;
SOURCE(28207, 18)
   (* (( (ptr) h←v13540)+8) ) = 0;
SOURCE(28227, 88)
   {
      register word i←v21520 = 0;
      register word noName←c55096;
      noName←c55096 = (* (( (ptr) gf←c60856)+4)/* MaxFeatures←v5240 */  );
      if ((i←v21520 >= noName←c55096)) {
         goto lab←L100093;
         };
      lab←L100096: ;
SOURCE(28261, 30)
      {
         word limit220;
         (*  (ptr) (* ((( (ptr) h←v13540)+10)+(
               limit220 = (* (( (ptr) h←v13540)+9) ),
               BCK(i←v21520, limit220)
               )) ) ) = 2139095039;
         };
SOURCE(28293, 22)
      {
         word limit221;
         (* (( (ptr) (* ((( (ptr) h←v13540)+10)+(
                  limit221 = (* (( (ptr) h←v13540)+9) ),
                  BCK(i←v21520, limit221)
                  )) ))+5) ) = 0;
         };
      i←v21520 = (i←v21520 + 1);
      if ((i←v21520 < noName←c55096)) {
         goto lab←L100096;
         };
      lab←L100093: ;
      };
SOURCE(27913, 402)
   return(h←v13540);
   }

static word AddNeighbor←P1680(thisPoint←v13600, h←v13628, curve←v13656)
   word thisPoint←v13600;
   word h←v13628;
   word curve←v13656;
   {
   register ptr gf←c60888 =  (ptr) &globalframe;
   word dTol←v13700;
   word d←v21564;
   word n←v21592;
   /* AddNeighbor: */ 
SOURCE(28330, 1282)
SOURCE(28432, 24)
   d←v21564 = (*  (ptr) thisPoint←v13600 );
SOURCE(28458, 20)
   n←v21592 = (* (( (ptr) gf←c60888)+4)/* MaxFeatures←v5240 */  );
SOURCE(28480, 1132)
   {
      word x222;
      word x223;
      if (((
         x222 = d←v21564,  *(float*)&x222
         ) > (
         x223 = (* (( (ptr) h←v13628)+5) ),  *(float*)&x223
         ))) {
SOURCE(28517, 9)
         goto lab←L100099;
         }
      else {
         if (((*  (ptr) h←v13628 ) < n←v21592)) {
SOURCE(28604, 8)
            goto lab←L100097;
            }
         else {
            if (((*  (ptr) h←v13628 ) == n←v21592)) {
SOURCE(28628, 22)
               goto lab←L100098;
               }
            else {
SOURCE(28663, 39)
               {
                  word var←c0543;
                  var←c0543 = (* (( (ptr) gf←c60888)+80) );
                  (void) (XR←RaiseSignal((word) (( (bPt) gf←c60888)+344)/* var←c49560 */ , 0, (word) &var←c0543));
                  };
               };
            };
         };
      };
   goto lab←L100100;
   lab←L100097: ;
SOURCE(28719, 23)
   {
      word idx224;
      word limit225;
      (*  (W9Pt) (* ((( (ptr) h←v13628)+10)+(
            idx224 = (*  (ptr) h←v13628 ),
            limit225 = (* (( (ptr) h←v13628)+9) ),
            BCK(idx224, limit225)
            )) ) ) = (*  (W9Pt) thisPoint←v13600 );
      };
SOURCE(28744, 49)
   {
      word x226;
      word x227;
      if (((
         x226 = d←v21564,  *(float*)&x226
         ) > (
         x227 = (* (( (ptr) h←v13628)+1) ),  *(float*)&x227
         ))) {
SOURCE(28763, 9)
         (* (( (ptr) h←v13628)+1) ) = d←v21564;
SOURCE(28774, 19)
         (* (( (ptr) h←v13628)+3) ) = (*  (ptr) h←v13628 );
         };
      };
SOURCE(28796, 21)
   {
      word x228;
      float tf229;
      float tf230;
      word x231;
      float tf232;
      (* (( (ptr) h←v13628)+2) ) = (
         tf232 = FMIN((
               x228 = (* (( (ptr) h←v13628)+2) ),  *(float*)&x228
               ), (
               x231 = d←v21564,  *(float*)&x231
               ), tf229, tf230),  *(word*)&tf232
         );
      };
SOURCE(28819, 19)
   (*  (ptr) h←v13628 ) = ((*  (ptr) h←v13628 ) + 1);
SOURCE(28840, 85)
   if ((0 != curve←v13656)) {
SOURCE(28854, 46)
      {
         word var←c55128;
         {
            word x233;
            word x234;
            float tf235;
            float tf236;
            word x237;
            float tf238;
            var←c55128 = (
               tf238 = FMAX(((
                     x233 = (* (( (ptr) h←v13628)+2) ),  *(float*)&x233
                     ) + (
                     x234 = (* (( (ptr) h←v13628)+7) ),  *(float*)&x234
                     )), (
                     x237 = (* (( (ptr) h←v13628)+6) ),  *(float*)&x237
                     ), tf235, tf236),  *(word*)&tf238
               );
            };
         (* (( (ptr) h←v13628)+5) ) = var←c55128;
         dTol←v13700 = var←c55128;
         };
      }
   else {
SOURCE(28900, 25)
      {
         word var←c55160;
         {
            word x239;
            word x240;
            *(float*)&var←c55160 = (
               x239 = (* (( (ptr) h←v13628)+2) ),  *(float*)&x239
               ) + (
               x240 = (* (( (ptr) h←v13628)+7) ),  *(float*)&x240
               );
            };
         (* (( (ptr) h←v13628)+5) ) = var←c55160;
         dTol←v13700 = var←c55160;
         };
      };
   goto lab←L100100;
   lab←L100098: ;
SOURCE(28953, 551)
   {
      word x241;
      word x242;
      if (((
         x241 = d←v21564,  *(float*)&x241
         ) < (
         x242 = (* (( (ptr) h←v13628)+1) ),  *(float*)&x242
         ))) {
SOURCE(28991, 27)
         {
            word idx243;
            word limit244;
            (*  (W9Pt) (* ((( (ptr) h←v13628)+10)+(
                  idx243 = (* (( (ptr) h←v13628)+3) ),
                  limit244 = (* (( (ptr) h←v13628)+9) ),
                  BCK(idx243, limit244)
                  )) ) ) = (*  (W9Pt) thisPoint←v13600 );
            };
SOURCE(29020, 39)
         {
            word x245;
            float tf246;
            float tf247;
            word x248;
            float tf249;
            (* (( (ptr) h←v13628)+4) ) = (
               tf249 = FMIN((
                     x245 = (* (( (ptr) h←v13628)+4) ),  *(float*)&x245
                     ), (
                     x248 = (* (( (ptr) h←v13628)+1) ),  *(float*)&x248
                     ), tf246, tf247),  *(word*)&tf249
               );
            };
SOURCE(29061, 21)
         {
            word x250;
            float tf251;
            float tf252;
            word x253;
            float tf254;
            (* (( (ptr) h←v13628)+2) ) = (
               tf254 = FMIN((
                     x250 = (* (( (ptr) h←v13628)+2) ),  *(float*)&x250
                     ), (
                     x253 = d←v21564,  *(float*)&x253
                     ), tf251, tf252),  *(word*)&tf254
               );
            };
SOURCE(29084, 85)
         if ((0 != curve←v13656)) {
SOURCE(29098, 46)
            {
               word var←c55192;
               {
                  word x255;
                  word x256;
                  float tf257;
                  float tf258;
                  word x259;
                  float tf260;
                  var←c55192 = (
                     tf260 = FMAX(((
                           x255 = (* (( (ptr) h←v13628)+2) ),  *(float*)&x255
                           ) + (
                           x256 = (* (( (ptr) h←v13628)+7) ),  *(float*)&x256
                           )), (
                           x259 = (* (( (ptr) h←v13628)+6) ),  *(float*)&x259
                           ), tf257, tf258),  *(word*)&tf260
                     );
                  };
               (* (( (ptr) h←v13628)+5) ) = var←c55192;
               dTol←v13700 = var←c55192;
               };
            }
         else {
SOURCE(29144, 25)
            {
               word var←c55224;
               {
                  word x261;
                  word x262;
                  *(float*)&var←c55224 = (
                     x261 = (* (( (ptr) h←v13628)+2) ),  *(float*)&x261
                     ) + (
                     x262 = (* (( (ptr) h←v13628)+7) ),  *(float*)&x262
                     );
                  };
               (* (( (ptr) h←v13628)+5) ) = var←c55224;
               dTol←v13700 = var←c55224;
               };
            };
SOURCE(29171, 33)
         {
            word x263;
            word x264;
            (* (( (ptr) h←v13628)+8) ) =  (unsigned) ((
               x263 = (* (( (ptr) h←v13628)+4) ),  *(float*)&x263
               ) <= (
               x264 = dTol←v13700,  *(float*)&x264
               ));
            };
SOURCE(29206, 194)
         {
            word maxIndex←v21636 = 0;
            word maxDist←v21664;
SOURCE(29231, 19)
            maxDist←v21664 = (*  (ptr) &fc58 );
SOURCE(29252, 96)
            {
               register word i←v21708 = 0;
               register word noName←c55256;
               noName←c55256 = (* (( (ptr) gf←c60888)+4)/* MaxFeatures←v5240 */  );
               if ((i←v21708 >= noName←c55256)) {
                  goto lab←L100101;
                  };
               lab←L100104: ;
SOURCE(29286, 62)
               {
                  word limit265;
                  word x266;
                  word x267;
                  if (((
                     x266 = (*  (ptr) (* ((( (ptr) h←v13628)+10)+(
                           limit265 = (* (( (ptr) h←v13628)+9) ),
                           BCK(i←v21708, limit265)
                           )) ) ),  *(float*)&x266
                     ) > (
                     x267 = maxDist←v21664,  *(float*)&x267
                     ))) {
SOURCE(29315, 12)
                     maxIndex←v21636 = i←v21708;
SOURCE(29329, 19)
                     {
                        word limit268;
                        maxDist←v21664 = (*  (ptr) (* ((( (ptr) h←v13628)+10)+(
/*1*/   limit268 = (* (( (ptr) h←v13628)+9) ),
/*1*/   BCK(i←v21708, limit268)
/*1*/   )) ) );
                        };
                     };
                  };
               i←v21708 = (i←v21708 + 1);
               if ((i←v21708 < noName←c55256)) {
                  goto lab←L100104;
                  };
               lab←L100101: ;
               };
SOURCE(29360, 15)
            (* (( (ptr) h←v13628)+1) ) = maxDist←v21664;
SOURCE(29377, 21)
            (* (( (ptr) h←v13628)+3) ) = maxIndex←v21636;
            };
         }
      else {
SOURCE(29435, 13)
         dTol←v13700 = (* (( (ptr) h←v13628)+5) );
SOURCE(29450, 35)
         {
            word x269;
            float tf270;
            float tf271;
            word x272;
            float tf273;
            (* (( (ptr) h←v13628)+4) ) = (
               tf273 = FMIN((
                     x269 = (* (( (ptr) h←v13628)+4) ),  *(float*)&x269
                     ), (
                     x272 = d←v21564,  *(float*)&x272
                     ), tf270, tf271),  *(word*)&tf273
               );
            };
SOURCE(29487, 17)
         (* (( (ptr) h←v13628)+8) ) = 1;
         };
      };
   goto lab←L100100;
   lab←L100099: ;
SOURCE(29522, 13)
   dTol←v13700 = (* (( (ptr) h←v13628)+5) );
SOURCE(29537, 35)
   {
      word x274;
      float tf275;
      float tf276;
      word x277;
      float tf278;
      (* (( (ptr) h←v13628)+4) ) = (
         tf278 = FMIN((
               x274 = (* (( (ptr) h←v13628)+4) ),  *(float*)&x274
               ), (
               x277 = d←v21564,  *(float*)&x277
               ), tf275, tf276),  *(word*)&tf278
         );
      };
SOURCE(29574, 33)
   {
      word x279;
      word x280;
      (* (( (ptr) h←v13628)+8) ) =  (unsigned) ((
         x279 = (* (( (ptr) h←v13628)+4) ),  *(float*)&x279
         ) <= (
         x280 = dTol←v13700,  *(float*)&x280
         ));
      };
   lab←L100100: ;
SOURCE(28330, 1282)
   return(dTol←v13700);
   }

static word AddFace←P1740(thisFace←v13760, h←v13788)
   word thisFace←v13760;
   word h←v13788;
   {
   register ptr gf←c60920 =  (ptr) &globalframe;
   word priorityTol←v13832;
   word d←v21752;
   word n←v21780;
   /* AddFace: */ 
SOURCE(29621, 1285)
SOURCE(29702, 26)
   d←v21752 = (* (( (ptr) thisFace←v13760)+8) );
SOURCE(29730, 20)
   n←v21780 = (* (( (ptr) gf←c60920)+4)/* MaxFeatures←v5240 */  );
SOURCE(29752, 1154)
   if (( (int)d←v21752 <  (int)(* (( (ptr) h←v13788)+5) ))) {
SOURCE(29796, 9)
      goto lab←L100107;
      }
   else {
      if (((*  (ptr) h←v13788 ) < n←v21780)) {
SOURCE(29855, 8)
         goto lab←L100105;
         }
      else {
         if (((*  (ptr) h←v13788 ) == n←v21780)) {
SOURCE(29879, 22)
            goto lab←L100106;
            }
         else {
SOURCE(29914, 39)
            {
               word var←c0557;
               var←c0557 = (* (( (ptr) gf←c60920)+80) );
               (void) (XR←RaiseSignal((word) (( (bPt) gf←c60920)+344)/* var←c49560 */ , 0, (word) &var←c0557));
               };
            };
         };
      };
   goto lab←L100108;
   lab←L100105: ;
SOURCE(29970, 22)
   {
      word idx281;
      word limit282;
      (*  (W9Pt) (* ((( (ptr) h←v13788)+8)+(
            idx281 = (*  (ptr) h←v13788 ),
            limit282 = (* (( (ptr) h←v13788)+7) ),
            BCK(idx281, limit282)
            )) ) ) = (*  (W9Pt) thisFace←v13760 );
      };
SOURCE(29994, 65)
   if (( (int)d←v21752 <  (int)(* (( (ptr) h←v13788)+2) ))) {
SOURCE(30021, 17)
      (* (( (ptr) h←v13788)+2) ) = d←v21752;
SOURCE(30040, 19)
      (* (( (ptr) h←v13788)+3) ) = (*  (ptr) h←v13788 );
      };
SOURCE(30062, 37)
   {
      word x283;
      (* (( (ptr) h←v13788)+1) ) = (x283 = (* (( (ptr) h←v13788)+1) ),
         MAX((int)(word), x283, d←v21752));
      };
SOURCE(30101, 19)
   (*  (ptr) h←v13788 ) = ((*  (ptr) h←v13788 ) + 1);
SOURCE(30122, 27)
   priorityTol←v13832 = (* (( (ptr) h←v13788)+5) );
   goto lab←L100108;
   lab←L100106: ;
SOURCE(30177, 607)
   if (( (int)d←v21752 >  (int)(* (( (ptr) h←v13788)+2) ))) {
SOURCE(30223, 26)
      {
         word idx284;
         word limit285;
         (*  (W9Pt) (* ((( (ptr) h←v13788)+8)+(
               idx284 = (* (( (ptr) h←v13788)+3) ),
               limit285 = (* (( (ptr) h←v13788)+7) ),
               BCK(idx284, limit285)
               )) ) ) = (*  (W9Pt) thisFace←v13760 );
         };
SOURCE(30251, 63)
      {
         word x286;
         word x287;
         (* (( (ptr) h←v13788)+4) ) = (x286 = (* (( (ptr) h←v13788)+4) ),
            x287 = (* (( (ptr) h←v13788)+2) ),
            MAX((int)(word), x286, x287));
         };
SOURCE(30316, 37)
      {
         word x288;
         (* (( (ptr) h←v13788)+1) ) = (x288 = (* (( (ptr) h←v13788)+1) ),
            MAX((int)(word), x288, d←v21752));
         };
SOURCE(30355, 17)
      (* (( (ptr) h←v13788)+6) ) = 1;
SOURCE(30374, 231)
      {
         word minIndex←v21824 = 0;
         word minPriority←v21852 = 2147483647;
SOURCE(30429, 112)
         {
            register word i←v21896 = 0;
            register word noName←c55288;
            noName←c55288 = (* (( (ptr) gf←c60920)+4)/* MaxFeatures←v5240 */  );
            if ((i←v21896 >= noName←c55288)) {
               goto lab←L100109;
               };
            lab←L100112: ;
SOURCE(30463, 78)
            {
               word limit289;
               if (( (int)(* (( (ptr) (* ((( (ptr) h←v13788)+8)+(
                        limit289 = (* (( (ptr) h←v13788)+7) ),
                        BCK(i←v21896, limit289)
                        )) ))+8) ) <  (int)minPriority←v21852)) {
SOURCE(30500, 12)
                  minIndex←v21824 = i←v21896;
SOURCE(30514, 27)
                  {
                     word limit290;
                     minPriority←v21852 = (* (( (ptr) (* ((( (ptr) h←v13788)+8)+(
/*1*/   limit290 = (* (( (ptr) h←v13788)+7) ),
/*1*/   BCK(i←v21896, limit290)
/*1*/   )) ))+8) );
                     };
                  };
               };
            i←v21896 = (i←v21896 + 1);
            if ((i←v21896 < noName←c55288)) {
               goto lab←L100112;
               };
            lab←L100109: ;
            };
SOURCE(30553, 27)
         (* (( (ptr) h←v13788)+2) ) = minPriority←v21852;
SOURCE(30582, 21)
         (* (( (ptr) h←v13788)+3) ) = minIndex←v21824;
         };
SOURCE(30610, 43)
      {
         word var←c55320;
         var←c55320 = (* (( (ptr) h←v13788)+2) );
         (* (( (ptr) h←v13788)+5) ) = var←c55320;
         priorityTol←v13832 = var←c55320;
         };
      }
   else {
SOURCE(30685, 27)
      priorityTol←v13832 = (* (( (ptr) h←v13788)+5) );
SOURCE(30714, 51)
      {
         word x291;
         (* (( (ptr) h←v13788)+4) ) = (x291 = (* (( (ptr) h←v13788)+4) ),
            MAX((int)(word), x291, d←v21752));
         };
SOURCE(30767, 17)
      (* (( (ptr) h←v13788)+6) ) = 1;
      };
   goto lab←L100108;
   lab←L100107: ;
SOURCE(30802, 27)
   priorityTol←v13832 = (* (( (ptr) h←v13788)+5) );
SOURCE(30831, 51)
   {
      word x292;
      (* (( (ptr) h←v13788)+4) ) = (x292 = (* (( (ptr) h←v13788)+4) ),
         MAX((int)(word), x292, d←v21752));
      };
SOURCE(30884, 17)
   (* (( (ptr) h←v13788)+6) ) = 1;
   lab←L100108: ;
SOURCE(29621, 1285)
   return(priorityTol←v13832);
   }

static void NearPointsFromPoints←P1800(bestPoints←v13892, pointCount←v13920, nearVEF←v13948)
   word bestPoints←v13892;
   word pointCount←v13920;
   word nearVEF←v13948;
   {
   /* NearPointsFromPoints: */ 
SOURCE(30915, 165)
SOURCE(31021, 59)
   {
      register word i←v21940 = 0;
      register word noName←c55352;
      noName←c55352 = pointCount←v13920;
      if ((i←v21940 >= noName←c55352)) {
         goto lab←L100113;
         };
      lab←L100116: ;
SOURCE(31054, 26)
      {
         word limit293;
         word limit294;
         (* ((( (ptr) nearVEF←v13948)+1)+(
               limit293 = (*  (ptr) nearVEF←v13948 ),
               BCK(i←v21940, limit293)
               )) ) = (* ((( (ptr) bestPoints←v13892)+10)+(
               limit294 = (* (( (ptr) bestPoints←v13892)+9) ),
               BCK(i←v21940, limit294)
               )) );
         };
      i←v21940 = (i←v21940 + 1);
      if ((i←v21940 < noName←c55352)) {
         goto lab←L100116;
         };
      lab←L100113: ;
      };
   }

static void MergePointsAndCurves←P1860(bestPoints←v14008, pointCount←v14036, bestCurves←v14064, curveCount←v14092, nearVEF←v14120, count←v14148)
   word bestPoints←v14008;
   word pointCount←v14036;
   word bestCurves←v14064;
   word curveCount←v14092;
   word nearVEF←v14120;
   word count←v14148;
   {
   word pointIndex←v21984;
   word curveIndex←v22012;
   word pointDist←v22040;
   word curveDist←v22068;
   /* MergePointsAndCurves: */ 
SOURCE(31095, 948)
SOURCE(31311, 14)
   pointIndex←v21984 = 0;
SOURCE(31327, 14)
   curveIndex←v22012 = 0;
SOURCE(31343, 700)
   {
      register word i←v22112 = 0;
      register word noName←c55384;
      noName←c55384 = count←v14148;
      if (( (int)i←v22112 >=  (int)noName←c55384)) {
         goto lab←L100117;
         };
      lab←L100122: ;
SOURCE(31375, 33)
      if ((pointIndex←v21984 >= pointCount←v14036)) {
SOURCE(31408, 17)
         goto lab←L100120;
         };
SOURCE(31427, 33)
      if ((curveIndex←v22012 >= curveCount←v14092)) {
SOURCE(31460, 17)
         goto lab←L100121;
         };
SOURCE(31479, 30)
      {
         word limit295;
         pointDist←v22040 = (*  (ptr) (* ((( (ptr) bestPoints←v14008)+10)+(
               limit295 = (* (( (ptr) bestPoints←v14008)+9) ),
               BCK(i←v22112, limit295)
               )) ) );
         };
SOURCE(31511, 30)
      {
         word limit296;
         curveDist←v22068 = (*  (ptr) (* ((( (ptr) bestCurves←v14064)+10)+(
               limit296 = (* (( (ptr) bestCurves←v14064)+9) ),
               BCK(i←v22112, limit296)
               )) ) );
         };
SOURCE(31543, 172)
      {
         word x297;
         word x298;
         if (((
            x297 = pointDist←v22040,  *(float*)&x297
            ) <= (
            x298 = curveDist←v22068,  *(float*)&x298
            ))) {
SOURCE(31576, 35)
            {
               word limit299;
               word limit300;
               (* ((( (ptr) nearVEF←v14120)+1)+(
                     limit299 = (*  (ptr) nearVEF←v14120 ),
                     BCK(i←v22112, limit299)
                     )) ) = (* ((( (ptr) bestPoints←v14008)+10)+(
                     limit300 = (* (( (ptr) bestPoints←v14008)+9) ),
                     BCK(pointIndex←v21984, limit300)
                     )) );
               };
SOURCE(31613, 27)
            pointIndex←v21984 = (pointIndex←v21984 + 1);
            }
         else {
SOURCE(31651, 35)
            {
               word limit301;
               word limit302;
               (* ((( (ptr) nearVEF←v14120)+1)+(
                     limit301 = (*  (ptr) nearVEF←v14120 ),
                     BCK(i←v22112, limit301)
                     )) ) = (* ((( (ptr) bestCurves←v14064)+10)+(
                     limit302 = (* (( (ptr) bestCurves←v14064)+9) ),
                     BCK(curveIndex←v22012, limit302)
                     )) );
               };
SOURCE(31688, 27)
            curveIndex←v22012 = (curveIndex←v22012 + 1);
            };
         };
      i←v22112 = (i←v22112 + 1);
      if (( (int)i←v22112 <  (int)noName←c55384)) {
         goto lab←L100122;
         };
      goto lab←L100117;
      lab←L100120: ;
SOURCE(31775, 104)
      {
         register word k←v22156;
         k←v22156 = SGNCK(i←v22112);
         lab←L100126: ;
         if ((k←v22156 < count←v14148)) {
            }
         else {
            goto lab←L100123;
            };
SOURCE(31815, 35)
         {
            word limit303;
            word limit304;
            (* ((( (ptr) nearVEF←v14120)+1)+(
                  limit303 = (*  (ptr) nearVEF←v14120 ),
                  BCK(k←v22156, limit303)
                  )) ) = (* ((( (ptr) bestCurves←v14064)+10)+(
                  limit304 = (* (( (ptr) bestCurves←v14064)+9) ),
                  BCK(curveIndex←v22012, limit304)
                  )) );
            };
SOURCE(31852, 27)
         curveIndex←v22012 = (curveIndex←v22012 + 1);
         k←v22156 = (k←v22156 + 1);
         goto lab←L100126;
         lab←L100123: ;
         };
      goto lab←L100118;
      lab←L100121: ;
SOURCE(31939, 104)
      {
         register word k←v22200;
         k←v22200 = SGNCK(i←v22112);
         lab←L100130: ;
         if ((k←v22200 < count←v14148)) {
            }
         else {
            goto lab←L100127;
            };
SOURCE(31979, 35)
         {
            word limit305;
            word limit306;
            (* ((( (ptr) nearVEF←v14120)+1)+(
                  limit305 = (*  (ptr) nearVEF←v14120 ),
                  BCK(k←v22200, limit305)
                  )) ) = (* ((( (ptr) bestPoints←v14008)+10)+(
                  limit306 = (* (( (ptr) bestPoints←v14008)+9) ),
                  BCK(pointIndex←v21984, limit306)
                  )) );
            };
SOURCE(32016, 27)
         pointIndex←v21984 = (pointIndex←v21984 + 1);
         k←v22200 = (k←v22200 + 1);
         goto lab←L100130;
         lab←L100127: ;
         };
      goto lab←L100118;
      lab←L100117: ;
      lab←L100118: ;
      };
   }

static void MergeByOverlapAndDistance←P1920(formal←c0608, faces←v14208, faceCount←v14236, curves←v14264, curveCount←v14292)
   word formal←c0608;
   word faces←v14208;
   word faceCount←v14236;
   word curves←v14264;
   word curveCount←v14292;
   {
   register ptr gf←c60952 =  (ptr) &globalframe;
   word nearVEF←v14336;
   word total←v14364;
   word facePtr←v22244;
   word curvePtr←v22272;
   /* MergeByOverlapAndDistance: */ 
SOURCE(32068, 1844)
SOURCE(32068, 1844)
   nearVEF←v14336 = 0;
SOURCE(32267, 46)
   {
      word x307;
      total←v14364 = (x307 = (* (( (ptr) gf←c60952)+4)/* MaxFeatures←v5240 */  ),
         MIN( (unsigned) , (curveCount←v14292 + faceCount←v14236), x307));
      };
SOURCE(32315, 47)
   {
      word var←c55416;
      word var←c55448;
      word var←c55480;
      var←c55416 = BCK(total←v14364, 67108863);
      var←c55448 = ((word) var←c55416 << 2);
      var←c55480 = XR←NewObject((4 + var←c55448), (* (( (ptr) gf←c60952)+59) ));
      (*  (ptr) var←c55480 ) = var←c55416;
      nearVEF←v14336 = var←c55480;
      };
SOURCE(32364, 22)
   curvePtr←v22272 = 0;
   facePtr←v22244 = 0;
SOURCE(32389, 1523)
   {
      register word i←v22316 = 0;
      register word noName←c55512;
      noName←c55512 = total←v14364;
      if ((i←v22316 >= noName←c55512)) {
         goto lab←L100132;
         };
      lab←L100137: ;
SOURCE(32416, 31)
      if ((curvePtr←v22272 >= curveCount←v14292)) {
SOURCE(32447, 21)
         goto lab←L100135;
         };
SOURCE(32470, 29)
      if ((facePtr←v22244 >= faceCount←v14236)) {
SOURCE(32499, 20)
         goto lab←L100136;
         };
SOURCE(32522, 1090)
SOURCE(32528, 571)
      {
         word var←c55544;
         {
            word limit308;
            word limit309;
            var←c55544 = ((* (( (ptr) (* ((( (ptr) faces←v14208)+8)+(
                     limit308 = (* (( (ptr) faces←v14208)+7) ),
                     BCK(facePtr←v22244, limit308)
                     )) ))+8) ) - (* (( (ptr) (* ((( (ptr) curves←v14264)+1)+(
                     limit309 = (*  (ptr) curves←v14264 ),
                     BCK(curvePtr←v22272, limit309)
                     )) ))+8) ));
            };
         if (( (int)var←c55544 ==  (int)0)) {
SOURCE(32599, 628)
            {
               word slice←v22360;
SOURCE(32635, 78)
               {
                  word limit311;
                  slice←v22360 = (*  (ptr) XR←Narrow((* (( (ptr) (* (( (ptr) (* ((( (ptr) faces←v14208)+8)+(
/*1*/      limit311 = (* (( (ptr) faces←v14208)+7) ),
/*1*/      BCK(facePtr←v22244, limit311)
/*1*/      )) ))+5) ))+1) ), (* (( (ptr) gf←c60952)+64) )) );
                  };
SOURCE(32715, 384)
               {
                  word pd312;
                  pd312 = (* (( (ptr) (* (( (ptr) gf←c60952)+210)/* var←c55576 */  ))+62) );
                  if ((0 != (word) ( *( (fPt) ((*  (ptr) pd312 ))))(slice←v22360, pd312))) {
SOURCE(32748, 450)
                     {
                        word facePath←v22404 = 0;
                        word curvePath←v22432 = 0;
                        word faceHitData←v22460 = 0;
                        word curveHitData←v22488 = 0;
SOURCE(32814, 79)
                        {
                           W2 var←c55608;
                           {
/*1*/   word pd313;
/*1*/   word limit314;
/*1*/   pd313 = (* (( (ptr) (* (( (ptr) gf←c60952)+210)/* var←c55576 */  ))+45) );
/*1*/   (void) ( *( (fPt) ((*  (ptr) pd313 ))))((word) &var←c55608, slice←v22360, (* (( (ptr) (* ((( (ptr) faces←v14208)+8)+(
/*1*/               limit314 = (* (( (ptr) faces←v14208)+7) ),
/*1*/               BCK(facePtr←v22244, limit314)
/*1*/               )) ))+6) ), pd313);
/*1*/   };
                           faceHitData←v22460 = var←c55608.f1;
                           facePath←v22404 = var←c55608.f0;
                           };
SOURCE(32895, 83)
                        {
                           W2 var←c55640;
                           {
/*1*/   word pd315;
/*1*/   word limit316;
/*1*/   pd315 = (* (( (ptr) (* (( (ptr) gf←c60952)+210)/* var←c55576 */  ))+45) );
/*1*/   (void) ( *( (fPt) ((*  (ptr) pd315 ))))((word) &var←c55640, slice←v22360, (* (( (ptr) (* ((( (ptr) curves←v14264)+1)+(
/*1*/               limit316 = (*  (ptr) curves←v14264 ),
/*1*/               BCK(curvePtr←v22272, limit316)
/*1*/               )) ))+6) ), pd315);
/*1*/   };
                           curveHitData←v22488 = var←c55640.f1;
                           curvePath←v22432 = var←c55640.f0;
                           };
SOURCE(32980, 29)
                        if ((facePath←v22404 == curvePath←v22432)) {
SOURCE(33009, 20)
                           goto lab←L100138;
                           };
SOURCE(33031, 68)
                        {
                           word var←c55672;
                           {
/*1*/   word pd317;
/*1*/   pd317 = (* (( (ptr) (* (( (ptr) gf←c60952)+210)/* var←c55576 */  ))+67) );
/*1*/   var←c55672 = (word) ( *( (fPt) ((*  (ptr) pd317 ))))(facePath←v22404, curvePath←v22432, pd317);
/*1*/   };
                           switch (var←c55672) {
/*1*/   case 0: 
SOURCE(33099, 18)
/*1*/      goto lab←L100140;
/*1*/   case 2: 
SOURCE(33130, 17)
/*1*/      goto lab←L100139;
/*1*/   case 1: 
SOURCE(33158, 20)
/*1*/      goto lab←L100138;
/*1*/   default: 
SOURCE(33191, 5)
/*1*/      (void) XR←RaiseUnnamedError();
/*1*/      break;
/*1*/   };
                           };
                        };
                     }
                  else {
SOURCE(33205, 20)
                     goto lab←L100138;
                     };
                  };
               };
            goto endif0310;
            };
         if (( (int)var←c55544 >  (int)0)) {
SOURCE(33237, 17)
            goto lab←L100139;
            };
         if (( (int)var←c55544 <  (int)0)) {
SOURCE(33263, 18)
            goto lab←L100140;
            };
SOURCE(33294, 5)
         (void) XR←RaiseUnnamedError();
         goto endif0310;
         endif0310: ;
         };
      /* removed dead code */ 
      lab←L100138: ;
SOURCE(33328, 29)
      {
         word limit318;
         word limit319;
         (* ((( (ptr) nearVEF←v14336)+1)+(
               limit318 = (*  (ptr) nearVEF←v14336 ),
               BCK(i←v22316, limit318)
               )) ) = (* ((( (ptr) curves←v14264)+1)+(
               limit319 = (*  (ptr) curves←v14264 ),
               BCK(curvePtr←v22272, limit319)
               )) );
         };
SOURCE(33359, 23)
      curvePtr←v22272 = (curvePtr←v22272 + 1);
SOURCE(33384, 21)
      facePtr←v22244 = (facePtr←v22244 + 1);
SOURCE(33407, 17)
      total←v14364 = SGNCK((total←v14364 - 1));
      goto lab←L100141;
      lab←L100139: ;
SOURCE(33479, 27)
      {
         word limit320;
         word limit321;
         (* ((( (ptr) nearVEF←v14336)+1)+(
               limit320 = (*  (ptr) nearVEF←v14336 ),
               BCK(i←v22316, limit320)
               )) ) = (* ((( (ptr) faces←v14208)+8)+(
               limit321 = (* (( (ptr) faces←v14208)+7) ),
               BCK(facePtr←v22244, limit321)
               )) );
         };
SOURCE(33508, 21)
      facePtr←v22244 = (facePtr←v22244 + 1);
      goto lab←L100141;
      lab←L100140: ;
SOURCE(33553, 29)
      {
         word limit322;
         word limit323;
         (* ((( (ptr) nearVEF←v14336)+1)+(
               limit322 = (*  (ptr) nearVEF←v14336 ),
               BCK(i←v22316, limit322)
               )) ) = (* ((( (ptr) curves←v14264)+1)+(
               limit323 = (*  (ptr) curves←v14264 ),
               BCK(curvePtr←v22272, limit323)
               )) );
         };
SOURCE(33584, 23)
      curvePtr←v22272 = (curvePtr←v22272 + 1);
      lab←L100141: ;
      i←v22316 = (i←v22316 + 1);
      if ((i←v22316 < noName←c55512)) {
         goto lab←L100137;
         };
      goto lab←L100132;
      lab←L100135: ;
SOURCE(33670, 90)
      {
         register word k←v22544;
         k←v22544 = i←v22316;
         lab←L100145: ;
         if ((k←v22544 < total←v14364)) {
            }
         else {
            goto lab←L100142;
            };
SOURCE(33710, 27)
         {
            word limit324;
            word limit325;
            (* ((( (ptr) nearVEF←v14336)+1)+(
                  limit324 = (*  (ptr) nearVEF←v14336 ),
                  BCK(k←v22544, limit324)
                  )) ) = (* ((( (ptr) faces←v14208)+8)+(
                  limit325 = (* (( (ptr) faces←v14208)+7) ),
                  BCK(facePtr←v22244, limit325)
                  )) );
            };
SOURCE(33739, 21)
         facePtr←v22244 = (facePtr←v22244 + 1);
         k←v22544 = (k←v22544 + 1);
         goto lab←L100145;
         lab←L100142: ;
         };
      goto lab←L100133;
      lab←L100136: ;
SOURCE(33818, 94)
      {
         register word k←v22588;
         k←v22588 = i←v22316;
         lab←L100149: ;
         if ((k←v22588 < total←v14364)) {
            }
         else {
            goto lab←L100146;
            };
SOURCE(33858, 29)
         {
            word limit326;
            word limit327;
            (* ((( (ptr) nearVEF←v14336)+1)+(
                  limit326 = (*  (ptr) nearVEF←v14336 ),
                  BCK(k←v22588, limit326)
                  )) ) = (* ((( (ptr) curves←v14264)+1)+(
                  limit327 = (*  (ptr) curves←v14264 ),
                  BCK(curvePtr←v22272, limit327)
                  )) );
            };
SOURCE(33889, 23)
         curvePtr←v22272 = (curvePtr←v22272 + 1);
         k←v22588 = (k←v22588 + 1);
         goto lab←L100149;
         lab←L100146: ;
         };
      goto lab←L100133;
      lab←L100132: ;
      lab←L100133: ;
      };
   /* removed tail goto */ 
   (*  (ptr) formal←c0608 ) = nearVEF←v14336;
   (* (( (ptr) formal←c0608)+1) ) = total←v14364;
   return;
   }

static void SortPoints←P1980(bestPoints←v14424, pointCount←v14452)
   word bestPoints←v14424;
   word pointCount←v14452;
   {
   word temp←v22632 = 0;
   /* SortPoints: */ 
SOURCE(33973, 287)
SOURCE(34053, 207)
   {
      register word i←v22676 = 0;
      register word noName←c55704;
      noName←c55704 = (pointCount←v14452 - 2);
      if (( (int)i←v22676 >  (int)noName←c55704)) {
         goto lab←L100150;
         };
      lab←L100153: ;
SOURCE(34092, 168)
      {
         register word j←v22720 = 1;
         register word noName←c55736;
         word var←c55768;
         word var←c01031;
         noName←c55736 = (pointCount←v14452 - i←v22676);
         if (( (int)j←v22720 >=  (int)noName←c55736)) {
            goto lab←L100154;
            };
         lab←L100157: ;
SOURCE(34131, 129)
         {
            word x329;
            word limit330;
            word x331;
            {
               word limit328;
               var←c55768 = (j←v22720 - 1);
               var←c01031 = (*  (ptr) (* ((( (ptr) bestPoints←v14424)+10)+(
                     limit328 = (* (( (ptr) bestPoints←v14424)+9) ),
                     BCK(var←c55768, limit328)
                     )) ) );
               };
            if (((
               x329 = var←c01031,  *(float*)&x329
               ) > (
               x331 = (*  (ptr) (* ((( (ptr) bestPoints←v14424)+10)+(
                     limit330 = (* (( (ptr) bestPoints←v14424)+9) ),
                     BCK(j←v22720, limit330)
                     )) ) ),  *(float*)&x331
               ))) {
SOURCE(34183, 20)
               {
                  word limit332;
                  temp←v22632 = (* ((( (ptr) bestPoints←v14424)+10)+(
                        limit332 = (* (( (ptr) bestPoints←v14424)+9) ),
                        BCK(j←v22720, limit332)
                        )) );
                  };
SOURCE(34205, 31)
               {
                  word var←c55800;
                  var←c55800 = (j←v22720 - 1);
                  {
                     word limit333;
                     word limit334;
                     (* ((( (ptr) bestPoints←v14424)+10)+(
                           limit333 = (* (( (ptr) bestPoints←v14424)+9) ),
                           BCK(j←v22720, limit333)
                           )) ) = (* ((( (ptr) bestPoints←v14424)+10)+(
                           limit334 = (* (( (ptr) bestPoints←v14424)+9) ),
                           BCK(var←c55800, limit334)
                           )) );
                     };
                  };
SOURCE(34238, 22)
               {
                  word var←c55832;
                  var←c55832 = (j←v22720 - 1);
                  {
                     word limit335;
                     (* ((( (ptr) bestPoints←v14424)+10)+(
                           limit335 = (* (( (ptr) bestPoints←v14424)+9) ),
                           BCK(var←c55832, limit335)
                           )) ) = temp←v22632;
                     };
                  };
               };
            };
         j←v22720 = (j←v22720 + 1);
         if (( (int)j←v22720 <  (int)noName←c55736)) {
            goto lab←L100157;
            };
         lab←L100154: ;
         };
      if (( (int)i←v22676 >=  (int)noName←c55704)) {
         goto lab←L100150;
         };
      i←v22676 = (i←v22676 + 1);
      goto lab←L100153;
      lab←L100150: ;
      };
   }

static void SortCurves←P2040(bestCurves←v14512, curveCount←v14540)
   word bestCurves←v14512;
   word curveCount←v14540;
   {
   word temp←v22764 = 0;
   /* SortCurves: */ 
SOURCE(34287, 287)
SOURCE(34367, 207)
   {
      register word i←v22808 = 0;
      register word noName←c55864;
      noName←c55864 = (curveCount←v14540 - 2);
      if (( (int)i←v22808 >  (int)noName←c55864)) {
         goto lab←L100158;
         };
      lab←L100161: ;
SOURCE(34406, 168)
      {
         register word j←v22852 = 1;
         register word noName←c55896;
         word var←c55928;
         word var←c01032;
         noName←c55896 = (curveCount←v14540 - i←v22808);
         if (( (int)j←v22852 >=  (int)noName←c55896)) {
            goto lab←L100162;
            };
         lab←L100165: ;
SOURCE(34445, 129)
         {
            word x337;
            word limit338;
            word x339;
            {
               word limit336;
               var←c55928 = (j←v22852 - 1);
               var←c01032 = (*  (ptr) (* ((( (ptr) bestCurves←v14512)+10)+(
                     limit336 = (* (( (ptr) bestCurves←v14512)+9) ),
                     BCK(var←c55928, limit336)
                     )) ) );
               };
            if (((
               x337 = var←c01032,  *(float*)&x337
               ) > (
               x339 = (*  (ptr) (* ((( (ptr) bestCurves←v14512)+10)+(
                     limit338 = (* (( (ptr) bestCurves←v14512)+9) ),
                     BCK(j←v22852, limit338)
                     )) ) ),  *(float*)&x339
               ))) {
SOURCE(34497, 20)
               {
                  word limit340;
                  temp←v22764 = (* ((( (ptr) bestCurves←v14512)+10)+(
                        limit340 = (* (( (ptr) bestCurves←v14512)+9) ),
                        BCK(j←v22852, limit340)
                        )) );
                  };
SOURCE(34519, 31)
               {
                  word var←c55960;
                  var←c55960 = (j←v22852 - 1);
                  {
                     word limit341;
                     word limit342;
                     (* ((( (ptr) bestCurves←v14512)+10)+(
                           limit341 = (* (( (ptr) bestCurves←v14512)+9) ),
                           BCK(j←v22852, limit341)
                           )) ) = (* ((( (ptr) bestCurves←v14512)+10)+(
                           limit342 = (* (( (ptr) bestCurves←v14512)+9) ),
                           BCK(var←c55960, limit342)
                           )) );
                     };
                  };
SOURCE(34552, 22)
               {
                  word var←c55992;
                  var←c55992 = (j←v22852 - 1);
                  {
                     word limit343;
                     (* ((( (ptr) bestCurves←v14512)+10)+(
                           limit343 = (* (( (ptr) bestCurves←v14512)+9) ),
                           BCK(var←c55992, limit343)
                           )) ) = temp←v22764;
                     };
                  };
               };
            };
         j←v22852 = (j←v22852 + 1);
         if (( (int)j←v22852 <  (int)noName←c55896)) {
            goto lab←L100165;
            };
         lab←L100162: ;
         };
      if (( (int)i←v22808 >=  (int)noName←c55864)) {
         goto lab←L100158;
         };
      i←v22808 = (i←v22808 + 1);
      goto lab←L100161;
      lab←L100158: ;
      };
   }

static void SortFaces←P2100(bestFaces←v14600, faceCount←v14628)
   word bestFaces←v14600;
   word faceCount←v14628;
   {
   word temp←v22896 = 0;
   /* SortFaces: */ 
SOURCE(34601, 283)
SOURCE(34677, 207)
   {
      register word i←v22940 = 0;
      register word noName←c56024;
      noName←c56024 = (faceCount←v14628 - 2);
      if (( (int)i←v22940 >  (int)noName←c56024)) {
         goto lab←L100166;
         };
      lab←L100169: ;
SOURCE(34715, 169)
      {
         register word j←v22984 = 1;
         register word noName←c56056;
         word var←c56088;
         word var←c01033;
         noName←c56056 = (faceCount←v14628 - i←v22940);
         if (( (int)j←v22984 >=  (int)noName←c56056)) {
            goto lab←L100170;
            };
         lab←L100173: ;
SOURCE(34753, 131)
         {
            word limit345;
            {
               word limit344;
               var←c56088 = (j←v22984 - 1);
               var←c01033 = (* (( (ptr) (* ((( (ptr) bestFaces←v14600)+8)+(
                        limit344 = (* (( (ptr) bestFaces←v14600)+7) ),
                        BCK(var←c56088, limit344)
                        )) ))+8) );
               };
            if (( (int)var←c01033 <  (int)(* (( (ptr) (* ((( (ptr) bestFaces←v14600)+8)+(
                     limit345 = (* (( (ptr) bestFaces←v14600)+7) ),
                     BCK(j←v22984, limit345)
                     )) ))+8) ))) {
SOURCE(34811, 19)
               {
                  word limit346;
                  temp←v22896 = (* ((( (ptr) bestFaces←v14600)+8)+(
                        limit346 = (* (( (ptr) bestFaces←v14600)+7) ),
                        BCK(j←v22984, limit346)
                        )) );
                  };
SOURCE(34832, 29)
               {
                  word var←c56120;
                  var←c56120 = (j←v22984 - 1);
                  {
                     word limit347;
                     word limit348;
                     (* ((( (ptr) bestFaces←v14600)+8)+(
                           limit347 = (* (( (ptr) bestFaces←v14600)+7) ),
                           BCK(j←v22984, limit347)
                           )) ) = (* ((( (ptr) bestFaces←v14600)+8)+(
                           limit348 = (* (( (ptr) bestFaces←v14600)+7) ),
                           BCK(var←c56120, limit348)
                           )) );
                     };
                  };
SOURCE(34863, 21)
               {
                  word var←c56152;
                  var←c56152 = (j←v22984 - 1);
                  {
                     word limit349;
                     (* ((( (ptr) bestFaces←v14600)+8)+(
                           limit349 = (* (( (ptr) bestFaces←v14600)+7) ),
                           BCK(var←c56152, limit349)
                           )) ) = temp←v22896;
                     };
                  };
               };
            };
         j←v22984 = (j←v22984 + 1);
         if (( (int)j←v22984 <  (int)noName←c56056)) {
            goto lab←L100173;
            };
         lab←L100170: ;
         };
      if (( (int)i←v22940 >=  (int)noName←c56024)) {
         goto lab←L100166;
         };
      i←v22940 = (i←v22940 + 1);
      goto lab←L100169;
      lab←L100166: ;
      };
   }

static void SortByOverlap←P2160(faces←v14688, count←v14716)
   word faces←v14688;
   word count←v14716;
   {
   word temp←v23028 = 0;
   /* SortByOverlap: */ 
SOURCE(34911, 247)
SOURCE(34983, 175)
   {
      register word i←v23072 = 0;
      register word noName←c56184;
      noName←c56184 = (count←v14716 - 2);
      if (( (int)i←v23072 >  (int)noName←c56184)) {
         goto lab←L100174;
         };
      lab←L100177: ;
SOURCE(35017, 141)
      {
         register word j←v23116 = 1;
         register word noName←c56216;
         word var←c56248;
         word var←c01034;
         noName←c56216 = (count←v14716 - i←v23072);
         if (( (int)j←v23116 >=  (int)noName←c56216)) {
            goto lab←L100178;
            };
         lab←L100181: ;
SOURCE(35051, 107)
         {
            word limit351;
            {
               word limit350;
               var←c56248 = (j←v23116 - 1);
               var←c01034 = (* (( (ptr) (* ((( (ptr) faces←v14688)+8)+(
                        limit350 = (* (( (ptr) faces←v14688)+7) ),
                        BCK(var←c56248, limit350)
                        )) ))+8) );
               };
            if (( (int)var←c01034 <  (int)(* (( (ptr) (* ((( (ptr) faces←v14688)+8)+(
                     limit351 = (* (( (ptr) faces←v14688)+7) ),
                     BCK(j←v23116, limit351)
                     )) ))+8) ))) {
SOURCE(35101, 15)
               {
                  word limit352;
                  temp←v23028 = (* ((( (ptr) faces←v14688)+8)+(
                        limit352 = (* (( (ptr) faces←v14688)+7) ),
                        BCK(j←v23116, limit352)
                        )) );
                  };
SOURCE(35118, 21)
               {
                  word var←c56280;
                  var←c56280 = (j←v23116 - 1);
                  {
                     word limit353;
                     word limit354;
                     (* ((( (ptr) faces←v14688)+8)+(
                           limit353 = (* (( (ptr) faces←v14688)+7) ),
                           BCK(j←v23116, limit353)
                           )) ) = (* ((( (ptr) faces←v14688)+8)+(
                           limit354 = (* (( (ptr) faces←v14688)+7) ),
                           BCK(var←c56280, limit354)
                           )) );
                     };
                  };
SOURCE(35141, 17)
               {
                  word var←c56312;
                  var←c56312 = (j←v23116 - 1);
                  {
                     word limit355;
                     (* ((( (ptr) faces←v14688)+8)+(
                           limit355 = (* (( (ptr) faces←v14688)+7) ),
                           BCK(var←c56312, limit355)
                           )) ) = temp←v23028;
                     };
                  };
               };
            };
         j←v23116 = (j←v23116 + 1);
         if (( (int)j←v23116 <  (int)noName←c56216)) {
            goto lab←L100181;
            };
         lab←L100178: ;
         };
      if (( (int)i←v23072 >=  (int)noName←c56184)) {
         goto lab←L100174;
         };
      i←v23072 = (i←v23072 + 1);
      goto lab←L100177;
      lab←L100174: ;
      };
   }

static void ComputeMidpoint←P2220(formal←c0665, curve←v14776)
   word formal←c0665;
   word curve←v14776;
   {
   register ptr gf←c60984 =  (ptr) &globalframe;
   W2 midpoint←v14820;
   word success←v14848;
   word class←v23160;
   word simpleCurve←v23188 = 0;
   /* ComputeMidpoint: */ 
SOURCE(35184, 488)
SOURCE(35184, 488)
   success←v14848 = 1;
SOURCE(35311, 43)
   {
      W2 var←c56344;
      (void) ClassifyCurve←P2280((word) &var←c56344, curve←v14776);
      simpleCurve←v23188 = var←c56344.f1;
      class←v23160 = var←c56344.f0;
      };
SOURCE(35356, 316)
   {
      word var←c56376;
      var←c56376 = class←v23160;
      if ((var←c56376 == 3)) {
SOURCE(35379, 130)
         {
            word edge←v23244;
SOURCE(35389, 32)
            edge←v23244 = XR←Narrow(simpleCurve←v23188, (* (( (ptr) gf←c60984)+76) ));
SOURCE(35423, 68)
            {
               W2 var←c56408;
               {
                  word pd356;
                  pd356 = (* (( (ptr) (* (( (ptr) gf←c60984)+205)/* var←c54008 */  ))+10) );
                  (void) ( *( (fPt) ((*  (ptr) pd356 ))))((word) &var←c56408, (*  (W2Pt) (( (ptr) edge←v23244)+2) ), (*  (W2Pt) (( (ptr) edge←v23244)+4)
                      ), pd356);
                  };
               {
                  W2 var←c0660;
                  {
                     word pd357;
                     pd357 = (* (( (ptr) (* (( (ptr) gf←c60984)+205)/* var←c54008 */  ))+12) );
                     (void) ( *( (fPt) ((*  (ptr) pd357 ))))((word) &var←c0660, var←c56408, (*  (ptr) &fc358 ), pd357);
                     };
                  midpoint←v14820 = var←c0660;
                  };
               };
SOURCE(35493, 14)
            success←v14848 = 1;
            };
         }
      else {
         if ((var←c56376 == 4)) {
SOURCE(35517, 121)
            {
               word arc←v23288;
SOURCE(35526, 30)
               arc←v23288 = XR←Narrow(simpleCurve←v23188, (* (( (ptr) gf←c60984)+77) ));
SOURCE(35558, 62)
               {
                  W2 var←c56440;
                  {
                     word pd359;
                     pd359 = (* (( (ptr) (* (( (ptr) gf←c60984)+205)/* var←c54008 */  ))+10) );
                     (void) ( *( (fPt) ((*  (ptr) pd359 ))))((word) &var←c56440, (*  (W2Pt) (( (ptr) arc←v23288)+2) ), (*  (W2Pt) (( (ptr) arc←v23288)+4)
                         ), pd359);
                     };
                  {
                     W2 var←c0664;
                     {
                        word pd360;
                        pd360 = (* (( (ptr) (* (( (ptr) gf←c60984)+205)/* var←c54008 */  ))+12) );
                        (void) ( *( (fPt) ((*  (ptr) pd360 ))))((word) &var←c0664, var←c56440, (*  (ptr) &fc358 ), pd360);
                        };
                     midpoint←v14820 = var←c0664;
                     };
                  };
SOURCE(35622, 14)
               success←v14848 = 1;
               };
            }
         else {
SOURCE(35652, 20)
            midpoint←v14820.f0 = (*  (ptr) &fc58 );
            midpoint←v14820.f1 = (*  (ptr) &fc58 );
            success←v14848 = 0;
            goto lab←L100182;
            };
         };
      };
   /* removed tail goto */ 
   lab←L100182: ;
   (*  (W2Pt) formal←c0665 ) = midpoint←v14820;
   (* (( (ptr) formal←c0665)+2) ) = success←v14848;
   return;
   }

static void ClassifyCurve←P2280(formal←c0679, curve←v14908)
   word formal←c0679;
   word curve←v14908;
   {
   register ptr gf←c61016 =  (ptr) &globalframe;
   word class←v14952;
   word simpleCurve←v14980;
   word feature←v23332;
   /* ClassifyCurve: */ 
SOURCE(35678, 867)
SOURCE(35678, 867)
   simpleCurve←v14980 = 0;
SOURCE(35764, 40)
   feature←v23332 = (* (( (ptr) curve←v14908)+5) );
SOURCE(35806, 601)
   {
      word var←c56504;
      var←c56504 = (*  (ptr) feature←v23332 );
      switch (var←c56504) {
         case 0: 
SOURCE(35840, 227)
            {
               word sliceD←v23376;
               word hitData←v23404;
SOURCE(35842, 47)
               sliceD←v23376 = XR←Narrow((* (( (ptr) feature←v23332)+1) ), (* (( (ptr) gf←c61016)+64) ));
SOURCE(35891, 32)
               hitData←v23404 = (* (( (ptr) curve←v14908)+6) );
SOURCE(35925, 68)
               {
                  word pd361;
                  pd361 = (* (( (ptr) (* (( (ptr) gf←c61016)+208)/* var←c54328 */  ))+51) );
                  simpleCurve←v14980 = (word) ( *( (fPt) ((*  (ptr) pd361 ))))((*  (ptr) sliceD←v23376 ), hitData←v23404, pd361);
                  };
SOURCE(35995, 67)
               if ((simpleCurve←v14980 == 0)) {
SOURCE(36023, 20)
                  simpleCurve←v14980 = sliceD←v23376;
SOURCE(36045, 9)
                  class←v14952 = 6;
SOURCE(36056, 6)
                  goto lab←L100183;
                  };
               };
            break;
         case 5: 
SOURCE(36087, 9)
            class←v14952 = 2;
SOURCE(36098, 59)
            simpleCurve←v14980 = (*  (ptr) XR←Narrow((* (( (ptr) feature←v23332)+1) ), (* (( (ptr) gf←c61016)+69) )) );
SOURCE(36159, 6)
            goto lab←L100183;
         case 2: case 3: 
SOURCE(36196, 9)
            class←v14952 = 1;
SOURCE(36207, 55)
            simpleCurve←v14980 = (*  (ptr) XR←Narrow((* (( (ptr) feature←v23332)+1) ), (* (( (ptr) gf←c61016)+67) )) );
SOURCE(36264, 6)
            goto lab←L100183;
         case 1: 
SOURCE(36293, 9)
            class←v14952 = 1;
SOURCE(36304, 41)
            simpleCurve←v14980 = XR←Narrow((* (( (ptr) feature←v23332)+1) ), (* (( (ptr) gf←c61016)+68) ));
SOURCE(36347, 6)
            goto lab←L100183;
         default: 
SOURCE(36370, 9)
            class←v14952 = 0;
SOURCE(36382, 17)
            simpleCurve←v14980 = 0;
SOURCE(36401, 6)
            goto lab←L100183;
         };
      };
SOURCE(36410, 135)
   {
      word var←c56536;
      word var←c56568;
      var←c56536 = simpleCurve←v14980;
      if ((var←c56536 == 0)) {
         goto lab←L100184;
         };
      var←c56568 = XR←GetReferentType(var←c56536);
      if (((* (( (ptr) gf←c61016)+78) ) == var←c56568)) {
         {
            word circle←v23460;
            circle←v23460 = var←c56536;
SOURCE(36457, 9)
            class←v14952 = 2;
            };
         goto endif0362;
         };
      if (((* (( (ptr) gf←c61016)+76) ) == var←c56568)) {
         {
            word edge←v23504;
            edge←v23504 = var←c56536;
SOURCE(36482, 9)
            class←v14952 = 3;
            };
         goto endif0362;
         };
      if (((* (( (ptr) gf←c61016)+77) ) == var←c56568)) {
         {
            word arc←v23548;
            arc←v23548 = var←c56536;
SOURCE(36505, 9)
            class←v14952 = 4;
            };
         goto endif0362;
         };
      if (((* (( (ptr) gf←c61016)+79) ) == var←c56568)) {
         {
            word cubic←v23592;
            cubic←v23592 = var←c56536;
SOURCE(36536, 9)
            class←v14952 = 5;
            };
         goto endif0362;
         };
      lab←L100184: ;
SOURCE(36558, 5)
      (void) XR←RaiseUnnamedError();
      goto endif0362;
      endif0362: ;
      };
   /* removed tail goto */ 
   lab←L100183: ;
   (*  (ptr) formal←c0679 ) = class←v14952;
   (* (( (ptr) formal←c0679)+1) ) = simpleCurve←v14980;
   return;
   }

static void CurveMeetsCurve←P2340(formal←c0696, c1←v15052, c2←v15080)
   word formal←c0696;
   word c1←v15052;
   word c2←v15080;
   {
   register ptr gf←c61048 =  (ptr) &globalframe;
   word iPoints←v15124;
   word tangency←v15152;
   word typeOfCurve1←v23636;
   word typeOfCurve2←v23664;
   word simpleCurve1←v23692 = 0;
   word simpleCurve2←v23720 = 0;
   /* CurveMeetsCurve: */ 
SOURCE(36569, 511)
SOURCE(36569, 511)
   iPoints←v15124 = 0;
SOURCE(36569, 511)
   tangency←v15152 = 0;
SOURCE(36742, 48)
   {
      W2 var←c56600;
      (void) ClassifyCurve←P2280((word) &var←c56600, c1←v15052);
      simpleCurve1←v23692 = var←c56600.f1;
      typeOfCurve1←v23636 = var←c56600.f0;
      };
SOURCE(36792, 48)
   {
      W2 var←c56632;
      (void) ClassifyCurve←P2280((word) &var←c56632, c2←v15080);
      simpleCurve2←v23720 = var←c56632.f1;
      typeOfCurve2←v23664 = var←c56632.f0;
      };
SOURCE(36842, 238)
   if ((typeOfCurve1←v23636 >= typeOfCurve2←v23664)) {
SOURCE(36879, 103)
      {
         W2 var←c56664;
         {
            word pd363;
            pd363 = (* (( (ptr) (( (W7Pt) (( (ptr) gf←c61048)+5)/* ComputeIntersection←v5716 */ )+BCK(typeOfCurve1←v23636, 7)))+BCK(typeOfCurve2←v23664, 7)
               ) );
            (void) ( *( (fPt) ((*  (ptr) pd363 ))))((word) &var←c56664, simpleCurve1←v23692, simpleCurve2←v23720, pd363);
            };
         tangency←v15152 = var←c56664.f1;
         iPoints←v15124 = var←c56664.f0;
         };
      }
   else {
SOURCE(36982, 98)
      {
         W2 var←c56696;
         {
            word pd364;
            pd364 = (* (( (ptr) (( (W7Pt) (( (ptr) gf←c61048)+5)/* ComputeIntersection←v5716 */ )+BCK(typeOfCurve2←v23664, 7)))+BCK(typeOfCurve1←v23636, 7)
               ) );
            (void) ( *( (fPt) ((*  (ptr) pd364 ))))((word) &var←c56696, simpleCurve2←v23720, simpleCurve1←v23692, pd364);
            };
         tangency←v15152 = var←c56696.f1;
         iPoints←v15124 = var←c56696.f0;
         };
      };
   /* removed tail goto */ 
   (*  (ptr) formal←c0696 ) = iPoints←v15124;
   (* (( (ptr) formal←c0696)+1) ) = tangency←v15152;
   return;
   }

static void NoOpI←P2400(formal←c0701, c1←v30400, c2←v30428)
   word formal←c0701;
   word c1←v30400;
   word c2←v30428;
   {
   word iPoints←v30472;
   word tangency←v30500;
   /* NoOpI: */ 
SOURCE(37696, 57)
SOURCE(37696, 57)
   iPoints←v30472 = 0;
SOURCE(37696, 57)
   tangency←v30500 = 0;
SOURCE(37724, 13)
   iPoints←v30472 = 0;
SOURCE(37739, 14)
   tangency←v30500 = 0;
   /* removed tail goto */ 
   (*  (ptr) formal←c0701 ) = iPoints←v30472;
   (* (( (ptr) formal←c0701)+1) ) = tangency←v30500;
   return;
   }

static void LinLinI←P2460(formal←c0715, c1←v30560, c2←v30588)
   word formal←c0715;
   word c1←v30560;
   word c2←v30588;
   {
   register ptr gf←c61080 =  (ptr) &globalframe;
   word iPoints←v30632;
   word tangency←v30660;
   word l1←v23776;
   word l2←v23804;
   W2 point←v23832;
   word parallel←v23860 = 0;
   /* LinLinI: */ 
SOURCE(37759, 269)
SOURCE(37759, 269)
   iPoints←v30632 = 0;
SOURCE(37759, 269)
   tangency←v30660 = 0;
SOURCE(37789, 21)
   l1←v23776 = XR←Narrow(c1←v30560, (* (( (ptr) gf←c61080)+68) ));
SOURCE(37812, 21)
   l2←v23804 = XR←Narrow(c2←v30588, (* (( (ptr) gf←c61080)+68) ));
SOURCE(37873, 49)
   {
      W3 var←c56728;
      {
         word pd365;
         pd365 = (* (( (ptr) (* (( (ptr) gf←c61080)+209)/* var←c54776 */  ))+33) );
         (void) ( *( (fPt) ((*  (ptr) pd365 ))))((word) &var←c56728, l1←v23776, l2←v23804, pd365);
         };
      parallel←v23860 = var←c56728.f2;
      point←v23832 = (*  (W2Pt) &var←c56728 );
      };
SOURCE(37924, 104)
   if ((0 == parallel←v23860)) {
SOURCE(37946, 21)
      {
         word var←c56760;
         word var←c56792;
         var←c56760 = XR←NewObject(12, (* (( (ptr) gf←c61080)+75) ));
         var←c56792 = var←c56760;
         (*  (W2Pt) var←c56792 ) = point←v23832;
         iPoints←v30632 = var←c56760;
         };
SOURCE(37969, 22)
      tangency←v30660 = XR←NewObject(8, (* (( (ptr) gf←c61080)+71) ));
      {
         word var←c56856;
         var←c56856 = tangency←v30660;
         };
      }
   else {
SOURCE(37999, 13)
      iPoints←v30632 = 0;
SOURCE(38014, 14)
      tangency←v30660 = 0;
      };
   /* removed tail goto */ 
   (*  (ptr) formal←c0715 ) = iPoints←v30632;
   (* (( (ptr) formal←c0715)+1) ) = tangency←v30660;
   return;
   }

static void CirLinI←P2520(formal←c0731, c1←v30720, c2←v30748)
   word formal←c0731;
   word c1←v30720;
   word c2←v30748;
   {
   register ptr gf←c61112 =  (ptr) &globalframe;
   word iPoints←v30792;
   word tangency←v30820;
   word circle←v23904;
   word line←v23932;
   W4 points←v23960;
   word hitCount←v23988;
   word tangent←v24016 = 0;
   /* CirLinI: */ 
SOURCE(38035, 328)
SOURCE(38035, 328)
   iPoints←v30792 = 0;
SOURCE(38035, 328)
   tangency←v30820 = 0;
SOURCE(38065, 27)
   circle←v23904 = XR←Narrow(c1←v30720, (* (( (ptr) gf←c61112)+78) ));
SOURCE(38094, 23)
   line←v23932 = XR←Narrow(c2←v30748, (* (( (ptr) gf←c61112)+68) ));
SOURCE(38191, 69)
   {
      W6 var←c56920;
      {
         word pd366;
         pd366 = (* (( (ptr) (* (( (ptr) gf←c61112)+211)/* var←c56888 */  ))+10) );
         (void) ( *( (fPt) ((*  (ptr) pd366 ))))((word) &var←c56920, circle←v23904, line←v23932, pd366);
         };
      tangent←v24016 = var←c56920.f5;
      hitCount←v23988 = var←c56920.f4;
      points←v23960 = (*  (W4Pt) &var←c56920 );
      };
SOURCE(38262, 101)
   {
      register word i←v24116 = 1;
      register word noName←c56952;
      noName←c56952 = hitCount←v23988;
      if ((i←v24116 > noName←c56952)) {
         goto lab←L100189;
         };
      lab←L100192: ;
SOURCE(38293, 34)
      {
         word var←c56984;
         var←c56984 = XR←NewObject(12, (* (( (ptr) gf←c61112)+75) ));
         (*  (W2Pt) var←c56984 ) = (* (( (W2Pt) &points←v23960)+BCK((i←v24116 - 1), 2)) );
         (* (( (ptr) var←c56984)+2) ) = iPoints←v30792;
         iPoints←v30792 = var←c56984;
         };
SOURCE(38329, 34)
      {
         word var←c57016;
         var←c57016 = XR←NewObject(8, (* (( (ptr) gf←c61112)+71) ));
         (*  (ptr) var←c57016 ) = tangent←v24016;
         (* (( (ptr) var←c57016)+1) ) = tangency←v30820;
         tangency←v30820 = var←c57016;
         };
      if ((i←v24116 >= noName←c56952)) {
         goto lab←L100189;
         };
      i←v24116 = (i←v24116 + 1);
      goto lab←L100192;
      lab←L100189: ;
      };
   /* removed tail goto */ 
   (*  (ptr) formal←c0731 ) = iPoints←v30792;
   (* (( (ptr) formal←c0731)+1) ) = tangency←v30820;
   return;
   }

static void CirCirI←P2580(formal←c0747, c1←v30880, c2←v30908)
   word formal←c0747;
   word c1←v30880;
   word c2←v30908;
   {
   register ptr gf←c61144 =  (ptr) &globalframe;
   word iPoints←v30952;
   word tangency←v30980;
   word circle1←v24160;
   word circle2←v24188;
   W4 points←v24216;
   word hitCount←v24244;
   word tangent←v24272 = 0;
   /* CirCirI: */ 
SOURCE(38378, 340)
SOURCE(38378, 340)
   iPoints←v30952 = 0;
SOURCE(38378, 340)
   tangency←v30980 = 0;
SOURCE(38408, 28)
   circle1←v24160 = XR←Narrow(c1←v30880, (* (( (ptr) gf←c61144)+78) ));
SOURCE(38438, 28)
   circle2←v24188 = XR←Narrow(c2←v30908, (* (( (ptr) gf←c61144)+78) ));
SOURCE(38540, 75)
   {
      W6 var←c57048;
      {
         word pd367;
         pd367 = (* (( (ptr) (* (( (ptr) gf←c61144)+211)/* var←c56888 */  ))+12) );
         (void) ( *( (fPt) ((*  (ptr) pd367 ))))((word) &var←c57048, circle1←v24160, circle2←v24188, pd367);
         };
      tangent←v24272 = var←c57048.f5;
      hitCount←v24244 = var←c57048.f4;
      points←v24216 = (*  (W4Pt) &var←c57048 );
      };
SOURCE(38617, 101)
   {
      register word i←v24372 = 1;
      register word noName←c57080;
      noName←c57080 = hitCount←v24244;
      if ((i←v24372 > noName←c57080)) {
         goto lab←L100194;
         };
      lab←L100197: ;
SOURCE(38648, 34)
      {
         word var←c57112;
         var←c57112 = XR←NewObject(12, (* (( (ptr) gf←c61144)+75) ));
         (*  (W2Pt) var←c57112 ) = (* (( (W2Pt) &points←v24216)+BCK((i←v24372 - 1), 2)) );
         (* (( (ptr) var←c57112)+2) ) = iPoints←v30952;
         iPoints←v30952 = var←c57112;
         };
SOURCE(38684, 34)
      {
         word var←c57144;
         var←c57144 = XR←NewObject(8, (* (( (ptr) gf←c61144)+71) ));
         (*  (ptr) var←c57144 ) = tangent←v24272;
         (* (( (ptr) var←c57144)+1) ) = tangency←v30980;
         tangency←v30980 = var←c57144;
         };
      if ((i←v24372 >= noName←c57080)) {
         goto lab←L100194;
         };
      i←v24372 = (i←v24372 + 1);
      goto lab←L100197;
      lab←L100194: ;
      };
   /* removed tail goto */ 
   (*  (ptr) formal←c0747 ) = iPoints←v30952;
   (* (( (ptr) formal←c0747)+1) ) = tangency←v30980;
   return;
   }

static void EdgLinI←P2640(formal←c0761, c1←v31040, c2←v31068)
   word formal←c0761;
   word c1←v31040;
   word c2←v31068;
   {
   register ptr gf←c61176 =  (ptr) &globalframe;
   word iPoints←v31112;
   word tangency←v31140;
   word edge←v24416;
   word line←v24444;
   W2 point←v24472;
   word noHit←v24500 = 0;
   /* EdgLinI: */ 
SOURCE(38733, 268)
SOURCE(38733, 268)
   iPoints←v31112 = 0;
SOURCE(38733, 268)
   tangency←v31140 = 0;
SOURCE(38763, 23)
   edge←v24416 = XR←Narrow(c1←v31040, (* (( (ptr) gf←c61176)+76) ));
SOURCE(38788, 23)
   line←v24444 = XR←Narrow(c2←v31068, (* (( (ptr) gf←c61176)+68) ));
SOURCE(38848, 50)
   {
      W3 var←c57176;
      {
         word pd368;
         pd368 = (* (( (ptr) (* (( (ptr) gf←c61176)+209)/* var←c54776 */  ))+35) );
         (void) ( *( (fPt) ((*  (ptr) pd368 ))))((word) &var←c57176, line←v24444, edge←v24416, pd368);
         };
      noHit←v24500 = var←c57176.f2;
      point←v24472 = (*  (W2Pt) &var←c57176 );
      };
SOURCE(38900, 101)
   if ((0 == noHit←v24500)) {
SOURCE(38919, 21)
      {
         word var←c57208;
         word var←c57240;
         var←c57208 = XR←NewObject(12, (* (( (ptr) gf←c61176)+75) ));
         var←c57240 = var←c57208;
         (*  (W2Pt) var←c57240 ) = point←v24472;
         iPoints←v31112 = var←c57208;
         };
SOURCE(38942, 22)
      tangency←v31140 = XR←NewObject(8, (* (( (ptr) gf←c61176)+71) ));
      {
         word var←c57304;
         var←c57304 = tangency←v31140;
         };
      }
   else {
SOURCE(38972, 13)
      iPoints←v31112 = 0;
SOURCE(38987, 14)
      tangency←v31140 = 0;
      };
   /* removed tail goto */ 
   (*  (ptr) formal←c0761 ) = iPoints←v31112;
   (* (( (ptr) formal←c0761)+1) ) = tangency←v31140;
   return;
   }

static void EdgCirI←P2700(formal←c0777, c1←v31200, c2←v31228)
   word formal←c0777;
   word c1←v31200;
   word c2←v31228;
   {
   register ptr gf←c61208 =  (ptr) &globalframe;
   word iPoints←v31272;
   word tangency←v31300;
   word edge←v24544;
   word circle←v24572;
   W4 points←v24600;
   word hitCount←v24628;
   word tangent←v24656 = 0;
   /* EdgCirI: */ 
SOURCE(39008, 328)
SOURCE(39008, 328)
   iPoints←v31272 = 0;
SOURCE(39008, 328)
   tangency←v31300 = 0;
SOURCE(39038, 23)
   edge←v24544 = XR←Narrow(c1←v31200, (* (( (ptr) gf←c61208)+76) ));
SOURCE(39063, 27)
   circle←v24572 = XR←Narrow(c2←v31228, (* (( (ptr) gf←c61208)+78) ));
SOURCE(39164, 69)
   {
      W6 var←c57336;
      {
         word pd369;
         pd369 = (* (( (ptr) (* (( (ptr) gf←c61208)+211)/* var←c56888 */  ))+11) );
         (void) ( *( (fPt) ((*  (ptr) pd369 ))))((word) &var←c57336, circle←v24572, edge←v24544, pd369);
         };
      tangent←v24656 = var←c57336.f5;
      hitCount←v24628 = var←c57336.f4;
      points←v24600 = (*  (W4Pt) &var←c57336 );
      };
SOURCE(39235, 101)
   {
      register word i←v24756 = 1;
      register word noName←c57368;
      noName←c57368 = hitCount←v24628;
      if ((i←v24756 > noName←c57368)) {
         goto lab←L100200;
         };
      lab←L100203: ;
SOURCE(39266, 34)
      {
         word var←c57400;
         var←c57400 = XR←NewObject(12, (* (( (ptr) gf←c61208)+75) ));
         (*  (W2Pt) var←c57400 ) = (* (( (W2Pt) &points←v24600)+BCK((i←v24756 - 1), 2)) );
         (* (( (ptr) var←c57400)+2) ) = iPoints←v31272;
         iPoints←v31272 = var←c57400;
         };
SOURCE(39302, 34)
      {
         word var←c57432;
         var←c57432 = XR←NewObject(8, (* (( (ptr) gf←c61208)+71) ));
         (*  (ptr) var←c57432 ) = tangent←v24656;
         (* (( (ptr) var←c57432)+1) ) = tangency←v31300;
         tangency←v31300 = var←c57432;
         };
      if ((i←v24756 >= noName←c57368)) {
         goto lab←L100200;
         };
      i←v24756 = (i←v24756 + 1);
      goto lab←L100203;
      lab←L100200: ;
      };
   /* removed tail goto */ 
   (*  (ptr) formal←c0777 ) = iPoints←v31272;
   (* (( (ptr) formal←c0777)+1) ) = tangency←v31300;
   return;
   }

static void EdgEdgI←P2760(formal←c0791, c1←v31360, c2←v31388)
   word formal←c0791;
   word c1←v31360;
   word c2←v31388;
   {
   register ptr gf←c61240 =  (ptr) &globalframe;
   word iPoints←v31432;
   word tangency←v31460;
   word e1←v24800;
   word e2←v24828;
   W2 point←v24856;
   word noHit←v24884 = 0;
   /* EdgEdgI: */ 
SOURCE(39351, 260)
SOURCE(39351, 260)
   iPoints←v31432 = 0;
SOURCE(39351, 260)
   tangency←v31460 = 0;
SOURCE(39381, 21)
   e1←v24800 = XR←Narrow(c1←v31360, (* (( (ptr) gf←c61240)+76) ));
SOURCE(39404, 21)
   e2←v24828 = XR←Narrow(c2←v31388, (* (( (ptr) gf←c61240)+76) ));
SOURCE(39462, 46)
   {
      W3 var←c57464;
      {
         word pd370;
         pd370 = (* (( (ptr) (* (( (ptr) gf←c61240)+209)/* var←c54776 */  ))+36) );
         (void) ( *( (fPt) ((*  (ptr) pd370 ))))((word) &var←c57464, e1←v24800, e2←v24828, pd370);
         };
      noHit←v24884 = var←c57464.f2;
      point←v24856 = (*  (W2Pt) &var←c57464 );
      };
SOURCE(39510, 101)
   if ((0 == noHit←v24884)) {
SOURCE(39529, 21)
      {
         word var←c57496;
         word var←c57528;
         var←c57496 = XR←NewObject(12, (* (( (ptr) gf←c61240)+75) ));
         var←c57528 = var←c57496;
         (*  (W2Pt) var←c57528 ) = point←v24856;
         iPoints←v31432 = var←c57496;
         };
SOURCE(39552, 22)
      tangency←v31460 = XR←NewObject(8, (* (( (ptr) gf←c61240)+71) ));
      {
         word var←c57592;
         var←c57592 = tangency←v31460;
         };
      }
   else {
SOURCE(39582, 13)
      iPoints←v31432 = 0;
SOURCE(39597, 14)
      tangency←v31460 = 0;
      };
   /* removed tail goto */ 
   (*  (ptr) formal←c0791 ) = iPoints←v31432;
   (* (( (ptr) formal←c0791)+1) ) = tangency←v31460;
   return;
   }

static void ArcLinI←P2820(formal←c0807, c1←v31520, c2←v31548)
   word formal←c0807;
   word c1←v31520;
   word c2←v31548;
   {
   register ptr gf←c61272 =  (ptr) &globalframe;
   word iPoints←v31592;
   word tangency←v31620;
   word arc←v24928;
   word line←v24956;
   W4 points←v24984;
   word hitCount←v25012;
   word tangent←v25040 = 0;
   /* ArcLinI: */ 
SOURCE(39618, 316)
SOURCE(39618, 316)
   iPoints←v31592 = 0;
SOURCE(39618, 316)
   tangency←v31620 = 0;
SOURCE(39648, 21)
   arc←v24928 = XR←Narrow(c1←v31520, (* (( (ptr) gf←c61272)+77) ));
SOURCE(39671, 23)
   line←v24956 = XR←Narrow(c2←v31548, (* (( (ptr) gf←c61272)+68) ));
SOURCE(39768, 63)
   {
      W6 var←c57624;
      {
         word pd371;
         pd371 = (* (( (ptr) (* (( (ptr) gf←c61272)+211)/* var←c56888 */  ))+14) );
         (void) ( *( (fPt) ((*  (ptr) pd371 ))))((word) &var←c57624, arc←v24928, line←v24956, pd371);
         };
      tangent←v25040 = var←c57624.f5;
      hitCount←v25012 = var←c57624.f4;
      points←v24984 = (*  (W4Pt) &var←c57624 );
      };
SOURCE(39833, 101)
   {
      register word i←v25140 = 1;
      register word noName←c57656;
      noName←c57656 = hitCount←v25012;
      if ((i←v25140 > noName←c57656)) {
         goto lab←L100206;
         };
      lab←L100209: ;
SOURCE(39864, 34)
      {
         word var←c57688;
         var←c57688 = XR←NewObject(12, (* (( (ptr) gf←c61272)+75) ));
         (*  (W2Pt) var←c57688 ) = (* (( (W2Pt) &points←v24984)+BCK((i←v25140 - 1), 2)) );
         (* (( (ptr) var←c57688)+2) ) = iPoints←v31592;
         iPoints←v31592 = var←c57688;
         };
SOURCE(39900, 34)
      {
         word var←c57720;
         var←c57720 = XR←NewObject(8, (* (( (ptr) gf←c61272)+71) ));
         (*  (ptr) var←c57720 ) = tangent←v25040;
         (* (( (ptr) var←c57720)+1) ) = tangency←v31620;
         tangency←v31620 = var←c57720;
         };
      if ((i←v25140 >= noName←c57656)) {
         goto lab←L100206;
         };
      i←v25140 = (i←v25140 + 1);
      goto lab←L100209;
      lab←L100206: ;
      };
   /* removed tail goto */ 
   (*  (ptr) formal←c0807 ) = iPoints←v31592;
   (* (( (ptr) formal←c0807)+1) ) = tangency←v31620;
   return;
   }

static void ArcCirI←P2880(formal←c0823, c1←v31680, c2←v31708)
   word formal←c0823;
   word c1←v31680;
   word c2←v31708;
   {
   register ptr gf←c61304 =  (ptr) &globalframe;
   word iPoints←v31752;
   word tangency←v31780;
   word arc←v25184;
   word circle←v25212;
   W4 points←v25240;
   word hitCount←v25268;
   word tangent←v25296 = 0;
   /* ArcCirI: */ 
SOURCE(39949, 324)
SOURCE(39949, 324)
   iPoints←v31752 = 0;
SOURCE(39949, 324)
   tangency←v31780 = 0;
SOURCE(39979, 21)
   arc←v25184 = XR←Narrow(c1←v31680, (* (( (ptr) gf←c61304)+77) ));
SOURCE(40002, 27)
   circle←v25212 = XR←Narrow(c2←v31708, (* (( (ptr) gf←c61304)+78) ));
SOURCE(40103, 67)
   {
      W6 var←c57752;
      {
         word pd372;
         pd372 = (* (( (ptr) (* (( (ptr) gf←c61304)+211)/* var←c56888 */  ))+13) );
         (void) ( *( (fPt) ((*  (ptr) pd372 ))))((word) &var←c57752, circle←v25212, arc←v25184, pd372);
         };
      tangent←v25296 = var←c57752.f5;
      hitCount←v25268 = var←c57752.f4;
      points←v25240 = (*  (W4Pt) &var←c57752 );
      };
SOURCE(40172, 101)
   {
      register word i←v25396 = 1;
      register word noName←c57784;
      noName←c57784 = hitCount←v25268;
      if ((i←v25396 > noName←c57784)) {
         goto lab←L100211;
         };
      lab←L100214: ;
SOURCE(40203, 34)
      {
         word var←c57816;
         var←c57816 = XR←NewObject(12, (* (( (ptr) gf←c61304)+75) ));
         (*  (W2Pt) var←c57816 ) = (* (( (W2Pt) &points←v25240)+BCK((i←v25396 - 1), 2)) );
         (* (( (ptr) var←c57816)+2) ) = iPoints←v31752;
         iPoints←v31752 = var←c57816;
         };
SOURCE(40239, 34)
      {
         word var←c57848;
         var←c57848 = XR←NewObject(8, (* (( (ptr) gf←c61304)+71) ));
         (*  (ptr) var←c57848 ) = tangent←v25296;
         (* (( (ptr) var←c57848)+1) ) = tangency←v31780;
         tangency←v31780 = var←c57848;
         };
      if ((i←v25396 >= noName←c57784)) {
         goto lab←L100211;
         };
      i←v25396 = (i←v25396 + 1);
      goto lab←L100214;
      lab←L100211: ;
      };
   /* removed tail goto */ 
   (*  (ptr) formal←c0823 ) = iPoints←v31752;
   (* (( (ptr) formal←c0823)+1) ) = tangency←v31780;
   return;
   }

static void ArcEdgI←P2940(formal←c0839, c1←v31840, c2←v31868)
   word formal←c0839;
   word c1←v31840;
   word c2←v31868;
   {
   register ptr gf←c61336 =  (ptr) &globalframe;
   word iPoints←v31912;
   word tangency←v31940;
   word arc←v25440;
   word edge←v25468;
   W4 points←v25496;
   word hitCount←v25524;
   word tangent←v25552 = 0;
   /* ArcEdgI: */ 
SOURCE(40288, 316)
SOURCE(40288, 316)
   iPoints←v31912 = 0;
SOURCE(40288, 316)
   tangency←v31940 = 0;
SOURCE(40318, 21)
   arc←v25440 = XR←Narrow(c1←v31840, (* (( (ptr) gf←c61336)+77) ));
SOURCE(40341, 23)
   edge←v25468 = XR←Narrow(c2←v31868, (* (( (ptr) gf←c61336)+76) ));
SOURCE(40438, 63)
   {
      W6 var←c57880;
      {
         word pd373;
         pd373 = (* (( (ptr) (* (( (ptr) gf←c61336)+211)/* var←c56888 */  ))+15) );
         (void) ( *( (fPt) ((*  (ptr) pd373 ))))((word) &var←c57880, arc←v25440, edge←v25468, pd373);
         };
      tangent←v25552 = var←c57880.f5;
      hitCount←v25524 = var←c57880.f4;
      points←v25496 = (*  (W4Pt) &var←c57880 );
      };
SOURCE(40503, 101)
   {
      register word i←v25652 = 1;
      register word noName←c57912;
      noName←c57912 = hitCount←v25524;
      if ((i←v25652 > noName←c57912)) {
         goto lab←L100216;
         };
      lab←L100219: ;
SOURCE(40534, 34)
      {
         word var←c57944;
         var←c57944 = XR←NewObject(12, (* (( (ptr) gf←c61336)+75) ));
         (*  (W2Pt) var←c57944 ) = (* (( (W2Pt) &points←v25496)+BCK((i←v25652 - 1), 2)) );
         (* (( (ptr) var←c57944)+2) ) = iPoints←v31912;
         iPoints←v31912 = var←c57944;
         };
SOURCE(40570, 34)
      {
         word var←c57976;
         var←c57976 = XR←NewObject(8, (* (( (ptr) gf←c61336)+71) ));
         (*  (ptr) var←c57976 ) = tangent←v25552;
         (* (( (ptr) var←c57976)+1) ) = tangency←v31940;
         tangency←v31940 = var←c57976;
         };
      if ((i←v25652 >= noName←c57912)) {
         goto lab←L100216;
         };
      i←v25652 = (i←v25652 + 1);
      goto lab←L100219;
      lab←L100216: ;
      };
   /* removed tail goto */ 
   (*  (ptr) formal←c0839 ) = iPoints←v31912;
   (* (( (ptr) formal←c0839)+1) ) = tangency←v31940;
   return;
   }

static void ArcArcI←P3000(formal←c0855, c1←v32000, c2←v32028)
   word formal←c0855;
   word c1←v32000;
   word c2←v32028;
   {
   register ptr gf←c61368 =  (ptr) &globalframe;
   word iPoints←v32072;
   word tangency←v32100;
   word arc1←v25696;
   word arc2←v25724;
   W4 points←v25752;
   word hitCount←v25780;
   word tangent←v25808 = 0;
   /* ArcArcI: */ 
SOURCE(40619, 316)
SOURCE(40619, 316)
   iPoints←v32072 = 0;
SOURCE(40619, 316)
   tangency←v32100 = 0;
SOURCE(40649, 22)
   arc1←v25696 = XR←Narrow(c1←v32000, (* (( (ptr) gf←c61368)+77) ));
SOURCE(40673, 22)
   arc2←v25724 = XR←Narrow(c2←v32028, (* (( (ptr) gf←c61368)+77) ));
SOURCE(40769, 63)
   {
      W6 var←c58008;
      {
         word pd374;
         pd374 = (* (( (ptr) (* (( (ptr) gf←c61368)+211)/* var←c56888 */  ))+16) );
         (void) ( *( (fPt) ((*  (ptr) pd374 ))))((word) &var←c58008, arc1←v25696, arc2←v25724, pd374);
         };
      tangent←v25808 = var←c58008.f5;
      hitCount←v25780 = var←c58008.f4;
      points←v25752 = (*  (W4Pt) &var←c58008 );
      };
SOURCE(40834, 101)
   {
      register word i←v25908 = 1;
      register word noName←c58040;
      noName←c58040 = hitCount←v25780;
      if ((i←v25908 > noName←c58040)) {
         goto lab←L100221;
         };
      lab←L100224: ;
SOURCE(40865, 34)
      {
         word var←c58072;
         var←c58072 = XR←NewObject(12, (* (( (ptr) gf←c61368)+75) ));
         (*  (W2Pt) var←c58072 ) = (* (( (W2Pt) &points←v25752)+BCK((i←v25908 - 1), 2)) );
         (* (( (ptr) var←c58072)+2) ) = iPoints←v32072;
         iPoints←v32072 = var←c58072;
         };
SOURCE(40901, 34)
      {
         word var←c58104;
         var←c58104 = XR←NewObject(8, (* (( (ptr) gf←c61368)+71) ));
         (*  (ptr) var←c58104 ) = tangent←v25808;
         (* (( (ptr) var←c58104)+1) ) = tangency←v32100;
         tangency←v32100 = var←c58104;
         };
      if ((i←v25908 >= noName←c58040)) {
         goto lab←L100221;
         };
      i←v25908 = (i←v25908 + 1);
      goto lab←L100224;
      lab←L100221: ;
      };
   /* removed tail goto */ 
   (*  (ptr) formal←c0855 ) = iPoints←v32072;
   (* (( (ptr) formal←c0855)+1) ) = tangency←v32100;
   return;
   }

static void CubLinI←P3060(formal←c0871, c1←v32160, c2←v32188)
   word formal←c0871;
   word c1←v32160;
   word c2←v32188;
   {
   register ptr gf←c61400 =  (ptr) &globalframe;
   word iPoints←v32232;
   word tangency←v32260;
   word bezier←v25952;
   word line←v25980;
   W6 points←v26008;
   word hitCount←v26036;
   W3 tangent←v26064;
   /* CubLinI: */ 
SOURCE(40950, 376)
SOURCE(40950, 376)
   iPoints←v32232 = 0;
SOURCE(40950, 376)
   tangency←v32260 = 0;
SOURCE(40980, 30)
   bezier←v25952 = XR←Narrow(c1←v32160, (* (( (ptr) gf←c61400)+79) ));
SOURCE(41012, 23)
   line←v25980 = XR←Narrow(c2←v32188, (* (( (ptr) gf←c61400)+68) ));
SOURCE(41086, 42)
   tangent←v26064.f0 = 0;
   tangent←v26064.f1 = 0;
   tangent←v26064.f2 = 0;
SOURCE(41130, 90)
   {
      W10 var←c58200;
      {
         word pd375;
         word x376;
         float tf377;
         word x378;
         float tf379;
         pd375 = (* (( (ptr) (* (( (ptr) gf←c61400)+212)/* var←c58168 */  ))+16) );
         (void) ( *( (fPt) ((*  (ptr) pd375 ))))((word) &var←c58200, (*  (W8Pt) bezier←v25952 ), (
               tf377 =  - (
                  x376 = (* (( (ptr) line←v25980)+3) ),  *(float*)&x376
                  ),  *(word*)&tf377
               ), (* (( (ptr) line←v25980)+2) ), (
               tf379 =  - (
                  x378 = (* (( (ptr) line←v25980)+1) ),  *(float*)&x378
                  ),  *(word*)&tf379
               ), pd375);
         };
      tangent←v26064 = (*  (W3Pt) (( (ptr) &var←c58200)+7) );
      hitCount←v26036 = (* (( (ptr) &var←c58200)+6) );
      points←v26008 = (*  (W6Pt) &var←c58200 );
      };
SOURCE(41222, 104)
   {
      register word i←v26200 = 0;
      register word noName←c58232;
      noName←c58232 = hitCount←v26036;
      if ((i←v26200 >= noName←c58232)) {
         goto lab←L100226;
         };
      lab←L100229: ;
SOURCE(41253, 34)
      {
         word var←c58264;
         var←c58264 = XR←NewObject(12, (* (( (ptr) gf←c61400)+75) ));
         (*  (W2Pt) var←c58264 ) = (* (( (W2Pt) &points←v26008)+BCK(i←v26200, 3)) );
         (* (( (ptr) var←c58264)+2) ) = iPoints←v32232;
         iPoints←v32232 = var←c58264;
         };
SOURCE(41289, 37)
      {
         word var←c58296;
         var←c58296 = XR←NewObject(8, (* (( (ptr) gf←c61400)+71) ));
         (*  (ptr) var←c58296 ) = (* (( (ptr) &tangent←v26064)+BCK(i←v26200, 3)) );
         (* (( (ptr) var←c58296)+1) ) = tangency←v32260;
         tangency←v32260 = var←c58296;
         };
      i←v26200 = (i←v26200 + 1);
      if ((i←v26200 < noName←c58232)) {
         goto lab←L100229;
         };
      lab←L100226: ;
      };
   /* removed tail goto */ 
   (*  (ptr) formal←c0871 ) = iPoints←v32232;
   (* (( (ptr) formal←c0871)+1) ) = tangency←v32260;
   return;
   }

static void CubicMeetsEdge←P3120(formal←c0884, bezier←v15792, edge←v15820)
   word formal←c0884;
   word bezier←v15792;
   word edge←v15820;
   {
   register ptr gf←c61432 =  (ptr) &globalframe;
   W6 points←v15864;
   word hitCount←v15892;
   W3 tangent←v15920;
   W6 linePoints←v26244;
   word lineHitCount←v26272;
   W3 lineTangents←v26300;
   /* CubicMeetsEdge: */ 
SOURCE(41341, 564)
SOURCE(41341, 564)
   hitCount←v15892 = 0;
SOURCE(41341, 564)
   tangent←v15920.f0 = 0;
   tangent←v15920.f1 = 0;
   tangent←v15920.f2 = 0;
SOURCE(41561, 47)
   lineTangents←v26300.f0 = 0;
   lineTangents←v26300.f1 = 0;
   lineTangents←v26300.f2 = 0;
SOURCE(41610, 118)
   {
      W10 var←c58360;
      {
         word pd380;
         word x381;
         float tf382;
         word x383;
         float tf384;
         pd380 = (* (( (ptr) (* (( (ptr) gf←c61432)+212)/* var←c58168 */  ))+16) );
         (void) ( *( (fPt) ((*  (ptr) pd380 ))))((word) &var←c58360, (*  (W8Pt) bezier←v15792 ), (
               tf382 =  - (
                  x381 = (* (( (ptr) (*  (ptr) edge←v15820 ))+3) ),  *(float*)&x381
                  ),  *(word*)&tf382
               ), (* (( (ptr) (*  (ptr) edge←v15820 ))+2) ), (
               tf384 =  - (
                  x383 = (* (( (ptr) (*  (ptr) edge←v15820 ))+1) ),  *(float*)&x383
                  ),  *(word*)&tf384
               ), pd380);
         };
      lineTangents←v26300 = (*  (W3Pt) (( (ptr) &var←c58360)+7) );
      lineHitCount←v26272 = (* (( (ptr) &var←c58360)+6) );
      linePoints←v26244 = (*  (W6Pt) &var←c58360 );
      };
SOURCE(41730, 175)
   {
      register word i←v26436 = 0;
      register word noName←c58392;
      noName←c58392 = lineHitCount←v26272;
      if ((i←v26436 >= noName←c58392)) {
         goto lab←L100231;
         };
      lab←L100234: ;
SOURCE(41765, 140)
      {
         word pd385;
         pd385 = (* (( (ptr) (* (( (ptr) gf←c61432)+209)/* var←c54776 */  ))+47) );
         if ((0 != (word) ( *( (fPt) ((*  (ptr) pd385 ))))((* (( (W2Pt) &linePoints←v26244)+BCK(i←v26436, 3)) ), edge←v15820, pd385)
         )) {
SOURCE(41811, 32)
            (* (( (W2Pt) &points←v15864)+BCK(hitCount←v15892, 3)) ) = (* (( (W2Pt) &linePoints←v26244)+BCK(i←v26436, 3)) );
SOURCE(41845, 35)
            (* (( (ptr) &tangent←v15920)+BCK(hitCount←v15892, 3)) ) = (* (( (ptr) &lineTangents←v26300)+BCK(i←v26436, 3)) );
SOURCE(41882, 23)
            hitCount←v15892 = BCK((hitCount←v15892 + 1), 4);
            };
         };
      i←v26436 = (i←v26436 + 1);
      if ((i←v26436 < noName←c58392)) {
         goto lab←L100234;
         };
      lab←L100231: ;
      };
   /* removed tail goto */ 
   (*  (W6Pt) formal←c0884 ) = points←v15864;
   (* (( (ptr) formal←c0884)+6) ) = hitCount←v15892;
   (*  (W3Pt) (( (ptr) formal←c0884)+7) ) = tangent←v15920;
   return;
   }

static void CubEdgI←P3180(formal←c0900, c1←v32320, c2←v32348)
   word formal←c0900;
   word c1←v32320;
   word c2←v32348;
   {
   register ptr gf←c61464 =  (ptr) &globalframe;
   word iPoints←v32392;
   word tangency←v32420;
   word bezier←v26508;
   word edge←v26536;
   W6 points←v26564;
   word hitCount←v26592;
   W3 tangent←v26620;
   /* CubEdgI: */ 
SOURCE(41923, 450)
SOURCE(41923, 450)
   iPoints←v32392 = 0;
SOURCE(41923, 450)
   tangency←v32420 = 0;
SOURCE(42059, 30)
   bezier←v26508 = XR←Narrow(c1←v32320, (* (( (ptr) gf←c61464)+79) ));
SOURCE(42091, 23)
   edge←v26536 = XR←Narrow(c2←v32348, (* (( (ptr) gf←c61464)+76) ));
SOURCE(42165, 42)
   tangent←v26620.f0 = 0;
   tangent←v26620.f1 = 0;
   tangent←v26620.f2 = 0;
SOURCE(42209, 58)
   {
      W10 var←c58456;
      (void) CubicMeetsEdge←P3120((word) &var←c58456, bezier←v26508, edge←v26536);
      tangent←v26620 = (*  (W3Pt) (( (ptr) &var←c58456)+7) );
      hitCount←v26592 = (* (( (ptr) &var←c58456)+6) );
      points←v26564 = (*  (W6Pt) &var←c58456 );
      };
SOURCE(42269, 104)
   {
      register word i←v27096 = 0;
      register word noName←c58488;
      noName←c58488 = hitCount←v26592;
      if ((i←v27096 >= noName←c58488)) {
         goto lab←L100236;
         };
      lab←L100239: ;
SOURCE(42300, 34)
      {
         word var←c58520;
         var←c58520 = XR←NewObject(12, (* (( (ptr) gf←c61464)+75) ));
         (*  (W2Pt) var←c58520 ) = (* (( (W2Pt) &points←v26564)+BCK(i←v27096, 3)) );
         (* (( (ptr) var←c58520)+2) ) = iPoints←v32392;
         iPoints←v32392 = var←c58520;
         };
SOURCE(42336, 37)
      {
         word var←c58552;
         var←c58552 = XR←NewObject(8, (* (( (ptr) gf←c61464)+71) ));
         (*  (ptr) var←c58552 ) = (* (( (ptr) &tangent←v26620)+BCK(i←v27096, 3)) );
         (* (( (ptr) var←c58552)+1) ) = tangency←v32420;
         tangency←v32420 = var←c58552;
         };
      i←v27096 = (i←v27096 + 1);
      if ((i←v27096 < noName←c58488)) {
         goto lab←L100239;
         };
      lab←L100236: ;
      };
   /* removed tail goto */ 
   (*  (ptr) formal←c0900 ) = iPoints←v32392;
   (* (( (ptr) formal←c0900)+1) ) = tangency←v32420;
   return;
   }

static void SlcLinI←P3240(formal←c0911, c1←v32480, c2←v32508)
   word formal←c0911;
   word c1←v32480;
   word c2←v32508;
   {
   register ptr gf←c61496 =  (ptr) &globalframe;
   word iPoints←v32552;
   word tangency←v32580;
   word sliceD←v27140;
   word line←v27168;
   /* SlcLinI: */ 
SOURCE(42388, 251)
SOURCE(42388, 251)
   iPoints←v32552 = 0;
SOURCE(42388, 251)
   tangency←v32580 = 0;
SOURCE(42418, 36)
   sliceD←v27140 = XR←Narrow(c1←v32480, (* (( (ptr) gf←c61496)+64) ));
SOURCE(42456, 23)
   line←v27168 = XR←Narrow(c2←v32508, (* (( (ptr) gf←c61496)+68) ));
SOURCE(42481, 59)
   {
      W2 var←c58584;
      {
         word pd386;
         pd386 = (* (( (ptr) (* (( (ptr) gf←c61496)+208)/* var←c54328 */  ))+49) );
         (void) ( *( (fPt) ((*  (ptr) pd386 ))))((word) &var←c58584, sliceD←v27140, line←v27168, pd386);
         };
      iPoints←v32552 = var←c58584.f0;
      };
SOURCE(42542, 97)
   {
      register word list←v27212;
      list←v27212 = iPoints←v32552;
      lab←L100244: ;
      if ((list←v27212 != 0)) {
         }
      else {
         goto lab←L100241;
         };
SOURCE(42607, 32)
      {
         word var←c58616;
         var←c58616 = XR←NewObject(8, (* (( (ptr) gf←c61496)+71) ));
         (* (( (ptr) var←c58616)+1) ) = tangency←v32580;
         tangency←v32580 = var←c58616;
         };
      list←v27212 = (* (( (ptr) list←v27212)+2) );
      goto lab←L100244;
      lab←L100241: ;
      };
   /* removed tail goto */ 
   (*  (ptr) formal←c0911 ) = iPoints←v32552;
   (* (( (ptr) formal←c0911)+1) ) = tangency←v32580;
   return;
   }

static void SlcCirI←P3300(formal←c0922, c1←v32640, c2←v32668)
   word formal←c0922;
   word c1←v32640;
   word c2←v32668;
   {
   register ptr gf←c61528 =  (ptr) &globalframe;
   word iPoints←v32712;
   word tangency←v32740;
   word sliceD←v27340;
   word circle←v27368;
   /* SlcCirI: */ 
SOURCE(42654, 259)
SOURCE(42654, 259)
   iPoints←v32712 = 0;
SOURCE(42654, 259)
   tangency←v32740 = 0;
SOURCE(42684, 36)
   sliceD←v27340 = XR←Narrow(c1←v32640, (* (( (ptr) gf←c61528)+64) ));
SOURCE(42722, 27)
   circle←v27368 = XR←Narrow(c2←v32668, (* (( (ptr) gf←c61528)+78) ));
SOURCE(42751, 63)
   {
      W2 var←c58648;
      {
         word pd387;
         pd387 = (* (( (ptr) (* (( (ptr) gf←c61528)+208)/* var←c54328 */  ))+50) );
         (void) ( *( (fPt) ((*  (ptr) pd387 ))))((word) &var←c58648, sliceD←v27340, circle←v27368, pd387);
         };
      iPoints←v32712 = var←c58648.f0;
      };
SOURCE(42816, 97)
   {
      register word list←v27412;
      list←v27412 = iPoints←v32712;
      lab←L100249: ;
      if ((list←v27412 != 0)) {
         }
      else {
         goto lab←L100246;
         };
SOURCE(42881, 32)
      {
         word var←c58680;
         var←c58680 = XR←NewObject(8, (* (( (ptr) gf←c61528)+71) ));
         (* (( (ptr) var←c58680)+1) ) = tangency←v32740;
         tangency←v32740 = var←c58680;
         };
      list←v27412 = (* (( (ptr) list←v27412)+2) );
      goto lab←L100249;
      lab←L100246: ;
      };
   /* removed tail goto */ 
   (*  (ptr) formal←c0922 ) = iPoints←v32712;
   (* (( (ptr) formal←c0922)+1) ) = tangency←v32740;
   return;
   }

static word NewMultiGravityPool←P3360()
   {
   register ptr gf←c61560 =  (ptr) &globalframe;
   word var←c16072;
   word pool←v27540;
   /* NewMultiGravityPool: */ 
SOURCE(42928, 491)
SOURCE(43043, 49)
   pool←v27540 = XR←NewObject(12, (* (( (ptr) gf←c61560)+72) ));
SOURCE(43094, 49)
   {
      word var←c58744;
      {
         word var←c58776;
         word var←c58808;
         word var←c58840;
         {
            word idx388;
            var←c58776 = (
               idx388 = (* (( (ptr) gf←c61560)+4)/* MaxFeatures←v5240 */  ),
               BCK(idx388, 67108863)
               );
            };
         var←c58808 = ((word) var←c58776 << 2);
         var←c58840 = XR←NewObject((40 + var←c58808), (* (( (ptr) gf←c61560)+70) ));
         (* (( (ptr) var←c58840)+9) ) = var←c58776;
         var←c58744 = var←c58840;
         };
      (*  (ptr) pool←v27540 ) = var←c58744;
      };
SOURCE(43145, 49)
   {
      word var←c58872;
      {
         word var←c58904;
         word var←c58936;
         word var←c58968;
         {
            word idx389;
            var←c58904 = (
               idx389 = (* (( (ptr) gf←c61560)+4)/* MaxFeatures←v5240 */  ),
               BCK(idx389, 67108863)
               );
            };
         var←c58936 = ((word) var←c58904 << 2);
         var←c58968 = XR←NewObject((40 + var←c58936), (* (( (ptr) gf←c61560)+70) ));
         (* (( (ptr) var←c58968)+9) ) = var←c58904;
         var←c58872 = var←c58968;
         };
      (* (( (ptr) pool←v27540)+1) ) = var←c58872;
      };
SOURCE(43196, 47)
   {
      word var←c59000;
      {
         word var←c59032;
         word var←c59064;
         word var←c59096;
         {
            word idx390;
            var←c59032 = (
               idx390 = (* (( (ptr) gf←c61560)+4)/* MaxFeatures←v5240 */  ),
               BCK(idx390, 67108863)
               );
            };
         var←c59064 = ((word) var←c59032 << 2);
         var←c59096 = XR←NewObject((32 + var←c59064), (* (( (ptr) gf←c61560)+57) ));
         (* (( (ptr) var←c59096)+7) ) = var←c59032;
         var←c59000 = var←c59096;
         };
      (* (( (ptr) pool←v27540)+2) ) = var←c59000;
      };
SOURCE(43245, 151)
   {
      register word i←v27584 = 0;
      register word noName←c59128;
      noName←c59128 = (* (( (ptr) gf←c61560)+4)/* MaxFeatures←v5240 */  );
      if ((i←v27584 >= noName←c59128)) {
         goto lab←L100250;
         };
      lab←L100253: ;
SOURCE(43279, 38)
      {
         word var←c59192;
         var←c59192 = (*  (ptr) pool←v27540 );
         {
            word limit391;
            (* ((( (ptr) var←c59192)+10)+(
                  limit391 = (* (( (ptr) var←c59192)+9) ),
                  BCK(i←v27584, limit391)
                  )) ) = XR←NewObject(36, (* (( (ptr) gf←c61560)+60) ));
            };
         };
SOURCE(43319, 38)
      {
         word var←c59256;
         var←c59256 = (* (( (ptr) pool←v27540)+1) );
         {
            word limit392;
            (* ((( (ptr) var←c59256)+10)+(
                  limit392 = (* (( (ptr) var←c59256)+9) ),
                  BCK(i←v27584, limit392)
                  )) ) = XR←NewObject(36, (* (( (ptr) gf←c61560)+60) ));
            };
         };
SOURCE(43359, 37)
      {
         word var←c59320;
         var←c59320 = (* (( (ptr) pool←v27540)+2) );
         {
            word limit393;
            (* ((( (ptr) var←c59320)+8)+(
                  limit393 = (* (( (ptr) var←c59320)+7) ),
                  BCK(i←v27584, limit393)
                  )) ) = XR←NewObject(36, (* (( (ptr) gf←c61560)+60) ));
            };
         };
      i←v27584 = (i←v27584 + 1);
      if ((i←v27584 < noName←c59128)) {
         goto lab←L100253;
         };
      lab←L100250: ;
      };
SOURCE(43407, 12)
   return(pool←v27540);
   }

static void NoName←Q7584(formal←c0947, formal←c200008, formal←c200009, formal←c200010, formal←c200011)
   word formal←c0947;
   word formal←c200008;
   word formal←c200009;
   word formal←c200010;
   word formal←c200011;
   {
   if ((formal←c200009 == XR←Unwind)) {
SOURCE(12699, 47)
      {
         word var←c53048;
         var←c53048 = (word) NewMultiGravityPool←P3360();
         (* (( (ptr) (* (( (ptr) formal←c200008)+9) ))+52) ) = var←c53048;
         };
      };
   (*  (ptr) formal←c0947 ) = 0;
   (* (( (ptr) formal←c0947)+1) ) = 0;
   return;
   }

static void NoName←Q7644(formal←c0953, formal←c200004, formal←c200005, formal←c200006, formal←c200007)
   word formal←c0953;
   word formal←c200004;
   word formal←c200005;
   word formal←c200006;
   word formal←c200007;
   {
   if ((formal←c200005 == XR←Unwind)) {
SOURCE(6946, 47)
      {
         word var←c52120;
         var←c52120 = (word) NewMultiGravityPool←P3360();
         (* (( (ptr) (* (( (ptr) formal←c200004)+9) ))+52) ) = var←c52120;
         };
      };
   (*  (ptr) formal←c0953 ) = 0;
   (* (( (ptr) formal←c0953)+1) ) = 0;
   return;
   }

static void NoName←Q7704(formal←c0959, formal←c200000, formal←c200001, formal←c200002, formal←c200003)
   word formal←c0959;
   word formal←c200000;
   word formal←c200001;
   word formal←c200002;
   word formal←c200003;
   {
   if ((formal←c200001 == XR←Unwind)) {
SOURCE(3409, 47)
      {
         word var←c51416;
         var←c51416 = (word) NewMultiGravityPool←P3360();
         (* (( (ptr) (* (( (ptr) formal←c200000)+9) ))+52) ) = var←c51416;
         };
      };
   (*  (ptr) formal←c0959 ) = 0;
   (* (( (ptr) formal←c0959)+1) ) = 0;
   return;
   }

/* file: GGMultiGravityImpl, module: GGMultiGravityImpl, compiled at: July 11, 1993 7:59:18 pm PDT */ 
extern void XR←install←GGMultiGravityImpl() {
   NoName←Q7344();
   }
extern void XR←run←GGMultiGravityImpl() { XR←Start(&globalframe); }