/* Generated by Nim Compiler v0.11.2 */
/*   (c) 2015 Andreas Rumpf */
/* The generated code is subject to the original license. */
#define NIM_INTBITS 32
#include "nimbase.h"

#include <setjmp.h>

#include <string.h>

#include <stdio.h>
typedef struct Tsym191843 Tsym191843;
typedef struct Tlineinfo164338 Tlineinfo164338;
typedef struct Tcontext245023 Tcontext245023;
typedef struct Tnode191813 Tnode191813;
typedef struct Ttype191849 Ttype191849;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct Tident168021 Tident168021;
typedef struct Tnodeseq191807 Tnodeseq191807;
typedef struct Tpasscontext242005 Tpasscontext242005;
typedef struct TNimObject TNimObject;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct Tscope191837 Tscope191837;
typedef struct Tproccon245011 Tproccon245011;
typedef struct Tsymseq191815 Tsymseq191815;
typedef struct Intset188056 Intset188056;
typedef struct Ttrunk188052 Ttrunk188052;
typedef struct Ttrunkseq188054 Ttrunkseq188054;
typedef struct Tlinkedlist130028 Tlinkedlist130028;
typedef struct Tlistentry130022 Tlistentry130022;
typedef struct Tidtable191861 Tidtable191861;
typedef struct Tidpairseq191859 Tidpairseq191859;
typedef struct Tstrtable191817 Tstrtable191817;
typedef struct Tctx244048 Tctx244048;
typedef struct TY245141 TY245141;
typedef struct Exception Exception;
typedef struct TSafePoint TSafePoint;
typedef struct Tcell46346 Tcell46346;
typedef struct Tcellset46358 Tcellset46358;
typedef struct Tgcheap48216 Tgcheap48216;
typedef struct Tcellseq46362 Tcellseq46362;
typedef struct Tpagedesc46354 Tpagedesc46354;
typedef struct Tmemregion28210 Tmemregion28210;
typedef struct Tsmallchunk27440 Tsmallchunk27440;
typedef struct Tllchunk28204 Tllchunk28204;
typedef struct Tbigchunk27442 Tbigchunk27442;
typedef struct Tintset27417 Tintset27417;
typedef struct Ttrunk27413 Ttrunk27413;
typedef struct Tavlnode28208 Tavlnode28208;
typedef struct Tgcstat48214 Tgcstat48214;
typedef struct Tidobj168015 Tidobj168015;
typedef struct Ttypeseq191845 Ttypeseq191845;
typedef struct TY191944 TY191944;
typedef struct Tloc191827 Tloc191827;
typedef struct Ropeobj162009 Ropeobj162009;
typedef struct Tlib191831 Tlib191831;
typedef struct Ttabiter199119 Ttabiter199119;
typedef struct Tdocumentor341007 Tdocumentor341007;
typedef struct Tcandidate345209 Tcandidate345209;
typedef struct TY86345 TY86345;
typedef struct Tidpair191857 Tidpair191857;
typedef struct TY244253 TY244253;
typedef struct TY165036 TY165036;
typedef struct PprocHEX3Aobjecttype244232 PprocHEX3Aobjecttype244232;
typedef struct TY244272 TY244272;
typedef struct Tinstantiationpair245013 Tinstantiationpair245013;
typedef struct Tinstantiation191833 Tinstantiation191833;
typedef struct Tbasechunk27438 Tbasechunk27438;
typedef struct Tfreecell27430 Tfreecell27430;
typedef struct Trstgenerator312016 Trstgenerator312016;
typedef struct Stringtableobj134012 Stringtableobj134012;
typedef struct TY312034 TY312034;
typedef struct Table312052 Table312052;
typedef struct Keyvaluepairseq312055 Keyvaluepairseq312055;
typedef struct TY244233 TY244233;
typedef struct TY244239 TY244239;
typedef struct TY244273 TY244273;
typedef struct Vmargs244042 Vmargs244042;
typedef struct TY191933 TY191933;
typedef struct Keyvaluepairseq134010 Keyvaluepairseq134010;
typedef struct Ttocentry312012 Ttocentry312012;
typedef struct Trstnode297011 Trstnode297011;
typedef struct Keyvaluepair312058 Keyvaluepair312058;
typedef struct Tblock244030 Tblock244030;
typedef struct TY244213 TY244213;
typedef struct Keyvaluepair134008 Keyvaluepair134008;
typedef struct Trstnodeseq297009 Trstnodeseq297009;
struct  Tlineinfo164338  {
NI16 line;
NI16 col;
NI32 fileindex;
};
struct  TGenericSeq  {
NI len;
NI reserved;
};
struct  NimStringDesc  {
  TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct  Tnode191813  {
Ttype191849* typ;
Tlineinfo164338 info;
NU16 flags;
NU8 kind;
union{
struct {NI64 intval;
} S1;
struct {NF floatval;
} S2;
struct {NimStringDesc* strval;
} S3;
struct {Tsym191843* sym;
} S4;
struct {Tident168021* ident;
} S5;
struct {Tnodeseq191807* sons;
} S6;
} kindU;
NimStringDesc* comment;
};
typedef N_NIMCALL_PTR(void, TY3289) (void* p, NI op);
typedef N_NIMCALL_PTR(void*, TY3294) (void* p);
struct  TNimType  {
NI size;
NU8 kind;
NU8 flags;
TNimType* base;
TNimNode* node;
void* finalizer;
TY3289 marker;
TY3294 deepcopy;
};
struct  TNimObject  {
TNimType* m_type;
};
struct  Tpasscontext242005  {
  TNimObject Sup;
NIM_BOOL fromcache;
};
struct  Intset188056  {
NI counter;
NI max;
Ttrunk188052* head;
Ttrunkseq188054* data;
};
struct  Tlinkedlist130028  {
Tlistentry130022* head;
Tlistentry130022* tail;
NI counter;
};
struct  Tidtable191861  {
NI counter;
Tidpairseq191859* data;
};
typedef N_NIMCALL_PTR(Tnode191813*, TY245072) (Tcontext245023* c, Tnode191813* n);
typedef N_NIMCALL_PTR(Tnode191813*, TY245077) (Tcontext245023* c, Tnode191813* n, NU16 flags);
typedef N_NIMCALL_PTR(Tnode191813*, TY245085) (Tcontext245023* c, Tnode191813* n, NU16 flags);
typedef N_NIMCALL_PTR(Tnode191813*, TY245093) (Tcontext245023* c, Tnode191813* n);
typedef N_NIMCALL_PTR(Tnode191813*, TY245098) (Tcontext245023* c, Tnode191813* n, NU16 flags);
typedef N_NIMCALL_PTR(Tnode191813*, TY245106) (Tcontext245023* c, Tnode191813* n);
typedef N_NIMCALL_PTR(Tnode191813*, TY245111) (Tcontext245023* c, Tnode191813* n, Tnode191813* norig, NU32 filter);
typedef N_NIMCALL_PTR(Ttype191849*, TY245118) (Tcontext245023* c, Tnode191813* n, Ttype191849* prev);
typedef struct {
N_NIMCALL_PTR(Tnode191813*, ClPrc) (Tcontext245023* c, Tidtable191861 pt, Tnode191813* n, void* ClEnv);
void* ClEnv;
} TY245124;
typedef struct {
N_NIMCALL_PTR(Tsym191843*, ClPrc) (Tcontext245023* c, Tsym191843* fn, Tidtable191861 pt, Tlineinfo164338 info, void* ClEnv);
void* ClEnv;
} TY245130;
struct  Tstrtable191817  {
NI counter;
Tsymseq191815* data;
};
typedef N_NIMCALL_PTR(Tsym191843*, TY245146) (Tcontext245023* c, Tsym191843* dc, Ttype191849* t, Tlineinfo164338 info, NU8 op);
struct  Tcontext245023  {
  Tpasscontext242005 Sup;
Tsym191843* module;
Tscope191837* currentscope;
Tscope191837* importtable;
Tscope191837* toplevelscope;
Tproccon245011* p;
Tsymseq191815* friendmodules;
NI instcounter;
Intset188056 ambiguoussymbols;
NI intypeclass;
NI ingenericcontext;
NI inunrolledcontext;
NI incompilescontext;
NI ingenericinst;
Tsymseq191815* converters;
Tsymseq191815* patterns;
Tlinkedlist130028 optionstack;
Tidtable191861 symmapping;
Tlinkedlist130028 libs;
TY245072 semconstexpr;
TY245077 semexpr;
TY245085 semtryexpr;
TY245093 semtryconstexpr;
TY245098 semoperand;
TY245106 semconstboolexpr;
TY245111 semoverloadedcall;
TY245118 semtypenode;
TY245124 seminferredlambda;
TY245130 semgenerateinstance;
Intset188056 includedfiles;
Tstrtable191817 userpragmas;
Tctx244048* evalcontext;
Intset188056 unknownidents;
TY245141* generics;
NI lastgenericidx;
NI hloloopdetector;
NI inparallelstmt;
TY245146 insttypeboundop;
};
struct  Exception  {
  TNimObject Sup;
Exception* parent;
NCSTRING name;
NimStringDesc* message;
NimStringDesc* trace;
};
typedef struct {
N_NIMCALL_PTR(NIM_BOOL, ClPrc) (Exception* e, void* ClEnv);
void* ClEnv;
} TY15609;
struct  TSafePoint  {
TSafePoint* prev;
NI status;
jmp_buf context;
NIM_BOOL hasRaiseAction;
TY15609 raiseAction;
};
struct  TNimNode  {
NU8 kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
struct  Tcell46346  {
NI refcount;
TNimType* typ;
};
struct  Tcellseq46362  {
NI len;
NI cap;
Tcell46346** d;
};
struct  Tcellset46358  {
NI counter;
NI max;
Tpagedesc46354* head;
Tpagedesc46354** data;
};
typedef Tsmallchunk27440* TY28222[512];
typedef Ttrunk27413* Ttrunkbuckets27415[256];
struct  Tintset27417  {
Ttrunkbuckets27415 data;
};
struct  Tmemregion28210  {
NI minlargeobj;
NI maxlargeobj;
TY28222 freesmallchunks;
Tllchunk28204* llmem;
NI currmem;
NI maxmem;
NI freemem;
NI lastsize;
Tbigchunk27442* freechunkslist;
Tintset27417 chunkstarts;
Tavlnode28208* root;
Tavlnode28208* deleted;
Tavlnode28208* last;
Tavlnode28208* freeavlnodes;
};
struct  Tgcstat48214  {
NI stackscans;
NI cyclecollections;
NI maxthreshold;
NI maxstacksize;
NI maxstackcells;
NI cycletablesize;
NI64 maxpause;
};
struct  Tgcheap48216  {
void* stackbottom;
NI cyclethreshold;
Tcellseq46362 zct;
Tcellseq46362 decstack;
Tcellset46358 cycleroots;
Tcellseq46362 tempstack;
NI recgclock;
Tmemregion28210 region;
Tgcstat48214 stat;
};
struct  Tidobj168015  {
  TNimObject Sup;
NI id;
};
struct  Tloc191827  {
NU8 k;
NU8 s;
NU16 flags;
Ttype191849* t;
Ropeobj162009* r;
Ropeobj162009* heaproot;
};
struct  Tsym191843  {
  Tidobj168015 Sup;
NU8 kind;
union{
struct {Ttypeseq191845* typeinstcache;
Tscope191837* typscope;
} S1;
struct {TY191944* procinstcache;
Tsym191843* gcunsafetyreason;
} S2;
struct {TY191944* usedgenerics;
Tstrtable191817 tab;
} S3;
struct {Tsym191843* guard;
} S4;
} kindU;
NU16 magic;
Ttype191849* typ;
Tident168021* name;
Tlineinfo164338 info;
Tsym191843* owner;
NU32 flags;
Tnode191813* ast;
NU32 options;
NI position;
NI offset;
Tloc191827 loc;
Tlib191831* annex;
Tnode191813* constraint;
};
struct  Tscope191837  {
NI depthlevel;
Tstrtable191817 symbols;
Tnodeseq191807* usingsyms;
Tscope191837* parent;
};
struct  Ttabiter199119  {
NI h;
};
struct  Tident168021  {
  Tidobj168015 Sup;
NimStringDesc* s;
Tident168021* next;
NI h;
};
struct  Ttype191849  {
  Tidobj168015 Sup;
NU8 kind;
NU8 callconv;
NU32 flags;
Ttypeseq191845* sons;
Tnode191813* n;
Tsym191843* owner;
Tsym191843* sym;
Tsym191843* destructor;
Tsym191843* deepcopy;
Tsym191843* assignment;
NI64 size;
NI16 align;
NI16 locklevel;
Tloc191827 loc;
};
typedef struct {
N_NIMCALL_PTR(NI, ClPrc) (Tsym191843* x_352527, Tsym191843* y_352529, void* ClEnv);
void* ClEnv;
} TY352525;
typedef N_CLOSURE_PTR(NI, TMP2623) (Tsym191843* x_354264, Tsym191843* y_354266, void* ClEnv);
struct  Tcandidate345209  {
Tcontext245023* c;
NI exactmatches;
NI genericmatches;
NI subtypematches;
NI intconvmatches;
NI convmatches;
NU8 state;
Ttype191849* callee;
Tsym191843* calleesym;
NI calleescope;
Tnode191813* call;
Tidtable191861 bindings;
NIM_BOOL basetypematch;
NU8 fauxmatch;
NIM_BOOL genericconverter;
NIM_BOOL coercedistincts;
NIM_BOOL typedescmatched;
NI inheritancepenalty;
Tsymseq191815* errors;
};
typedef Ttype191849* TY350187[1];
struct TY86345 {
NimStringDesc* Field0;
NI Field1;
};
typedef N_CLOSURE_PTR(Tnode191813*, TMP2660) (Tcontext245023* c, Tidtable191861 pt, Tnode191813* n);
typedef N_CLOSURE_PTR(Tsym191843*, TMP2661) (Tcontext245023* c, Tsym191843* fn, Tidtable191861 pt, Tlineinfo164338 info);
typedef N_CLOSURE_PTR(NI, TMP2673) (Tsym191843* x_352514, Tsym191843* y_352516, void* ClEnv);
typedef N_CLOSURE_PTR(Tsym191843*, TMP3482) (Tcontext245023* c, Tsym191843* fn, Tidtable191861 pt, Tlineinfo164338 info);
struct  Tproccon245011  {
Tsym191843* owner;
Tsym191843* resultsym;
NI nestedloopcounter;
NI nestedblockcounter;
NI intrystmt;
Tproccon245011* next;
NIM_BOOL wasforwarded;
Tnode191813* bracketexpr;
};
typedef NI TY27420[16];
struct  Ttrunk188052  {
Ttrunk188052* next;
NI key;
TY27420 bits;
};
struct  Tlistentry130022  {
  TNimObject Sup;
Tlistentry130022* prev;
Tlistentry130022* next;
};
struct  Tidpair191857  {
Tidobj168015* key;
TNimObject* val;
};
struct  Tctx244048  {
  Tpasscontext242005 Sup;
TY244253* code;
TY165036* debug;
Tnode191813* globals;
Tnode191813* constants;
Ttypeseq191845* types;
Tnode191813* currentexceptiona;
Tnode191813* currentexceptionb;
NI exceptioninstr;
PprocHEX3Aobjecttype244232* prc;
Tsym191843* module;
Tnode191813* callsite;
NU8 mode;
NU8 features;
NIM_BOOL traceactive;
NI loopiterations;
Tlineinfo164338 comesfromheuristic;
TY244272* callbacks;
NimStringDesc* errorflag;
};
struct  Tinstantiationpair245013  {
Tsym191843* genericsym;
Tinstantiation191833* inst;
};
struct  Tpagedesc46354  {
Tpagedesc46354* next;
NI key;
TY27420 bits;
};
struct  Tbasechunk27438  {
NI prevsize;
NI size;
NIM_BOOL used;
};
struct  Tsmallchunk27440  {
  Tbasechunk27438 Sup;
Tsmallchunk27440* next;
Tsmallchunk27440* prev;
Tfreecell27430* freelist;
NI free;
NI acc;
NF data;
};
struct  Tllchunk28204  {
NI size;
NI acc;
Tllchunk28204* next;
};
struct  Tbigchunk27442  {
  Tbasechunk27438 Sup;
Tbigchunk27442* next;
Tbigchunk27442* prev;
NI align;
NF data;
};
struct  Ttrunk27413  {
Ttrunk27413* next;
NI key;
TY27420 bits;
};
typedef Tavlnode28208* TY28214[2];
struct  Tavlnode28208  {
TY28214 link;
NI key;
NI upperbound;
NI level;
};
struct  Ropeobj162009  {
  TNimObject Sup;
Ropeobj162009* left;
Ropeobj162009* right;
NI length;
NimStringDesc* data;
};
struct  Tlib191831  {
  Tlistentry130022 Sup;
NU8 kind;
NIM_BOOL generated;
NIM_BOOL isoverriden;
Ropeobj162009* name;
Tnode191813* path;
};
typedef N_NIMCALL_PTR(NimStringDesc*, Tfindfilehandler298023) (NimStringDesc* filename);
typedef N_NIMCALL_PTR(void, Tmsghandler298021) (NimStringDesc* filename, NI line, NI col, NU8 msgkind, NimStringDesc* arg);
typedef NimStringDesc* TY312042[5];
struct  Table312052  {
Keyvaluepairseq312055* data;
NI counter;
};
struct  Trstgenerator312016  {
  TNimObject Sup;
NU8 target;
Stringtableobj134012* config;
NI splitafter;
TY312034* tocpart;
NIM_BOOL hastoc;
NimStringDesc* theindex;
NU8 options;
Tfindfilehandler298023 findfile;
Tmsghandler298021 msghandler;
NimStringDesc* filename;
TY312042 meta;
NimStringDesc* currentsection;
Table312052 seenindexterms;
};
typedef Ropeobj162009* Tsections341005[26];
struct  Tdocumentor341007  {
  Trstgenerator312016 Sup;
Ropeobj162009* moddesc;
NI id;
Tsections341005 toc;
Tsections341005 section;
NimStringDesc* indexvalfilename;
NimStringDesc* analytics;
Stringtableobj134012* seensymbols;
};
struct TY244239 {
NIM_BOOL Field0;
NU8 Field1;
};
typedef TY244239 TY244236[256];
struct  PprocHEX3Aobjecttype244232  {
TY244233* blocks;
Tsym191843* sym;
TY244236 slots;
NI maxslots;
};
typedef struct {
N_NIMCALL_PTR(void, ClPrc) (Vmargs244042* args, void* ClEnv);
void* ClEnv;
} Vmcallback244044;
struct TY244273 {
NimStringDesc* Field0;
Vmcallback244044 Field1;
};
struct  Tinstantiation191833  {
Tsym191843* sym;
Ttypeseq191845* concretetypes;
TY191933* usedby;
};
struct  Tfreecell27430  {
Tfreecell27430* next;
NI zerofield;
};
struct  Stringtableobj134012  {
  TNimObject Sup;
NI counter;
Keyvaluepairseq134010* data;
NU8 mode;
};
struct  Ttocentry312012  {
Trstnode297011* n;
NimStringDesc* refname;
NimStringDesc* header;
};
struct Keyvaluepair312058 {
NI Field0;
NimStringDesc* Field1;
NI Field2;
};
struct  Tblock244030  {
Tsym191843* label;
TY244213* fixups;
};
struct  Vmargs244042  {
NI ra;
NI rb;
NI rc;
void* slots;
Tnode191813* currentexception;
};
struct Keyvaluepair134008 {
NimStringDesc* Field0;
NimStringDesc* Field1;
};
struct  Trstnode297011  {
NU8 kind;
NimStringDesc* text;
NI level;
Trstnodeseq297009* sons;
};
struct Tsymseq191815 {
  TGenericSeq Sup;
  Tsym191843* data[SEQ_DECL_SIZE];
};
struct Ttypeseq191845 {
  TGenericSeq Sup;
  Ttype191849* data[SEQ_DECL_SIZE];
};
struct Tnodeseq191807 {
  TGenericSeq Sup;
  Tnode191813* data[SEQ_DECL_SIZE];
};
struct Ttrunkseq188054 {
  TGenericSeq Sup;
  Ttrunk188052* data[SEQ_DECL_SIZE];
};
struct Tidpairseq191859 {
  TGenericSeq Sup;
  Tidpair191857 data[SEQ_DECL_SIZE];
};
struct TY245141 {
  TGenericSeq Sup;
  Tinstantiationpair245013 data[SEQ_DECL_SIZE];
};
struct TY191944 {
  TGenericSeq Sup;
  Tinstantiation191833* data[SEQ_DECL_SIZE];
};
struct TY244253 {
  TGenericSeq Sup;
  NU32 data[SEQ_DECL_SIZE];
};
struct TY165036 {
  TGenericSeq Sup;
  Tlineinfo164338 data[SEQ_DECL_SIZE];
};
struct TY244272 {
  TGenericSeq Sup;
  TY244273 data[SEQ_DECL_SIZE];
};
struct TY312034 {
  TGenericSeq Sup;
  Ttocentry312012 data[SEQ_DECL_SIZE];
};
struct Keyvaluepairseq312055 {
  TGenericSeq Sup;
  Keyvaluepair312058 data[SEQ_DECL_SIZE];
};
struct TY244233 {
  TGenericSeq Sup;
  Tblock244030 data[SEQ_DECL_SIZE];
};
struct TY191933 {
  TGenericSeq Sup;
  NI32 data[SEQ_DECL_SIZE];
};
struct Keyvaluepairseq134010 {
  TGenericSeq Sup;
  Keyvaluepair134008 data[SEQ_DECL_SIZE];
};
struct TY244213 {
  TGenericSeq Sup;
  NI data[SEQ_DECL_SIZE];
};
struct Trstnodeseq297009 {
  TGenericSeq Sup;
  Trstnode297011* data[SEQ_DECL_SIZE];
};
N_NIMCALL(NU8, incheckpoint_354640)(Tlineinfo164338 current);
N_NIMCALL(Tnode191813*, findclosestdot_354647)(Tnode191813* n);
static N_INLINE(NI, safelen_192125)(Tnode191813* n);
N_NIMCALL(Tnode191813*, safesemexpr_355062)(Tcontext245023* c, Tnode191813* n);
static N_INLINE(void, pushSafePoint)(TSafePoint* s);
static N_INLINE(void, popSafePoint)(void);
N_NIMCALL(NIM_BOOL, isObj)(TNimType* obj, TNimType* subclass);
static N_INLINE(Exception*, getCurrentException)(void);
static N_INLINE(void, popCurrentException)(void);
static N_INLINE(void, asgnRef)(void** dest, void* src);
static N_INLINE(void, incref_52222)(Tcell46346* c);
static N_INLINE(NIM_BOOL, canbecycleroot_49867)(Tcell46346* c);
static N_INLINE(void, rtladdcycleroot_50623)(Tcell46346* c);
N_NOINLINE(void, incl_47065)(Tcellset46358* s, Tcell46346* cell);
static N_INLINE(Tcell46346*, usrtocell_49846)(void* usr);
static N_INLINE(void, decref_51804)(Tcell46346* c);
static N_INLINE(void, rtladdzct_51404)(Tcell46346* c);
N_NOINLINE(void, addzct_49817)(Tcellseq46362* s, Tcell46346* c);
N_NIMCALL(void, reraiseException)(void);
N_NIMCALL(void, suggestfieldaccess_354428)(Tcontext245023* c, Tnode191813* n, NI* outputs);
N_NIMCALL(Tsym191843*, inittabiter_199124)(Ttabiter199119* ti, Tstrtable191817 tab);
static N_INLINE(NIM_BOOL, filtersym_352015)(Tsym191843* s);
N_NIMCALL(void, suggestwriteln_165069)(NimStringDesc* s);
N_NIMCALL(NimStringDesc*, symtostr_352005)(Tsym191843* s, NIM_BOOL islocal, NimStringDesc* section);
N_NIMCALL(NimStringDesc*, symtostr_351816)(Tsym191843* s, NIM_BOOL islocal, NimStringDesc* section, Tlineinfo164338 li);
N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src);
N_NIMCALL(NimStringDesc*, addChar)(NimStringDesc* s, NIM_CHAR c);
N_NIMCALL(NimStringDesc*, rendertree_213058)(Tnode191813* n, NU8 renderflags);
static N_INLINE(void, appendString)(NimStringDesc* dest, NimStringDesc* src);
N_NIMCALL(NimStringDesc*, resizeString)(NimStringDesc* dest, NI addlen);
N_NIMCALL(NimStringDesc*, tofullpath_165276)(NI32 fileidx);
static N_INLINE(NI, tolinenumber_165439)(Tlineinfo164338 info);
N_NIMCALL(NimStringDesc*, nimIntToStr)(NI x);
static N_INLINE(NI, tocolumn_165449)(Tlineinfo164338 info);
N_NIMCALL(NimStringDesc*, reprEnum)(NI e_82529, TNimType* typ);
N_NIMCALL(NimStringDesc*, typetostring_221032)(Ttype191849* typ, NU8 prefer);
N_NIMCALL(NimStringDesc*, nsuEscape)(NimStringDesc* s, NimStringDesc* prefix, NimStringDesc* suffix);
N_NIMCALL(NimStringDesc*, extractdoccomment_341609)(Tsym191843* s, Tdocumentor341007* d);
N_NIMCALL(Tsym191843*, nextiter_199132)(Ttabiter199119* ti, Tstrtable191817 tab);
N_NIMCALL(void, suggesteverything_354355)(Tcontext245023* c, Tnode191813* n, NI* outputs);
N_NIMCALL(void, suggestsymlist_352267)(Tcontext245023* c, Tnode191813* list, NI* outputs);
N_NIMCALL(NI, sonslen_194403)(Tnode191813* n);
N_NIMCALL(void, suggestfield_352232)(Tcontext245023* c, Tsym191843* s, NI* outputs);
static N_INLINE(NIM_BOOL, fieldvisible_352059)(Tcontext245023* c, Tsym191843* f);
N_NIMCALL(Tsym191843*, getmodule_199243)(Tsym191843* s);
N_NIMCALL(void, suggestoperations_354035)(Tcontext245023* c, Tnode191813* n, Ttype191849* typ, NI* outputs);
N_NIMCALL(void*, newSeq)(TNimType* typ, NI len);
N_NIMCALL(TGenericSeq*, incrSeq)(TGenericSeq* seq, NI elemsize);
static N_INLINE(void, asgnRefNoCycle)(void** dest, void* src);
N_NIMCALL(void, genericSeqAssign)(void* dest, void* src_81204, TNimType* mt);
N_NIMCALL(void, sort_352518)(Tsym191843** a, NI aLen0, TY352525 cmp, NU8 order);
N_NIMCALL(NI, HEX3Aanonymous_354257)(Tsym191843* a_354208, Tsym191843* b_354210);
N_NIMCALL(NI, cmp_4717)(NimStringDesc* x, NimStringDesc* y);
static N_INLINE(NIM_BOOL, filtersymnoopr_352031)(Tsym191843* s);
N_NIMCALL(NIM_BOOL, iskeyword_213100)(Tident168021* i);
static N_INLINE(NIM_BOOL, typefits_353941)(Tcontext245023* c, Tsym191843* s, Ttype191849* firstarg);
N_NIMCALL(NI, sonslen_194351)(Ttype191849* n);
N_NIMCALL(Ttype191849*, skiptypes_195167)(Ttype191849* t, NU64 kinds);
N_NIMCALL(Ttype191849*, elemtype_221522)(Ttype191849* t);
N_NIMCALL(NIM_BOOL, argtypematches_351522)(Tcontext245023* c, Ttype191849* f, Ttype191849* a);
N_NIMCALL(void, initcandidate_345276)(Tcontext245023* ctx, Tcandidate345209* c, Ttype191849* callee);
static N_INLINE(void, initcandidateaux_345264)(Tcontext245023* ctx, Tcandidate345209* c, Ttype191849* callee);
N_NIMCALL(void, unsureAsgnRef)(void** dest, void* src);
N_NIMCALL(void, initidtable_195057)(Tidtable191861* x);
N_NIMCALL(Tnode191813*, paramtypesmatch_350556)(Tcandidate345209* m, Ttype191849* f, Ttype191849* a, Tnode191813* arg, Tnode191813* argorig);
N_NIMCALL(Tnode191813*, paramtypesmatchaux_350103)(Tcandidate345209* m, Ttype191849* f, Ttype191849* argtype_350108, Tnode191813* argsemantized, Tnode191813* argorig);
N_NIMCALL(void, assigntype_194452)(Ttype191849* dest, Ttype191849* src);
N_NIMCALL(Tnode191813*, newnodeit_193807)(NU8 kind, Tlineinfo164338 info, Ttype191849* typ);
N_NIMCALL(Ttype191849*, maketypefromexpr_245727)(Tcontext245023* c, Tnode191813* n);
N_NIMCALL(Ttype191849*, newtypes_245219)(NU8 kind, Tcontext245023* c);
static N_INLINE(void, nimGCunrefNoCycle)(void* p);
N_NIMCALL(void*, newSeqRC1)(TNimType* typ, NI len);
N_NIMCALL(NU8, typerel_346064)(Tcandidate345209* c, Ttype191849* f, Ttype191849* aorig, NIM_BOOL dobind);
static N_INLINE(void, put_345289)(Tidtable191861* t, Ttype191849* key, Ttype191849* val);
N_NIMCALL(void, idtableput_199196)(Tidtable191861* t, Tidobj168015* key, TNimObject* val);
static N_INLINE(Ttype191849*, skipintlit_239696)(Ttype191849* t);
N_NIMCALL(Ttype191849*, getsystype_239030)(NU8 kind);
N_NIMCALL(Ttype191849*, maybeskipdistinct_347517)(Ttype191849* t, Tsym191843* callee);
N_NIMCALL(NIM_BOOL, shouldskipdistinct_347425)(Tnode191813* rules, Tident168021* callident);
static N_INLINE(NI, len_192097)(Tnode191813* n);
N_NIMCALL(Tident168021*, considerquotedident_250010)(Tnode191813* n);
N_NIMCALL(Ttype191849*, base_221039)(Ttype191849* t);
N_NIMCALL(Ttype191849*, lastson_194442)(Ttype191849* n);
static N_INLINE(NIM_BOOL, sameenumtypes_226855)(Ttype191849* a, Ttype191849* b);
static N_INLINE(Tnode191813*, HEX5BHEX5D_192244)(Tnode191813* n, NI i);
N_NIMCALL(Tnode191813*, tryresolvingstaticexpr_347562)(Tcandidate345209* c, Tnode191813* n);
N_NIMCALL(Tnode191813*, replacetypesinbody_268617)(Tcontext245023* p, Tidtable191861 pt, Tnode191813* n);
N_NOINLINE(NU8, typerangerel_347234)(Ttype191849* f, Ttype191849* a);
N_NIMCALL(NI64, firstord_221004)(Ttype191849* t);
N_NIMCALL(NI64, lastord_221010)(Ttype191849* t);
N_NIMCALL(NIM_BOOL, isconvertibletorange_346238)(Ttype191849* f, Ttype191849* a);
N_NIMCALL(NU8, handlerange_346122)(Ttype191849* f, Ttype191849* a, NU8 min, NU8 max);
static N_INLINE(NIM_BOOL, isintlit_221327)(Ttype191849* t);
N_NIMCALL(NU8, handlefloatrange_346293)(Ttype191849* f, Ttype191849* a);
static N_INLINE(NIM_BOOL, isfloatlit_221367)(Ttype191849* t);
N_NIMCALL(TNimObject*, idtableget_199182)(Tidtable191861 t, Tidobj168015* key);
N_NIMCALL(Ttype191849*, newtypewithsons_245807)(Tcontext245023* c, NU8 kind, Ttypeseq191845* sons);
N_NIMCALL(Tnode191813*, newintnode_192608)(NU8 kind, NI64 intval);
N_NIMCALL(NI64, lengthord_221016)(Ttype191849* t);
static N_INLINE(NU8, allowsnil_346833)(Ttype191849* f);
N_NIMCALL(NIM_BOOL, isordinaltype_221093)(Ttype191849* t);
N_NIMCALL(void, internalerror_166218)(NimStringDesc* errmsg);
N_NIMCALL(NU8, recordrel_346668)(Tcandidate345209* c, Ttype191849* f, Ttype191849* a);
N_NIMCALL(NIM_BOOL, sametype_226092)(Ttype191849* a, Ttype191849* b, NU8 flags);
N_NIMCALL(NU8, minrel_346648)(NU8 a, NU8 b);
N_NIMCALL(void, internalerror_166199)(Tlineinfo164338 info, NimStringDesc* errmsg);
N_NIMCALL(NIM_BOOL, sameobjecttypes_226785)(Ttype191849* a, Ttype191849* b);
N_NIMCALL(NI, isobjectsubtype_346352)(Ttype191849* a, Ttype191849* f);
static N_INLINE(NIM_BOOL, samedistincttypes_226844)(Ttype191849* a, Ttype191849* b);
N_NIMCALL(NI, len_194377)(Ttype191849* n);
N_NIMCALL(NU8, proctyperel_346936)(Tcandidate345209* c, Ttype191849* f, Ttype191849* a);
N_NIMCALL(NU8, procparamtyperel_346891)(Tcandidate345209* c, Ttype191849* f_346895, Ttype191849* a);
N_NIMCALL(NIM_BOOL, ismetatype_192821)(Ttype191849* t);
N_NIMCALL(Ttype191849*, generatetypeinstance_268631)(Tcontext245023* p, Tidtable191861 pt, Tlineinfo164338 info, Ttype191849* t);
static N_INLINE(NIM_BOOL, inconsistentvartypes_346853)(Ttype191849* f, Ttype191849* a);
N_NIMCALL(NIM_BOOL, compatibleeffects_230489)(Ttype191849* formal, Ttype191849* actual);
N_NIMCALL(Ttype191849*, skipgenericalias_227119)(Ttype191849* t);
N_NIMCALL(Ttype191849*, concretetype_346074)(Tcandidate345209* c, Ttype191849* t);
N_NIMCALL(Ttype191849*, newtype_194140)(NU8 kind, Tsym191843* owner);
N_NIMCALL(void, addsonskipintlit_239729)(Ttype191849* father, Ttype191849* son);
N_NIMCALL(NimStringDesc*, rawNewString)(NI space);
N_NIMCALL(NU8, matchusertypeclass_347249)(Tcontext245023* c, Tcandidate345209* m, Ttype191849* ff, Ttype191849* a);
N_NIMCALL(Tscope191837*, openscope_250091)(Tcontext245023* c);
N_NIMCALL(Tsym191843*, newsym_192656)(NU8 symkind, Tident168021* name, Tsym191843* owner, Tlineinfo164338 info);
N_NIMCALL(Ttype191849*, maketypedesc_245682)(Tcontext245023* c, Ttype191849* typ);
N_NIMCALL(void, adddecl_250607)(Tcontext245023* c, Tsym191843* sym);
N_NIMCALL(Ttype191849*, makevartype_245643)(Tcontext245023* c, Ttype191849* basetype);
N_NIMCALL(NimStringDesc*, HEX24_166306)(TY86345 x);
N_NIMCALL(Tnode191813*, copytree_196028)(Tnode191813* src);
N_NIMCALL(void, closescope_250111)(Tcontext245023* c);
N_NIMCALL(NIM_BOOL, HEX3DHEX3D_230739)(Ttypeseq191845* x, Ttypeseq191845* y);
N_NIMCALL(NIM_BOOL, exprstructuralequivalent_220149)(Tnode191813* a, Tnode191813* b);
N_NIMCALL(void, localerror_166155)(Tlineinfo164338 info, NU16 msg, NimStringDesc* arg);
N_NIMCALL(void, incmatches_350036)(Tcandidate345209* m, NU8 r, NI convmatch);
N_NIMCALL(NIM_BOOL, isinlineiterator_349999)(Ttype191849* t);
N_NIMCALL(Tnode191813*, implicitconv_349761)(NU8 kind, Ttype191849* f, Tnode191813* arg, Tcandidate345209* m, Tcontext245023* c);
N_NIMCALL(Tnode191813*, newnodei_193351)(NU8 kind, Tlineinfo164338 info);
N_NIMCALL(NIM_BOOL, containsgenerictype_230310)(Ttype191849* t);
N_NIMCALL(Ttype191849*, getinstantiatedtype_349724)(Tcontext245023* c, Tnode191813* arg, Tcandidate345209* m, Ttype191849* f);
N_NIMCALL(Ttype191849*, errortype_246150)(Tcontext245023* c);
N_NIMCALL(void, addson_193819)(Tnode191813* father, Tnode191813* son);
N_NIMCALL(Tnode191813*, newsymnode_193338)(Tsym191843* sym, Tlineinfo164338 info);
N_NIMCALL(NIM_BOOL, isemptycontainer_230978)(Ttype191849* t);
N_NIMCALL(Tnode191813*, userconvmatch_349796)(Tcontext245023* c, Tcandidate345209* m, Ttype191849* f, Ttype191849* a, Tnode191813* arg);
N_NIMCALL(void, markused_345251)(Tlineinfo164338 info, Tsym191843* s);
N_NIMCALL(void, message_166188)(Tlineinfo164338 info, NU16 msg, NimStringDesc* arg);
static N_INLINE(void, suggestsym_354960)(Tlineinfo164338 info, Tsym191843* s);
N_NIMCALL(void, findusages_354892)(Tlineinfo164338 info, Tsym191843* s);
N_NIMCALL(NIM_BOOL, istracked_354796)(Tlineinfo164338 current, NI tokenlen);
N_NIMCALL(NIM_BOOL, HEX3DHEX3D_165789)(Tlineinfo164338 a, Tlineinfo164338 b);
N_NIMCALL(void, finddefinition_354923)(Tlineinfo164338 info, Tsym191843* s);
N_NIMCALL(void, suggestquit_165125)(void);
N_NIMCALL(Tnode191813*, newsymnode_193325)(Tsym191843* sym);
N_NIMCALL(Tnode191813*, localconvmatch_349902)(Tcontext245023* c, Tcandidate345209* m, Ttype191849* f, Ttype191849* a, Tnode191813* arg);
N_NIMCALL(void, add_192164)(Tnode191813* father, Tnode191813* son);
N_NIMCALL(void, copycandidate_345490)(Tcandidate345209* a, Tcandidate345209* b);
N_NIMCALL(void, copyidtable_193091)(Tidtable191861* dest, Tidtable191861 src);
N_NIMCALL(void, genericAssign)(void* dest, void* src, TNimType* mt);
N_NIMCALL(NI, cmpcandidates_345824)(Tcandidate345209* a, Tcandidate345209* b);
N_NIMCALL(NI, complexdisambiguation_345619)(Ttype191849* a, Ttype191849* b);
N_NIMCALL(NI, sumgeneric_345502)(Ttype191849* t_345504);
N_NIMCALL(void, suggestobject_352318)(Tcontext245023* c, Tnode191813* n, NI* outputs);
N_NIMCALL(Tnode191813*, lastson_194431)(Tnode191813* n);
N_NIMCALL(Tnode191813*, findclosestcall_354721)(Tnode191813* n);
N_NIMCALL(Tnode191813*, copynode_195640)(Tnode191813* src);
N_NIMCALL(void, suggestcall_352444)(Tcontext245023* c, Tnode191813* n_352447, Tnode191813* norig, NI* outputs);
N_NIMCALL(NI, HEX3Aanonymous_352507)(Tsym191843* a_352458, Tsym191843* b_352460);
N_NIMCALL(NIM_BOOL, namefits_352392)(Tcontext245023* c, Tsym191843* s, Tnode191813* n);
N_NIMCALL(NIM_BOOL, argsfit_352421)(Tcontext245023* c, Tsym191843* candidate, Tnode191813* n, Tnode191813* norig);
N_NIMCALL(void, initcandidate_345301)(Tcontext245023* ctx, Tcandidate345209* c, Tsym191843* callee, Tnode191813* binding, NI calleescope);
N_NIMCALL(Tsym191843*, originatingmodule_196736)(Tsym191843* s);
N_NIMCALL(Tsym191843*, skipgenericowner_196695)(Tsym191843* s);
N_NIMCALL(void, partialmatch_351434)(Tcontext245023* c, Tnode191813* n, Tnode191813* norig, Tcandidate345209* m);
N_NIMCALL(void, initintset_188927)(Intset188056* Result);
N_NOINLINE(void, chckNil)(void* p);
N_NIMCALL(void, matchesaux_351018)(Tcontext245023* c, Tnode191813* n, Tnode191813* norig, Tcandidate345209* m, Intset188056* marker);
N_NIMCALL(void, preparenamedparam_350913)(Tnode191813* a);
N_NIMCALL(Tnode191813*, newidentnode_193313)(Tident168021* ident, Tlineinfo164338 info);
N_NIMCALL(Tsym191843*, getsymfromlist_199228)(Tnode191813* list, Tident168021* ident, NI start);
N_NIMCALL(NIM_BOOL, containsorincl_188898)(Intset188056* s, NI key);
N_NIMCALL(Tnode191813*, prepareoperand_350852)(Tcontext245023* c, Ttype191849* formal, Tnode191813* a);
N_NIMCALL(NIM_BOOL, matchnodekinds_270284)(Tnode191813* p, Tnode191813* n);
N_NIMCALL(NIM_BOOL, islvalue_270263)(Tnode191813* n);
N_NIMCALL(Ttype191849*, arrayconstr_350936)(Tcontext245023* c, Tnode191813* n);
N_NIMCALL(void, rawaddson_195478)(Ttype191849* father, Ttype191849* son);
N_NIMCALL(Ttype191849*, makerangetype_246182)(Tcontext245023* c, NI64 first, NI64 last, Tlineinfo164338 info, Ttype191849* inttype);
N_NIMCALL(void, setson_350829)(Tnode191813* father, NI at, Tnode191813* son);
N_NIMCALL(TGenericSeq*, setLengthSeq)(TGenericSeq* seq, NI elemsize, NI newlen);
N_NIMCALL(Tnode191813*, prepareoperand_350893)(Tcontext245023* c, Tnode191813* a);
N_NIMCALL(void, incrindextype_350959)(Ttype191849* t);
N_NIMCALL(Ttype191849*, arrayconstr_350948)(Tcontext245023* c, Tlineinfo164338 info);
N_NIMCALL(NimStringDesc*, argtypetostring_345916)(Tnode191813* arg, NU8 prefer);
N_NIMCALL(void, suggestexpr_355070)(Tcontext245023* c, Tnode191813* node);
STRING_LITERAL(TMP2619, "\"", 1);
STRING_LITERAL(TMP2620, "sug", 3);
STRING_LITERAL(TMP2644, "forward type in typeRel()", 25);
STRING_LITERAL(TMP2645, "recordRel", 9);
STRING_LITERAL(TMP2648, "wrong instantiated type!", 24);
STRING_LITERAL(TMP2649, "cannot resolve type: ", 21);
STRING_LITERAL(TMP2653, "sigmatch.nim", 12);
NIM_CONST TY86345 TMP2652 = {((NimStringDesc*) &TMP2653),
((NI) 522)}
;
NIM_CONST TY86345 TMP2655 = {((NimStringDesc*) &TMP2653),
((NI) 1000)}
;
STRING_LITERAL(TMP2656, "", 0);
STRING_LITERAL(TMP2657, " unknown type kind ", 19);
STRING_LITERAL(TMP2658, "getInstantiatedType", 19);
STRING_LITERAL(TMP2659, "implicitConv", 12);
STRING_LITERAL(TMP2662, "use", 3);
STRING_LITERAL(TMP2663, "def", 3);
STRING_LITERAL(TMP2670, "x.state is not csMatch", 22);
STRING_LITERAL(TMP2671, "expression ", 11);
STRING_LITERAL(TMP2672, " has type ", 10);
NIM_CONST TY86345 TMP2676 = {((NimStringDesc*) &TMP2653),
((NI) 119)}
;
STRING_LITERAL(TMP2678, "matches", 7);
STRING_LITERAL(TMP2679, "con", 3);
STRING_LITERAL(TMP3008, ": ", 2);
STRING_LITERAL(TMP3009, " | ", 3);
STRING_LITERAL(TMP3010, ", ", 2);
STRING_LITERAL(TMP3481, "cannot instantiate \'deepCopy\'", 29);
Tsym191843* usagesym_354890;
Tlineinfo164338 lastlineinfo_354891;
extern Tlineinfo164338 gtrackpos_165500;
extern NU8 gidecmd_155115;
extern TSafePoint* exchandler_17043;
extern TNimType NTI164344; /* ERecoverableError */
extern Exception* currexception_17045;
extern Tnode191813* emptynode_192807;
extern Tgcheap48216 gch_48244;
extern NU32 gglobaloptions_155128;
extern TNimType NTI191441; /* TSymKind */
extern TNimType NTI191815; /* TSymSeq */
extern TNimType NTI191845; /* TTypeSeq */
extern TNimType NTI191260; /* TTypeKind */
TNimType NTI345209; /* TCandidate */
extern TNimType NTI245021; /* PContext */
extern TNimType NTI108; /* int */
TNimType NTI345205; /* TCandidateState */
extern TNimType NTI191809; /* PType */
extern TNimType NTI191811; /* PSym */
extern TNimType NTI191805; /* PNode */
extern TNimType NTI191861; /* TIdTable */
extern TNimType NTI138; /* bool */

N_NIMCALL(NU8, incheckpoint_354640)(Tlineinfo164338 current) {
	NU8 result;
{	result = 0;
	{
		if (!(current.fileindex == gtrackpos_165500.fileindex)) goto LA3;
		{
			NIM_BOOL LOC7;
			LOC7 = 0;
			LOC7 = (current.line == gtrackpos_165500.line);
			if (!(LOC7)) goto LA8;
			LOC7 = (((NI16)(current.col - gtrackpos_165500.col) > 0? ((NI16)(current.col - gtrackpos_165500.col)) : -((NI16)(current.col - gtrackpos_165500.col))) < ((NI16) 4));
			LA8: ;
			if (!LOC7) goto LA9;
			result = ((NU8) 2);
			goto BeforeRet;
		}
		LA9: ;
		{
			if (!(gtrackpos_165500.line <= current.line)) goto LA13;
			result = ((NU8) 1);
			goto BeforeRet;
		}
		LA13: ;
	}
	LA3: ;
	}BeforeRet: ;
	return result;
}

static N_INLINE(NI, safelen_192125)(Tnode191813* n) {
	NI result;
	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = ((*n).kind >= ((NU8) 0) && (*n).kind <= ((NU8) 23));
		if (LOC3) goto LA4;
		LOC3 = (*n).kindU.S6.sons == 0;
		LA4: ;
		if (!LOC3) goto LA5;
		result = ((NI) 0);
	}
	goto LA1;
	LA5: ;
	{
		result = ((*n).kindU.S6.sons ? (*n).kindU.S6.sons->Sup.len : 0);
	}
	LA1: ;
	return result;
}

N_NIMCALL(Tnode191813*, findclosestdot_354647)(Tnode191813* n) {
	Tnode191813* result;
{	result = 0;
	{
		NIM_BOOL LOC3;
		NU8 LOC5;
		LOC3 = 0;
		LOC3 = ((*n).kind == ((NU8) 45));
		if (!(LOC3)) goto LA4;
		LOC5 = 0;
		LOC5 = incheckpoint_354640((*n).info);
		LOC3 = (LOC5 == ((NU8) 2));
		LA4: ;
		if (!LOC3) goto LA6;
		result = n;
	}
	goto LA1;
	LA6: ;
	{
		{
			NI i_354687;
			NI HEX3Atmp_354702;
			NI LOC10;
			NI res_354705;
			i_354687 = 0;
			HEX3Atmp_354702 = 0;
			LOC10 = 0;
			LOC10 = safelen_192125(n);
			HEX3Atmp_354702 = (LOC10 - 1);
			res_354705 = ((NI) 0);
			{
				while (1) {
					if (!(res_354705 <= HEX3Atmp_354702)) goto LA12;
					i_354687 = res_354705;
					result = findclosestdot_354647((*n).kindU.S6.sons->data[i_354687]);
					{
						if (!!((result == NIM_NIL))) goto LA15;
						goto BeforeRet;
					}
					LA15: ;
					res_354705 += ((NI) 1);
				} LA12: ;
			}
		}
	}
	LA1: ;
	}BeforeRet: ;
	return result;
}

static N_INLINE(void, pushSafePoint)(TSafePoint* s) {
	(*s).hasRaiseAction = NIM_FALSE;
	(*s).prev = exchandler_17043;
	exchandler_17043 = s;
}

static N_INLINE(void, popSafePoint)(void) {
	exchandler_17043 = (*exchandler_17043).prev;
}

static N_INLINE(Exception*, getCurrentException)(void) {
	Exception* result;
	result = 0;
	result = currexception_17045;
	return result;
}

static N_INLINE(NIM_BOOL, canbecycleroot_49867)(Tcell46346* c) {
	NIM_BOOL result;
	result = 0;
	result = !((((*(*c).typ).flags &(1<<((((NU8) 1))&7)))!=0));
	return result;
}

static N_INLINE(void, rtladdcycleroot_50623)(Tcell46346* c) {
	{
		if (!!((((NI) ((NI)((*c).refcount & ((NI) 3)))) == ((NI) 3)))) goto LA3;
		(*c).refcount = (NI)((NI)((*c).refcount & ((NI) -4)) | ((NI) 3));
		incl_47065((&gch_48244.cycleroots), c);
	}
	LA3: ;
}

static N_INLINE(void, incref_52222)(Tcell46346* c) {
	(*c).refcount = (NI)((NU32)((*c).refcount) + (NU32)(((NI) 8)));
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = canbecycleroot_49867(c);
		if (!LOC3) goto LA4;
		rtladdcycleroot_50623(c);
	}
	LA4: ;
}

static N_INLINE(Tcell46346*, usrtocell_49846)(void* usr) {
	Tcell46346* result;
	result = 0;
	result = ((Tcell46346*) ((NI)((NU32)(((NI) (usr))) - (NU32)(((NI)sizeof(Tcell46346))))));
	return result;
}

static N_INLINE(void, rtladdzct_51404)(Tcell46346* c) {
	addzct_49817((&gch_48244.zct), c);
}

static N_INLINE(void, decref_51804)(Tcell46346* c) {
	{
		(*c).refcount -= ((NI) 8);
		if (!((NU32)((*c).refcount) < (NU32)(((NI) 8)))) goto LA3;
		rtladdzct_51404(c);
	}
	goto LA1;
	LA3: ;
	{
		NIM_BOOL LOC6;
		LOC6 = 0;
		LOC6 = canbecycleroot_49867(c);
		if (!LOC6) goto LA7;
		rtladdcycleroot_50623(c);
	}
	goto LA1;
	LA7: ;
	LA1: ;
}

static N_INLINE(void, asgnRef)(void** dest, void* src) {
	{
		Tcell46346* LOC5;
		if (!!((src == NIM_NIL))) goto LA3;
		LOC5 = 0;
		LOC5 = usrtocell_49846(src);
		incref_52222(LOC5);
	}
	LA3: ;
	{
		Tcell46346* LOC10;
		if (!!(((*dest) == NIM_NIL))) goto LA8;
		LOC10 = 0;
		LOC10 = usrtocell_49846((*dest));
		decref_51804(LOC10);
	}
	LA8: ;
	(*dest) = src;
}

static N_INLINE(void, popCurrentException)(void) {
	asgnRef((void**) (&currexception_17045), (*currexception_17045).parent);
}

N_NIMCALL(Tnode191813*, safesemexpr_355062)(Tcontext245023* c, Tnode191813* n) {
	Tnode191813* volatile result;
	TSafePoint TMP1964;
	result = 0;
	pushSafePoint(&TMP1964);
	TMP1964.status = setjmp(TMP1964.context);
	if (TMP1964.status == 0) {
		result = (*c).semexpr(c, n, 0);
		popSafePoint();
	}
	else {
		popSafePoint();
		if (isObj(getCurrentException()->Sup.m_type, (&NTI164344))) {
			TMP1964.status = 0;
			result = emptynode_192807;
			popCurrentException();
		}
	}
	if (TMP1964.status != 0) reraiseException();
	return result;
}

static N_INLINE(NIM_BOOL, filtersym_352015)(Tsym191843* s) {
	NIM_BOOL result;
	result = 0;
	result = !(((*s).kind == ((NU8) 6)));
	return result;
}

static N_INLINE(void, appendString)(NimStringDesc* dest, NimStringDesc* src) {
	memcpy(((NCSTRING) ((&(*dest).data[((*dest).Sup.len)- 0]))), ((NCSTRING) ((*src).data)), (NI)((*src).Sup.len + ((NI) 1)));
	(*dest).Sup.len += (*src).Sup.len;
}

static N_INLINE(NI, tolinenumber_165439)(Tlineinfo164338 info) {
	NI result;
	result = 0;
	result = ((NI) (info.line));
	return result;
}

static N_INLINE(NI, tocolumn_165449)(Tlineinfo164338 info) {
	NI result;
	result = 0;
	result = ((NI) (info.col));
	return result;
}

N_NIMCALL(NimStringDesc*, symtostr_351816)(Tsym191843* s, NIM_BOOL islocal, NimStringDesc* section, Tlineinfo164338 li) {
	NimStringDesc* result;
	result = 0;
	result = copyString(section);
	result = addChar(result, 9);
	{
		NimStringDesc* LOC11;
		NI LOC12;
		NimStringDesc* LOC13;
		NI LOC14;
		NimStringDesc* LOC15;
		if (!((gglobaloptions_155128 &(1<<((((NU8) 29))&31)))!=0)) goto LA3;
		{
			NimStringDesc* LOC9;
			if (!((520192 &(1<<(((*s).kind)&31)))!=0)) goto LA7;
			LOC9 = 0;
			LOC9 = rendertree_213058((*s).ast, 30);
			result = resizeString(result, LOC9->Sup.len + 0);
appendString(result, LOC9);
		}
		goto LA5;
		LA7: ;
		{
			result = resizeString(result, (*(*s).name).s->Sup.len + 0);
appendString(result, (*(*s).name).s);
		}
		LA5: ;
		result = addChar(result, 9);
		LOC11 = 0;
		LOC11 = tofullpath_165276(li.fileindex);
		result = resizeString(result, LOC11->Sup.len + 0);
appendString(result, LOC11);
		result = addChar(result, 9);
		LOC12 = 0;
		LOC12 = tolinenumber_165439(li);
		LOC13 = 0;
		LOC13 = nimIntToStr(LOC12);
		result = resizeString(result, LOC13->Sup.len + 0);
appendString(result, LOC13);
		result = addChar(result, 9);
		LOC14 = 0;
		LOC14 = tocolumn_165449(li);
		LOC15 = 0;
		LOC15 = nimIntToStr(LOC14);
		result = resizeString(result, LOC15->Sup.len + 0);
appendString(result, LOC15);
	}
	goto LA1;
	LA3: ;
	{
		NimStringDesc* LOC34;
		NI LOC35;
		NimStringDesc* LOC36;
		NI LOC37;
		NimStringDesc* LOC38;
		NimStringDesc* LOC39;
		NimStringDesc* LOC40;
		result = resizeString(result, reprEnum((*s).kind, (&NTI191441))->Sup.len + 0);
appendString(result, reprEnum((*s).kind, (&NTI191441)));
		result = addChar(result, 9);
		{
			NIM_BOOL LOC19;
			Tsym191843* ow;
			LOC19 = 0;
			LOC19 = !(islocal);
			if (!(LOC19)) goto LA20;
			LOC19 = !(((*s).kind == ((NU8) 6)));
			LA20: ;
			if (!LOC19) goto LA21;
			ow = (*s).owner;
			{
				NIM_BOOL LOC25;
				Tsym191843* ow2;
				LOC25 = 0;
				LOC25 = !(((*ow).kind == ((NU8) 6)));
				if (!(LOC25)) goto LA26;
				LOC25 = !(((*ow).owner == NIM_NIL));
				LA26: ;
				if (!LOC25) goto LA27;
				ow2 = (*ow).owner;
				result = resizeString(result, (*(*ow2).name).s->Sup.len + 0);
appendString(result, (*(*ow2).name).s);
				result = addChar(result, 46);
			}
			LA27: ;
			result = resizeString(result, (*(*ow).name).s->Sup.len + 0);
appendString(result, (*(*ow).name).s);
			result = addChar(result, 46);
		}
		LA21: ;
		result = resizeString(result, (*(*s).name).s->Sup.len + 0);
appendString(result, (*(*s).name).s);
		result = addChar(result, 9);
		{
			NimStringDesc* LOC33;
			if (!!(((*s).typ == NIM_NIL))) goto LA31;
			LOC33 = 0;
			LOC33 = typetostring_221032((*s).typ, ((NU8) 0));
			result = resizeString(result, LOC33->Sup.len + 0);
appendString(result, LOC33);
		}
		LA31: ;
		result = addChar(result, 9);
		LOC34 = 0;
		LOC34 = tofullpath_165276(li.fileindex);
		result = resizeString(result, LOC34->Sup.len + 0);
appendString(result, LOC34);
		result = addChar(result, 9);
		LOC35 = 0;
		LOC35 = tolinenumber_165439(li);
		LOC36 = 0;
		LOC36 = nimIntToStr(LOC35);
		result = resizeString(result, LOC36->Sup.len + 0);
appendString(result, LOC36);
		result = addChar(result, 9);
		LOC37 = 0;
		LOC37 = tocolumn_165449(li);
		LOC38 = 0;
		LOC38 = nimIntToStr(LOC37);
		result = resizeString(result, LOC38->Sup.len + 0);
appendString(result, LOC38);
		result = addChar(result, 9);
		LOC39 = 0;
		LOC39 = extractdoccomment_341609(s, NIM_NIL);
		LOC40 = 0;
		LOC40 = nsuEscape(LOC39, ((NimStringDesc*) &TMP2619), ((NimStringDesc*) &TMP2619));
		result = resizeString(result, LOC40->Sup.len + 0);
appendString(result, LOC40);
	}
	LA1: ;
	return result;
}

N_NIMCALL(NimStringDesc*, symtostr_352005)(Tsym191843* s, NIM_BOOL islocal, NimStringDesc* section) {
	NimStringDesc* result;
	result = 0;
	result = symtostr_351816(s, islocal, section, (*s).info);
	return result;
}

N_NIMCALL(void, suggesteverything_354355)(Tcontext245023* c, Tnode191813* n, NI* outputs) {
	NIM_BOOL islocal;
	islocal = NIM_TRUE;
	{
		Tscope191837* scope_354362;
		Tscope191837* HEX3Atmp_354403;
		Tscope191837* current_354406;
		scope_354362 = 0;
		HEX3Atmp_354403 = 0;
		HEX3Atmp_354403 = (*c).currentscope;
		current_354406 = HEX3Atmp_354403;
		{
			while (1) {
				if (!!((current_354406 == NIM_NIL))) goto LA3;
				scope_354362 = current_354406;
				{
					if (!(scope_354362 == (*c).toplevelscope)) goto LA6;
					islocal = NIM_FALSE;
				}
				LA6: ;
				{
					Tsym191843* it_354374;
					Tstrtable191817 HEX3Atmp_354397;
					Ttabiter199119 it_354400;
					Tsym191843* s_354402;
					it_354374 = 0;
					memset((void*)(&HEX3Atmp_354397), 0, sizeof(HEX3Atmp_354397));
					HEX3Atmp_354397.counter = (*scope_354362).symbols.counter;
					HEX3Atmp_354397.data = (*scope_354362).symbols.data;
					memset((void*)(&it_354400), 0, sizeof(it_354400));
					s_354402 = inittabiter_199124((&it_354400), HEX3Atmp_354397);
					{
						while (1) {
							if (!!((s_354402 == NIM_NIL))) goto LA10;
							it_354374 = s_354402;
							{
								NIM_BOOL LOC13;
								NimStringDesc* LOC16;
								LOC13 = 0;
								LOC13 = filtersym_352015(it_354374);
								if (!LOC13) goto LA14;
								LOC16 = 0;
								LOC16 = symtostr_352005(it_354374, islocal, ((NimStringDesc*) &TMP2620));
								suggestwriteln_165069(LOC16);
								(*outputs) += ((NI) 1);
							}
							LA14: ;
							s_354402 = nextiter_199132((&it_354400), HEX3Atmp_354397);
						} LA10: ;
					}
				}
				{
					if (!(scope_354362 == (*c).toplevelscope)) goto LA19;
					goto LA1;
				}
				LA19: ;
				current_354406 = (*current_354406).parent;
			} LA3: ;
		}
	} LA1: ;
}

static N_INLINE(NIM_BOOL, fieldvisible_352059)(Tcontext245023* c, Tsym191843* f) {
	NIM_BOOL result;
	NI fmoduleid;
	Tsym191843* LOC1;
	NIM_BOOL LOC2;
	result = 0;
	LOC1 = 0;
	LOC1 = getmodule_199243(f);
	fmoduleid = (*LOC1).Sup.id;
	LOC2 = 0;
	LOC2 = (((*f).flags &(1<<((((NU8) 1))&31)))!=0);
	if (LOC2) goto LA3;
	LOC2 = (fmoduleid == (*(*c).module).Sup.id);
	LA3: ;
	result = LOC2;
	{
		Tsym191843* module_352211;
		Tsymseq191815* HEX3Atmp_352214;
		NI i_352217;
		NI L_352219;
		module_352211 = 0;
		HEX3Atmp_352214 = 0;
		HEX3Atmp_352214 = (*c).friendmodules;
		i_352217 = ((NI) 0);
		L_352219 = (HEX3Atmp_352214 ? HEX3Atmp_352214->Sup.len : 0);
		{
			while (1) {
				if (!(i_352217 < L_352219)) goto LA6;
				module_352211 = HEX3Atmp_352214->data[i_352217];
				{
					if (!(fmoduleid == (*module_352211).Sup.id)) goto LA9;
					result = NIM_TRUE;
					goto LA4;
				}
				LA9: ;
				i_352217 += ((NI) 1);
			} LA6: ;
		}
	} LA4: ;
	return result;
}

N_NIMCALL(void, suggestfield_352232)(Tcontext245023* c, Tsym191843* s, NI* outputs) {
	{
		NIM_BOOL LOC3;
		NimStringDesc* LOC7;
		LOC3 = 0;
		LOC3 = filtersym_352015(s);
		if (!(LOC3)) goto LA4;
		LOC3 = fieldvisible_352059(c, s);
		LA4: ;
		if (!LOC3) goto LA5;
		LOC7 = 0;
		LOC7 = symtostr_352005(s, NIM_TRUE, ((NimStringDesc*) &TMP2620));
		suggestwriteln_165069(LOC7);
		(*outputs) += ((NI) 1);
	}
	LA5: ;
}

N_NIMCALL(void, suggestsymlist_352267)(Tcontext245023* c, Tnode191813* list, NI* outputs) {
	{
		NI i_352285;
		NI HEX3Atmp_352299;
		NI LOC2;
		NI res_352302;
		i_352285 = 0;
		HEX3Atmp_352299 = 0;
		LOC2 = 0;
		LOC2 = sonslen_194403(list);
		HEX3Atmp_352299 = (NI)(LOC2 - ((NI) 1));
		res_352302 = ((NI) 0);
		{
			while (1) {
				if (!(res_352302 <= HEX3Atmp_352299)) goto LA4;
				i_352285 = res_352302;
				{
					if (!((*(*list).kindU.S6.sons->data[i_352285]).kind == ((NU8) 3))) goto LA7;
					suggestfield_352232(c, (*(*list).kindU.S6.sons->data[i_352285]).kindU.S4.sym, outputs);
				}
				LA7: ;
				res_352302 += ((NI) 1);
			} LA4: ;
		}
	}
}

static N_INLINE(void, asgnRefNoCycle)(void** dest, void* src) {
	{
		Tcell46346* c;
		if (!!((src == NIM_NIL))) goto LA3;
		c = usrtocell_49846(src);
		(*c).refcount += ((NI) 8);
	}
	LA3: ;
	{
		Tcell46346* c;
		if (!!(((*dest) == NIM_NIL))) goto LA7;
		c = usrtocell_49846((*dest));
		{
			(*c).refcount -= ((NI) 8);
			if (!((NU32)((*c).refcount) < (NU32)(((NI) 8)))) goto LA11;
			rtladdzct_51404(c);
		}
		LA11: ;
	}
	LA7: ;
	(*dest) = src;
}

N_NIMCALL(NI, HEX3Aanonymous_354257)(Tsym191843* a_354208, Tsym191843* b_354210) {
	NI result;
{	result = 0;
	result = cmp_4717((*(*a_354208).name).s, (*(*b_354210).name).s);
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}

static N_INLINE(NIM_BOOL, filtersymnoopr_352031)(Tsym191843* s) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC2;
	NIM_BOOL LOC5;
	result = 0;
	LOC1 = 0;
	LOC2 = 0;
	LOC2 = !(((*s).kind == ((NU8) 6)));
	if (!(LOC2)) goto LA3;
	LOC2 = (((NU8)((*(*s).name).s->data[((NI) 0)])) >= ((NU8)(97)) && ((NU8)((*(*s).name).s->data[((NI) 0)])) <= ((NU8)(122)) || ((NU8)((*(*s).name).s->data[((NI) 0)])) >= ((NU8)(65)) && ((NU8)((*(*s).name).s->data[((NI) 0)])) <= ((NU8)(90)) || ((NU8)((*(*s).name).s->data[((NI) 0)])) >= ((NU8)(48)) && ((NU8)((*(*s).name).s->data[((NI) 0)])) <= ((NU8)(57)) || ((NU8)((*(*s).name).s->data[((NI) 0)])) >= ((NU8)(128)) && ((NU8)((*(*s).name).s->data[((NI) 0)])) <= ((NU8)(255)));
	LA3: ;
	LOC1 = LOC2;
	if (!(LOC1)) goto LA4;
	LOC5 = 0;
	LOC5 = iskeyword_213100((*s).name);
	LOC1 = !(LOC5);
	LA4: ;
	result = LOC1;
	return result;
}

static N_INLINE(void, initcandidateaux_345264)(Tcontext245023* ctx, Tcandidate345209* c, Ttype191849* callee) {
	unsureAsgnRef((void**) (&(*c).c), ctx);
	(*c).exactmatches = ((NI) 0);
	(*c).subtypematches = ((NI) 0);
	(*c).convmatches = ((NI) 0);
	(*c).intconvmatches = ((NI) 0);
	(*c).genericmatches = ((NI) 0);
	(*c).state = ((NU8) 0);
	unsureAsgnRef((void**) (&(*c).callee), callee);
	unsureAsgnRef((void**) (&(*c).call), NIM_NIL);
	(*c).basetypematch = NIM_FALSE;
	(*c).genericconverter = NIM_FALSE;
	(*c).inheritancepenalty = ((NI) 0);
}

N_NIMCALL(void, initcandidate_345276)(Tcontext245023* ctx, Tcandidate345209* c, Ttype191849* callee) {
	initcandidateaux_345264(ctx, c, callee);
	unsureAsgnRef((void**) (&(*c).calleesym), NIM_NIL);
	initidtable_195057((&(*c).bindings));
}

static N_INLINE(void, nimGCunrefNoCycle)(void* p) {
	Tcell46346* c;
	c = usrtocell_49846(p);
	{
		(*c).refcount -= ((NI) 8);
		if (!((NU32)((*c).refcount) < (NU32)(((NI) 8)))) goto LA3;
		rtladdzct_51404(c);
	}
	LA3: ;
}

static N_INLINE(Ttype191849*, skipintlit_239696)(Ttype191849* t) {
	Ttype191849* result;
{	result = 0;
	{
		if (!!(((*t).n == NIM_NIL))) goto LA3;
		{
			if (!((*t).kind == ((NU8) 31) || (*t).kind == ((NU8) 36))) goto LA7;
			result = getsystype_239030((*t).kind);
			goto BeforeRet;
		}
		LA7: ;
	}
	LA3: ;
	result = t;
	}BeforeRet: ;
	return result;
}

static N_INLINE(void, put_345289)(Tidtable191861* t, Ttype191849* key, Ttype191849* val) {
	Tidobj168015* LOC1;
	Ttype191849* LOC2;
	TNimObject* LOC3;
	LOC1 = 0;
	LOC1 = &key->Sup;
	LOC2 = 0;
	LOC2 = skipintlit_239696(val);
	LOC3 = 0;
	LOC3 = &LOC2->Sup.Sup;
	idtableput_199196(t, LOC1, LOC3);
}

static N_INLINE(NI, len_192097)(Tnode191813* n) {
	NI result;
	result = 0;
	{
		if (!(*n).kindU.S6.sons == 0) goto LA3;
		result = ((NI) 0);
	}
	goto LA1;
	LA3: ;
	{
		result = ((*n).kindU.S6.sons ? (*n).kindU.S6.sons->Sup.len : 0);
	}
	LA1: ;
	return result;
}

N_NIMCALL(NIM_BOOL, shouldskipdistinct_347425)(Tnode191813* rules, Tident168021* callident) {
	NIM_BOOL result;
{	result = 0;
	{
		if (!((*rules).kind == ((NU8) 130))) goto LA3;
		{
			Tnode191813* r_347439;
			r_347439 = 0;
			{
				NI i_347469;
				NI HEX3Atmp_347471;
				NI LOC7;
				NI res_347473;
				i_347469 = 0;
				HEX3Atmp_347471 = 0;
				LOC7 = 0;
				LOC7 = len_192097(rules);
				HEX3Atmp_347471 = (LOC7 - 1);
				res_347473 = ((NI) 0);
				{
					while (1) {
						if (!(res_347473 <= HEX3Atmp_347471)) goto LA9;
						i_347469 = res_347473;
						r_347439 = (*rules).kindU.S6.sons->data[i_347469];
						{
							Tident168021* LOC12;
							LOC12 = 0;
							LOC12 = considerquotedident_250010(r_347439);
							if (!(LOC12 == callident)) goto LA13;
							result = NIM_TRUE;
							goto BeforeRet;
						}
						LA13: ;
						res_347473 += ((NI) 1);
					} LA9: ;
				}
			}
		}
		result = NIM_FALSE;
		goto BeforeRet;
	}
	goto LA1;
	LA3: ;
	{
		{
			Tnode191813* r_347452;
			r_347452 = 0;
			{
				NI i_347480;
				NI HEX3Atmp_347482;
				NI LOC18;
				NI res_347484;
				i_347480 = 0;
				HEX3Atmp_347482 = 0;
				LOC18 = 0;
				LOC18 = len_192097(rules);
				HEX3Atmp_347482 = (LOC18 - 1);
				res_347484 = ((NI) 0);
				{
					while (1) {
						if (!(res_347484 <= HEX3Atmp_347482)) goto LA20;
						i_347480 = res_347484;
						r_347452 = (*rules).kindU.S6.sons->data[i_347480];
						{
							Tident168021* LOC23;
							LOC23 = 0;
							LOC23 = considerquotedident_250010(r_347452);
							if (!(LOC23 == callident)) goto LA24;
							result = NIM_FALSE;
							goto BeforeRet;
						}
						LA24: ;
						res_347484 += ((NI) 1);
					} LA20: ;
				}
			}
		}
		result = NIM_TRUE;
		goto BeforeRet;
	}
	LA1: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Ttype191849*, maybeskipdistinct_347517)(Ttype191849* t, Tsym191843* callee) {
	Ttype191849* result;
	result = 0;
	{
		NIM_BOOL LOC3;
		NIM_BOOL LOC4;
		NIM_BOOL LOC5;
		LOC3 = 0;
		LOC4 = 0;
		LOC5 = 0;
		LOC5 = !((t == NIM_NIL));
		if (!(LOC5)) goto LA6;
		LOC5 = ((*t).kind == ((NU8) 13));
		LA6: ;
		LOC4 = LOC5;
		if (!(LOC4)) goto LA7;
		LOC4 = !(((*t).n == NIM_NIL));
		LA7: ;
		LOC3 = LOC4;
		if (!(LOC3)) goto LA8;
		LOC3 = shouldskipdistinct_347425((*t).n, (*callee).name);
		LA8: ;
		if (!LOC3) goto LA9;
		result = base_221039(t);
	}
	goto LA1;
	LA9: ;
	{
		result = t;
	}
	LA1: ;
	return result;
}

static N_INLINE(NIM_BOOL, sameenumtypes_226855)(Ttype191849* a, Ttype191849* b) {
	NIM_BOOL result;
	result = 0;
	result = ((*a).Sup.id == (*b).Sup.id);
	return result;
}

static N_INLINE(Tnode191813*, HEX5BHEX5D_192244)(Tnode191813* n, NI i) {
	Tnode191813* result;
	result = 0;
	result = (*n).kindU.S6.sons->data[i];
	return result;
}

N_NIMCALL(Tnode191813*, tryresolvingstaticexpr_347562)(Tcandidate345209* c, Tnode191813* n) {
	Tnode191813* result;
	Tnode191813* instantiated;
	result = 0;
	instantiated = replacetypesinbody_268617((*c).c, (*c).bindings, n);
	result = (*(*c).c).semexpr((*c).c, instantiated, 0);
	return result;
}

N_NOINLINE(NU8, typerangerel_347234)(Ttype191849* f, Ttype191849* a) {
	NU8 result;
	NI64 a0;
	NI64 a1;
	NI64 f0;
	NI64 f1;
	result = 0;
	a0 = firstord_221004(a);
	a1 = lastord_221010(a);
	f0 = firstord_221004(f);
	f1 = lastord_221010(f);
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = (a0 == f0);
		if (!(LOC3)) goto LA4;
		LOC3 = (a1 == f1);
		LA4: ;
		if (!LOC3) goto LA5;
		result = ((NU8) 9);
	}
	goto LA1;
	LA5: ;
	{
		NIM_BOOL LOC8;
		LOC8 = 0;
		LOC8 = (f0 <= a0);
		if (!(LOC8)) goto LA9;
		LOC8 = (a1 <= f1);
		LA9: ;
		if (!LOC8) goto LA10;
		result = ((NU8) 1);
	}
	goto LA1;
	LA10: ;
	{
		NIM_BOOL LOC13;
		LOC13 = 0;
		LOC13 = (a0 <= f1);
		if (!(LOC13)) goto LA14;
		LOC13 = (f0 <= a1);
		LA14: ;
		if (!LOC13) goto LA15;
		result = ((NU8) 1);
	}
	goto LA1;
	LA15: ;
	{
		result = ((NU8) 0);
	}
	LA1: ;
	return result;
}

N_NIMCALL(NIM_BOOL, isconvertibletorange_346238)(Ttype191849* f, Ttype191849* a) {
	NIM_BOOL result;
	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = ((*f).kind >= ((NU8) 31) && (*f).kind <= ((NU8) 35) || (*f).kind >= ((NU8) 40) && (*f).kind <= ((NU8) 44));
		if (!(LOC3)) goto LA4;
		LOC3 = ((*a).kind >= ((NU8) 31) && (*a).kind <= ((NU8) 35) || (*a).kind >= ((NU8) 40) && (*a).kind <= ((NU8) 44));
		LA4: ;
		if (!LOC3) goto LA5;
		result = NIM_TRUE;
	}
	goto LA1;
	LA5: ;
	{
		NIM_BOOL LOC8;
		LOC8 = 0;
		LOC8 = ((*f).kind >= ((NU8) 36) && (*f).kind <= ((NU8) 39));
		if (!(LOC8)) goto LA9;
		LOC8 = ((*a).kind >= ((NU8) 36) && (*a).kind <= ((NU8) 39));
		LA9: ;
		if (!LOC8) goto LA10;
		result = NIM_TRUE;
	}
	goto LA1;
	LA10: ;
	LA1: ;
	return result;
}

static N_INLINE(NIM_BOOL, isintlit_221327)(Ttype191849* t) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC2;
	result = 0;
	LOC1 = 0;
	LOC2 = 0;
	LOC2 = ((*t).kind == ((NU8) 31));
	if (!(LOC2)) goto LA3;
	LOC2 = !(((*t).n == NIM_NIL));
	LA3: ;
	LOC1 = LOC2;
	if (!(LOC1)) goto LA4;
	LOC1 = ((*(*t).n).kind == ((NU8) 6));
	LA4: ;
	result = LOC1;
	return result;
}

N_NIMCALL(NU8, handlerange_346122)(Ttype191849* f, Ttype191849* a, NU8 min, NU8 max) {
	NU8 result;
	result = 0;
	{
		if (!((*a).kind == (*f).kind)) goto LA3;
		result = ((NU8) 9);
	}
	goto LA1;
	LA3: ;
	{
		Ttype191849* ab;
		NU8 k;
		ab = skiptypes_195167(a, 1048576);
		k = (*ab).kind;
		{
			if (!(k == (*f).kind)) goto LA8;
			result = ((NU8) 4);
		}
		goto LA6;
		LA8: ;
		{
			NIM_BOOL LOC11;
			NIM_BOOL LOC12;
			NIM_BOOL LOC13;
			NIM_BOOL LOC14;
			NI64 LOC18;
			NI64 LOC20;
			LOC11 = 0;
			LOC12 = 0;
			LOC13 = 0;
			LOC14 = 0;
			LOC14 = (k == ((NU8) 31));
			if (!(LOC14)) goto LA15;
			LOC14 = ((*f).kind == ((NU8) 20) || (*f).kind >= ((NU8) 32) && (*f).kind <= ((NU8) 35) || (*f).kind >= ((NU8) 40) && (*f).kind <= ((NU8) 44));
			LA15: ;
			LOC13 = LOC14;
			if (!(LOC13)) goto LA16;
			LOC13 = isintlit_221327(ab);
			LA16: ;
			LOC12 = LOC13;
			if (!(LOC12)) goto LA17;
			LOC18 = 0;
			LOC18 = firstord_221004(f);
			LOC12 = (LOC18 <= (*(*ab).n).kindU.S1.intval);
			LA17: ;
			LOC11 = LOC12;
			if (!(LOC11)) goto LA19;
			LOC20 = 0;
			LOC20 = lastord_221010(f);
			LOC11 = ((*(*ab).n).kindU.S1.intval <= LOC20);
			LA19: ;
			if (!LOC11) goto LA21;
			result = ((NU8) 8);
		}
		goto LA6;
		LA21: ;
		{
			NIM_BOOL LOC24;
			LOC24 = 0;
			LOC24 = ((*f).kind == ((NU8) 31));
			if (!(LOC24)) goto LA25;
			LOC24 = (k >= ((NU8) 32) && k <= ((NU8) 34));
			LA25: ;
			if (!LOC24) goto LA26;
			result = ((NU8) 2);
		}
		goto LA6;
		LA26: ;
		{
			NIM_BOOL LOC29;
			LOC29 = 0;
			LOC29 = (min <= k);
			if (!(LOC29)) goto LA30;
			LOC29 = (k <= max);
			LA30: ;
			if (!LOC29) goto LA31;
			result = ((NU8) 1);
		}
		goto LA6;
		LA31: ;
		{
			NIM_BOOL LOC34;
			NIM_BOOL LOC35;
			NIM_BOOL LOC36;
			NI64 LOC39;
			Tnode191813* LOC40;
			Tnode191813* LOC42;
			NI64 LOC43;
			LOC34 = 0;
			LOC35 = 0;
			LOC36 = 0;
			LOC36 = ((*a).kind == ((NU8) 20));
			if (!(LOC36)) goto LA37;
			LOC36 = ((*(*a).sons->data[((NI) 0)]).kind >= ((NU8) 31) && (*(*a).sons->data[((NI) 0)]).kind <= ((NU8) 35) || (*(*a).sons->data[((NI) 0)]).kind >= ((NU8) 41) && (*(*a).sons->data[((NI) 0)]).kind <= ((NU8) 43));
			LA37: ;
			LOC35 = LOC36;
			if (!(LOC35)) goto LA38;
			LOC39 = 0;
			LOC39 = firstord_221004(f);
			LOC40 = 0;
			LOC40 = HEX5BHEX5D_192244((*a).n, ((NI) 0));
			LOC35 = (LOC39 <= (*LOC40).kindU.S1.intval);
			LA38: ;
			LOC34 = LOC35;
			if (!(LOC34)) goto LA41;
			LOC42 = 0;
			LOC42 = HEX5BHEX5D_192244((*a).n, ((NI) 1));
			LOC43 = 0;
			LOC43 = lastord_221010(f);
			LOC34 = ((*LOC42).kindU.S1.intval <= LOC43);
			LA41: ;
			if (!LOC34) goto LA44;
			result = ((NU8) 1);
		}
		goto LA6;
		LA44: ;
		{
			result = ((NU8) 0);
		}
		LA6: ;
	}
	LA1: ;
	return result;
}

static N_INLINE(NIM_BOOL, isfloatlit_221367)(Ttype191849* t) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC2;
	result = 0;
	LOC1 = 0;
	LOC2 = 0;
	LOC2 = ((*t).kind == ((NU8) 36));
	if (!(LOC2)) goto LA3;
	LOC2 = !(((*t).n == NIM_NIL));
	LA3: ;
	LOC1 = LOC2;
	if (!(LOC1)) goto LA4;
	LOC1 = ((*(*t).n).kind == ((NU8) 16));
	LA4: ;
	result = LOC1;
	return result;
}

N_NIMCALL(NU8, handlefloatrange_346293)(Ttype191849* f, Ttype191849* a) {
	NU8 result;
	result = 0;
	{
		if (!((*a).kind == (*f).kind)) goto LA3;
		result = ((NU8) 9);
	}
	goto LA1;
	LA3: ;
	{
		Ttype191849* ab;
		NU8 k;
		ab = skiptypes_195167(a, 1048576);
		k = (*ab).kind;
		{
			if (!(k == (*f).kind)) goto LA8;
			result = ((NU8) 4);
		}
		goto LA6;
		LA8: ;
		{
			NIM_BOOL LOC11;
			LOC11 = 0;
			LOC11 = isfloatlit_221367(ab);
			if (!LOC11) goto LA12;
			result = ((NU8) 8);
		}
		goto LA6;
		LA12: ;
		{
			NIM_BOOL LOC15;
			LOC15 = 0;
			LOC15 = isintlit_221327(ab);
			if (!LOC15) goto LA16;
			result = ((NU8) 1);
		}
		goto LA6;
		LA16: ;
		{
			NIM_BOOL LOC19;
			LOC19 = 0;
			LOC19 = (((NU8) 36) <= k);
			if (!(LOC19)) goto LA20;
			LOC19 = (k <= ((NU8) 39));
			LA20: ;
			if (!LOC19) goto LA21;
			{
				if (!((*f).kind == ((NU8) 37))) goto LA25;
				result = ((NU8) 1);
			}
			goto LA23;
			LA25: ;
			{
				result = ((NU8) 2);
			}
			LA23: ;
		}
		goto LA6;
		LA21: ;
		{
			result = ((NU8) 0);
		}
		LA6: ;
	}
	LA1: ;
	return result;
}

static N_INLINE(NU8, allowsnil_346833)(Ttype191849* f) {
	NU8 result;
	result = 0;
	{
		if (!!((((*f).flags &(1<<((((NU8) 16))&31)))!=0))) goto LA3;
		result = ((NU8) 3);
	}
	goto LA1;
	LA3: ;
	{
		result = ((NU8) 0);
	}
	LA1: ;
	return result;
}

N_NIMCALL(NU8, minrel_346648)(NU8 a, NU8 b) {
	NU8 result;
	result = 0;
	{
		if (!(a <= b)) goto LA3;
		result = a;
	}
	goto LA1;
	LA3: ;
	{
		result = b;
	}
	LA1: ;
	return result;
}

N_NIMCALL(NU8, recordrel_346668)(Tcandidate345209* c, Ttype191849* f, Ttype191849* a) {
	NU8 result;
{	result = 0;
	result = ((NU8) 0);
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = sametype_226092(f, a, 0);
		if (!LOC3) goto LA4;
		result = ((NU8) 9);
	}
	goto LA1;
	LA4: ;
	{
		NI LOC7;
		NI LOC8;
		NI firstfield;
		LOC7 = 0;
		LOC7 = sonslen_194351(a);
		LOC8 = 0;
		LOC8 = sonslen_194351(f);
		if (!(LOC7 == LOC8)) goto LA9;
		result = ((NU8) 9);
		{
			if (!((*f).kind == ((NU8) 18))) goto LA13;
			firstfield = ((NI) 0);
		}
		goto LA11;
		LA13: ;
		{
			firstfield = ((NI) 1);
		}
		LA11: ;
		{
			NI i_346697;
			NI HEX3Atmp_346794;
			NI LOC17;
			NI res_346797;
			i_346697 = 0;
			HEX3Atmp_346794 = 0;
			LOC17 = 0;
			LOC17 = sonslen_194351(f);
			HEX3Atmp_346794 = (NI)(LOC17 - ((NI) 1));
			res_346797 = firstfield;
			{
				while (1) {
					NU8 m;
					if (!(res_346797 <= HEX3Atmp_346794)) goto LA19;
					i_346697 = res_346797;
					m = typerel_346064(c, (*f).sons->data[i_346697], (*a).sons->data[i_346697], NIM_TRUE);
					{
						if (!(m < ((NU8) 3))) goto LA22;
						result = ((NU8) 0);
						goto BeforeRet;
					}
					LA22: ;
					result = minrel_346648(result, m);
					res_346797 += ((NI) 1);
				} LA19: ;
			}
		}
		{
			NIM_BOOL LOC26;
			LOC26 = 0;
			LOC26 = !(((*f).n == NIM_NIL));
			if (!(LOC26)) goto LA27;
			LOC26 = !(((*a).n == NIM_NIL));
			LA27: ;
			if (!LOC26) goto LA28;
			{
				NI i_346744;
				NI HEX3Atmp_346802;
				NI LOC31;
				NI res_346805;
				i_346744 = 0;
				HEX3Atmp_346802 = 0;
				LOC31 = 0;
				LOC31 = sonslen_194403((*f).n);
				HEX3Atmp_346802 = (NI)(LOC31 - ((NI) 1));
				res_346805 = ((NI) 0);
				{
					while (1) {
						if (!(res_346805 <= HEX3Atmp_346802)) goto LA33;
						i_346744 = res_346805;
						{
							if (!!(((*(*(*f).n).kindU.S6.sons->data[i_346744]).kind == ((NU8) 3)))) goto LA36;
							internalerror_166199((*(*f).n).info, ((NimStringDesc*) &TMP2645));
						}
						goto LA34;
						LA36: ;
						{
							if (!!(((*(*(*a).n).kindU.S6.sons->data[i_346744]).kind == ((NU8) 3)))) goto LA39;
							internalerror_166199((*(*a).n).info, ((NimStringDesc*) &TMP2645));
						}
						goto LA34;
						LA39: ;
						{
							Tsym191843* x;
							Tsym191843* y;
							x = (*(*(*f).n).kindU.S6.sons->data[i_346744]).kindU.S4.sym;
							y = (*(*(*a).n).kindU.S6.sons->data[i_346744]).kindU.S4.sym;
							{
								NIM_BOOL LOC44;
								NU8 LOC46;
								LOC44 = 0;
								LOC44 = ((*f).kind == ((NU8) 17));
								if (!(LOC44)) goto LA45;
								LOC46 = 0;
								LOC46 = typerel_346064(c, (*x).typ, (*y).typ, NIM_TRUE);
								LOC44 = (LOC46 < ((NU8) 3));
								LA45: ;
								if (!LOC44) goto LA47;
								result = ((NU8) 0);
								goto BeforeRet;
							}
							LA47: ;
							{
								if (!!(((*(*x).name).Sup.id == (*(*y).name).Sup.id))) goto LA51;
								result = ((NU8) 0);
								goto BeforeRet;
							}
							LA51: ;
						}
						LA34: ;
						res_346805 += ((NI) 1);
					} LA33: ;
				}
			}
		}
		LA28: ;
	}
	goto LA1;
	LA9: ;
	LA1: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NI, isobjectsubtype_346352)(Ttype191849* a, Ttype191849* f) {
	NI result;
	Ttype191849* t;
	NI depth;
	result = 0;
	t = a;
	depth = ((NI) 0);
	{
		while (1) {
			NIM_BOOL LOC3;
			NIM_BOOL LOC5;
			LOC3 = 0;
			LOC3 = !((t == NIM_NIL));
			if (!(LOC3)) goto LA4;
			LOC5 = 0;
			LOC5 = sameobjecttypes_226785(f, t);
			LOC3 = !(LOC5);
			LA4: ;
			if (!LOC3) goto LA2;
			t = (*t).sons->data[((NI) 0)];
			{
				if (!(t == NIM_NIL)) goto LA8;
				goto LA1;
			}
			LA8: ;
			t = skiptypes_195167(t, 2048);
			depth += ((NI) 1);
		} LA2: ;
	} LA1: ;
	{
		if (!!((t == NIM_NIL))) goto LA12;
		result = depth;
	}
	LA12: ;
	return result;
}

static N_INLINE(NIM_BOOL, samedistincttypes_226844)(Ttype191849* a, Ttype191849* b) {
	NIM_BOOL result;
	result = 0;
	result = sameobjecttypes_226785(a, b);
	return result;
}

static N_INLINE(NIM_BOOL, inconsistentvartypes_346853)(Ttype191849* f, Ttype191849* a) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC3;
	result = 0;
	LOC1 = 0;
	LOC1 = !(((*f).kind == (*a).kind));
	if (!(LOC1)) goto LA2;
	LOC3 = 0;
	LOC3 = ((*f).kind == ((NU8) 23));
	if (LOC3) goto LA4;
	LOC3 = ((*a).kind == ((NU8) 23));
	LA4: ;
	LOC1 = LOC3;
	LA2: ;
	result = LOC1;
	return result;
}

N_NIMCALL(NU8, procparamtyperel_346891)(Tcandidate345209* c, Ttype191849* f_346895, Ttype191849* a) {
	NU8 result;
	Ttype191849* f;
{	result = 0;
	f = f_346895;
	{
		NIM_BOOL LOC3;
		NU8 reverserel;
		LOC3 = 0;
		LOC3 = ismetatype_192821(a);
		if (!LOC3) goto LA4;
		{
			NIM_BOOL LOC8;
			LOC8 = 0;
			LOC8 = ismetatype_192821(f);
			if (!LOC8) goto LA9;
			f = generatetypeinstance_268631((*c).c, (*c).bindings, (*(*c).call).info, f);
			{
				NIM_BOOL LOC13;
				LOC13 = 0;
				LOC13 = (f == NIM_NIL);
				if (LOC13) goto LA14;
				LOC13 = ismetatype_192821(f);
				LA14: ;
				if (!LOC13) goto LA15;
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA15: ;
		}
		LA9: ;
		reverserel = typerel_346064(c, a, f, NIM_TRUE);
		{
			if (!(((NU8) 7) <= reverserel)) goto LA19;
			result = ((NU8) 5);
		}
		LA19: ;
	}
	goto LA1;
	LA4: ;
	{
		result = typerel_346064(c, f, a, NIM_TRUE);
	}
	LA1: ;
	{
		NIM_BOOL LOC24;
		LOC24 = 0;
		LOC24 = (result <= ((NU8) 3));
		if (LOC24) goto LA25;
		LOC24 = inconsistentvartypes_346853(f, a);
		LA25: ;
		if (!LOC24) goto LA26;
		result = ((NU8) 0);
	}
	LA26: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NU8, proctyperel_346936)(Tcandidate345209* c, Ttype191849* f, Ttype191849* a) {
	NU8 result;
{	result = 0;
	switch ((*a).kind) {
	case ((NU8) 25):
	{
		{
			NI LOC4;
			NI LOC5;
			LOC4 = 0;
			LOC4 = sonslen_194351(f);
			LOC5 = 0;
			LOC5 = sonslen_194351(a);
			if (!!((LOC4 == LOC5))) goto LA6;
			goto BeforeRet;
		}
		LA6: ;
		result = ((NU8) 9);
		{
			NI i_346968;
			NI HEX3Atmp_347212;
			NI LOC9;
			NI res_347215;
			i_346968 = 0;
			HEX3Atmp_347212 = 0;
			LOC9 = 0;
			LOC9 = sonslen_194351(f);
			HEX3Atmp_347212 = (LOC9 - 1);
			res_347215 = ((NI) 1);
			{
				while (1) {
					NU8 LOC12;
					if (!(res_347215 <= HEX3Atmp_347212)) goto LA11;
					i_346968 = res_347215;
					LOC12 = 0;
					LOC12 = procparamtyperel_346891(c, (*f).sons->data[i_346968], (*a).sons->data[i_346968]);
					result = minrel_346648(result, LOC12);
					{
						if (!(result == ((NU8) 0))) goto LA15;
						goto BeforeRet;
					}
					LA15: ;
					res_347215 += ((NI) 1);
				} LA11: ;
			}
		}
		{
			if (!!(((*f).sons->data[((NI) 0)] == NIM_NIL))) goto LA19;
			{
				NU8 LOC25;
				if (!!(((*a).sons->data[((NI) 0)] == NIM_NIL))) goto LA23;
				LOC25 = 0;
				LOC25 = procparamtyperel_346891(c, (*f).sons->data[((NI) 0)], (*a).sons->data[((NI) 0)]);
				result = minrel_346648(result, LOC25);
				{
					if (!(result == ((NU8) 0))) goto LA28;
					goto BeforeRet;
				}
				LA28: ;
			}
			goto LA21;
			LA23: ;
			{
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA21: ;
		}
		goto LA17;
		LA19: ;
		{
			if (!!(((*a).sons->data[((NI) 0)] == NIM_NIL))) goto LA32;
			result = ((NU8) 0);
			goto BeforeRet;
		}
		goto LA17;
		LA32: ;
		LA17: ;
		{
			NIM_BOOL LOC36;
			LOC36 = 0;
			LOC36 = (((*f).flags &(1<<((((NU8) 1))&31)))!=0);
			if (!(LOC36)) goto LA37;
			LOC36 = !((((*a).flags &(1<<((((NU8) 1))&31)))!=0));
			LA37: ;
			if (!LOC36) goto LA38;
			result = ((NU8) 0);
			goto BeforeRet;
		}
		goto LA34;
		LA38: ;
		{
			NIM_BOOL LOC41;
			NIM_BOOL LOC42;
			LOC41 = 0;
			LOC42 = 0;
			LOC42 = (((*f).flags &(1<<((((NU8) 7))&31)))!=0);
			if (!(LOC42)) goto LA43;
			LOC42 = (((*a).flags & 130) == 0);
			LA43: ;
			LOC41 = LOC42;
			if (!(LOC41)) goto LA44;
			LOC41 = ((gglobaloptions_155128 &(1<<((((NU8) 23))&31)))!=0);
			LA44: ;
			if (!LOC41) goto LA45;
			result = ((NU8) 0);
			goto BeforeRet;
		}
		goto LA34;
		LA45: ;
		{
			if (!!((((*f).flags & 16384) == ((*a).flags & 16384)))) goto LA48;
			result = ((NU8) 0);
			goto BeforeRet;
		}
		goto LA34;
		LA48: ;
		{
			if (!!(((*f).callconv == (*a).callconv))) goto LA51;
			{
				NIM_BOOL LOC55;
				LOC55 = 0;
				LOC55 = ((*f).callconv == ((NU8) 8));
				if (!(LOC55)) goto LA56;
				LOC55 = ((*a).callconv == ((NU8) 0));
				LA56: ;
				if (!LOC55) goto LA57;
				{
					if (!!((result == ((NU8) 5)))) goto LA61;
					result = ((NU8) 1);
				}
				goto LA59;
				LA61: ;
				{
					result = ((NU8) 6);
				}
				LA59: ;
			}
			goto LA53;
			LA57: ;
			{
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA53: ;
		}
		goto LA34;
		LA51: ;
		LA34: ;
		{
			NIM_BOOL LOC67;
			LOC67 = 0;
			LOC67 = compatibleeffects_230489(f, a);
			if (!!(LOC67)) goto LA68;
			result = ((NU8) 0);
			goto BeforeRet;
		}
		LA68: ;
	}
	break;
	case ((NU8) 5):
	{
		result = allowsnil_346833(f);
	}
	break;
	case ((NU8) 49):
	{
		{
			Ttype191849* LOC76;
			Ttype191849* LOC77;
			if (!(((*f).flags &(1<<((((NU8) 14))&31)))!=0)) goto LA74;
			LOC76 = 0;
			LOC76 = base_221039(f);
			LOC77 = 0;
			LOC77 = base_221039(a);
			result = typerel_346064(c, LOC76, LOC77, NIM_TRUE);
		}
		LA74: ;
	}
	break;
	default:
	{
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Ttype191849*, concretetype_346074)(Tcandidate345209* c, Ttype191849* t) {
	Ttype191849* result;
	result = 0;
	switch ((*t).kind) {
	case ((NU8) 4):
	{
		result = newtype_194140(((NU8) 16), (*t).owner);
		addsonskipintlit_239729(result, (*t).sons->data[((NI) 0)]);
		addsonskipintlit_239729(result, (*t).sons->data[((NI) 1)]);
	}
	break;
	case ((NU8) 5):
	{
		result = NIM_NIL;
	}
	break;
	case ((NU8) 24):
	case ((NU8) 19):
	{
		{
			if (!((*(*t).sons->data[((NI) 0)]).kind == ((NU8) 3))) goto LA6;
			result = NIM_NIL;
		}
		goto LA4;
		LA6: ;
		{
			result = t;
		}
		LA4: ;
	}
	break;
	case ((NU8) 12):
	case ((NU8) 58):
	{
		result = t;
		{
			while (1) {
				Tidobj168015* LOC12;
				TNimObject* LOC13;
				LOC12 = 0;
				LOC12 = &t->Sup;
				LOC13 = 0;
				LOC13 = idtableget_199182((*c).bindings, LOC12);
				result = ((Ttype191849*) (LOC13));
				{
					if (!(result == NIM_NIL)) goto LA16;
					goto LA10;
				}
				LA16: ;
				{
					if (!!(((*result).kind == ((NU8) 12)))) goto LA20;
					goto LA10;
				}
				LA20: ;
			}
		} LA10: ;
	}
	break;
	case ((NU8) 9):
	{
		NimStringDesc* LOC23;
		NimStringDesc* LOC24;
		LOC23 = 0;
		LOC24 = 0;
		LOC24 = typetostring_221032(t, ((NU8) 0));
		LOC23 = rawNewString(LOC24->Sup.len + 21);
appendString(LOC23, ((NimStringDesc*) &TMP2649));
appendString(LOC23, LOC24);
		internalerror_166218(LOC23);
		result = t;
	}
	break;
	default:
	{
		result = t;
	}
	break;
	}
	return result;
}

N_NIMCALL(NU8, matchusertypeclass_347249)(Tcontext245023* c, Tcandidate345209* m, Ttype191849* ff, Ttype191849* a) {
	NU8 volatile result;
	Ttype191849* body;
	Tscope191837* LOC1;
	TSafePoint TMP2650;
{	result = 0;
	body = skiptypes_195167(ff, IL64(9007199254740992));
	LOC1 = 0;
	LOC1 = openscope_250091(c);
	(*c).intypeclass += ((NI) 1);
	pushSafePoint(&TMP2650);
	TMP2650.status = setjmp(TMP2650.context);
	if (TMP2650.status == 0) {
		Tnode191813* checkedbody;
		Tnode191813* LOC35;
		Tnode191813* LOC36;
		{
			if (!((*ff).kind == ((NU8) 53))) goto LA5;
			{
				NI i_347295;
				NI HEX3Atmp_347377;
				NI LOC8;
				NI res_347380;
				i_347295 = 0;
				HEX3Atmp_347377 = 0;
				LOC8 = 0;
				LOC8 = len_194377(ff);
				HEX3Atmp_347377 = ((NI)(LOC8 - ((NI) 1)) - 1);
				res_347380 = ((NI) 1);
				{
					while (1) {
						Tident168021* typeparamname;
						Ttype191849* LOC11;
						Ttype191849* typ;
						Tsym191843* volatile param;
						if (!(res_347380 <= HEX3Atmp_347377)) goto LA10;
						i_347295 = res_347380;
						LOC11 = 0;
						LOC11 = base_221039(ff);
						typeparamname = (*(*(*LOC11).sons->data[(NI)(i_347295 - ((NI) 1))]).sym).name;
						typ = (*ff).sons->data[i_347295];
						param = 0;
						switch ((*typ).kind) {
						case ((NU8) 59):
						{
							param = newsym_192656(((NU8) 10), typeparamname, (*body).sym, (*(*body).sym).info);
							asgnRefNoCycle((void**) (&(*param).typ), base_221039(typ));
							asgnRefNoCycle((void**) (&(*param).ast), (*typ).n);
						}
						break;
						case ((NU8) 60):
						{
							param = newsym_192656(((NU8) 8), typeparamname, (*body).sym, (*(*body).sym).info);
							asgnRefNoCycle((void**) (&(*param).typ), typ);
						}
						break;
						default:
						{
							param = newsym_192656(((NU8) 7), typeparamname, (*body).sym, (*(*body).sym).info);
							asgnRefNoCycle((void**) (&(*param).typ), maketypedesc_245682(c, typ));
						}
						break;
						}
						adddecl_250607(c, param);
						res_347380 += ((NI) 1);
					} LA10: ;
				}
			}
		}
		LA5: ;
		{
			Tnode191813* param_347311;
			Tnode191813* HEX3Atmp_347387;
			param_347311 = 0;
			HEX3Atmp_347387 = 0;
			HEX3Atmp_347387 = HEX5BHEX5D_192244((*body).n, ((NI) 0));
			{
				NI i_347391;
				NI HEX3Atmp_347393;
				NI LOC17;
				NI res_347395;
				i_347391 = 0;
				HEX3Atmp_347393 = 0;
				LOC17 = 0;
				LOC17 = len_192097(HEX3Atmp_347387);
				HEX3Atmp_347393 = (LOC17 - 1);
				res_347395 = ((NI) 0);
				{
					while (1) {
						Tnode191813* volatile dummyname;
						Ttype191849* volatile dummytype;
						Tsym191843* dummyparam;
						if (!(res_347395 <= HEX3Atmp_347393)) goto LA19;
						i_347391 = res_347395;
						param_347311 = (*HEX3Atmp_347387).kindU.S6.sons->data[i_347391];
						dummyname = 0;
						dummytype = 0;
						{
							if (!((*param_347311).kind == ((NU8) 143))) goto LA22;
							dummyname = HEX5BHEX5D_192244(param_347311, ((NI) 0));
							{
								if (!!(((*a).kind == ((NU8) 23)))) goto LA26;
								dummytype = makevartype_245643(c, a);
							}
							goto LA24;
							LA26: ;
							{
								dummytype = a;
							}
							LA24: ;
						}
						goto LA20;
						LA22: ;
						{
							dummyname = param_347311;
							dummytype = a;
						}
						LA20: ;
						{
							NimStringDesc* LOC34;
							if (!!(((*dummyname).kind == ((NU8) 2)))) goto LA32;
							LOC34 = 0;
							LOC34 = HEX24_166306(TMP2652);
							internalerror_166218(LOC34);
						}
						LA32: ;
						dummyparam = newsym_192656(((NU8) 8), (*dummyname).kindU.S5.ident, (*body).sym, (*(*body).sym).info);
						asgnRefNoCycle((void**) (&(*dummyparam).typ), dummytype);
						adddecl_250607(c, dummyparam);
						res_347395 += ((NI) 1);
					} LA19: ;
				}
			}
		}
		LOC35 = 0;
		LOC35 = HEX5BHEX5D_192244((*body).n, ((NI) 3));
		LOC36 = 0;
		LOC36 = copytree_196028(LOC35);
		checkedbody = (*c).semtryexpr(c, LOC36, 0);
		{
			if (!(checkedbody == NIM_NIL)) goto LA39;
			result = ((NU8) 0);
			popSafePoint();
			(*c).intypeclass -= ((NI) 1);
			closescope_250111(c);
			goto BeforeRet;
		}
		LA39: ;
		result = ((NU8) 7);
		popSafePoint();
		(*c).intypeclass -= ((NI) 1);
		closescope_250111(c);
		goto BeforeRet;
		popSafePoint();
	}
	else {
		popSafePoint();
	}
	{
		(*c).intypeclass -= ((NI) 1);
		closescope_250111(c);
	}
	if (TMP2650.status != 0) reraiseException();
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NU8, typerel_346064)(Tcandidate345209* c, Ttype191849* f, Ttype191849* aorig, NIM_BOOL dobind) {
	NU8 result;
	Ttype191849* a;
	Ttype191849* LOC9;
{	result = 0;
	result = ((NU8) 0);
	{
		if (!((*f).kind == ((NU8) 6))) goto LA3;
		{
			if (!!((aorig == NIM_NIL))) goto LA7;
			put_345289((&(*c).bindings), f, aorig);
		}
		LA7: ;
		result = ((NU8) 7);
		goto BeforeRet;
	}
	LA3: ;
	LOC9 = 0;
	LOC9 = skiptypes_195167(aorig, IL64(576460752311812096));
	a = maybeskipdistinct_347517(LOC9, (*c).calleesym);
	{
		NIM_BOOL LOC12;
		Ttype191849* LOC14;
		Ttype191849* LOC17;
		LOC12 = 0;
		LOC12 = ((*a).kind == ((NU8) 11));
		if (!(LOC12)) goto LA13;
		LOC14 = 0;
		LOC14 = skiptypes_195167(f, 8388608);
		LOC12 = !(((*LOC14).kind >= ((NU8) 9) && (*LOC14).kind <= ((NU8) 12) || (*LOC14).kind >= ((NU8) 51) && (*LOC14).kind <= ((NU8) 58)));
		LA13: ;
		if (!LOC12) goto LA15;
		LOC17 = 0;
		LOC17 = lastson_194442(a);
		result = typerel_346064(c, f, LOC17, NIM_TRUE);
		goto BeforeRet;
	}
	LA15: ;
	switch ((*a).kind) {
	case ((NU8) 56):
	{
		result = ((NU8) 7);
		{
			Ttype191849* branch_347859;
			Ttypeseq191845* HEX3Atmp_349532;
			NI i_349535;
			NI L_349537;
			branch_347859 = 0;
			HEX3Atmp_349532 = 0;
			HEX3Atmp_349532 = (*a).sons;
			i_349535 = ((NI) 0);
			L_349537 = (HEX3Atmp_349532 ? HEX3Atmp_349532->Sup.len : 0);
			{
				while (1) {
					NU8 x;
					if (!(i_349535 < L_349537)) goto LA21;
					branch_347859 = HEX3Atmp_349532->data[i_349535];
					x = typerel_346064(c, f, branch_347859, NIM_FALSE);
					{
						if (!(x == ((NU8) 0))) goto LA24;
						result = ((NU8) 0);
						goto BeforeRet;
					}
					LA24: ;
					{
						if (!(x < result)) goto LA28;
						result = x;
					}
					LA28: ;
					i_349535 += ((NI) 1);
				} LA21: ;
			}
		}
	}
	break;
	case ((NU8) 55):
	{
		{
			Ttype191849* branch_347888;
			Ttypeseq191845* HEX3Atmp_349539;
			NI i_349542;
			NI L_349544;
			branch_347888 = 0;
			HEX3Atmp_349539 = 0;
			HEX3Atmp_349539 = (*a).sons;
			i_349542 = ((NI) 0);
			L_349544 = (HEX3Atmp_349539 ? HEX3Atmp_349539->Sup.len : 0);
			{
				while (1) {
					NU8 x;
					if (!(i_349542 < L_349544)) goto LA33;
					branch_347888 = HEX3Atmp_349539->data[i_349542];
					x = typerel_346064(c, f, branch_347888, NIM_FALSE);
					{
						if (!!((x == ((NU8) 0)))) goto LA36;
						{
							if (!(((NU8) 7) <= x)) goto LA40;
							result = ((NU8) 7);
						}
						goto LA38;
						LA40: ;
						{
							result = x;
						}
						LA38: ;
						goto BeforeRet;
					}
					LA36: ;
					i_349542 += ((NI) 1);
				} LA33: ;
			}
		}
		result = ((NU8) 0);
	}
	break;
	case ((NU8) 57):
	{
		switch ((*f).kind) {
		case ((NU8) 57):
		{
			Ttype191849* LOC45;
			Ttype191849* LOC46;
			LOC45 = 0;
			LOC45 = lastson_194442(a);
			LOC46 = 0;
			LOC46 = lastson_194442(f);
			result = typerel_346064(c, LOC45, LOC46, NIM_TRUE);
			goto BeforeRet;
		}
		break;
		default:
		{
			{
				if (!((*f).kind == ((NU8) 58))) goto LA50;
				result = ((NU8) 7);
			}
			goto LA48;
			LA50: ;
			{
				result = ((NU8) 0);
			}
			LA48: ;
			goto BeforeRet;
		}
		break;
		}
	}
	break;
	case ((NU8) 58):
	{
		{
			if (!((*f).kind == ((NU8) 58))) goto LA56;
			result = ((NU8) 7);
		}
		goto LA54;
		LA56: ;
		{
			result = ((NU8) 0);
		}
		LA54: ;
		goto BeforeRet;
	}
	break;
	default:
	{
	}
	break;
	}
	switch ((*f).kind) {
	case ((NU8) 14):
	{
		{
			NIM_BOOL LOC63;
			LOC63 = 0;
			LOC63 = ((*a).kind == (*f).kind);
			if (!(LOC63)) goto LA64;
			LOC63 = sameenumtypes_226855(f, a);
			LA64: ;
			if (!LOC63) goto LA65;
			result = ((NU8) 9);
		}
		goto LA61;
		LA65: ;
		{
			Ttype191849* LOC68;
			NIM_BOOL LOC69;
			LOC68 = 0;
			LOC68 = skiptypes_195167(a, 1048576);
			LOC69 = 0;
			LOC69 = sameenumtypes_226855(f, LOC68);
			if (!LOC69) goto LA70;
			result = ((NU8) 3);
		}
		goto LA61;
		LA70: ;
		LA61: ;
	}
	break;
	case ((NU8) 1):
	case ((NU8) 2):
	{
		{
			if (!((*a).kind == (*f).kind)) goto LA75;
			result = ((NU8) 9);
		}
		goto LA73;
		LA75: ;
		{
			Ttype191849* LOC78;
			LOC78 = 0;
			LOC78 = skiptypes_195167(a, 1048576);
			if (!((*LOC78).kind == (*f).kind)) goto LA79;
			result = ((NU8) 3);
		}
		goto LA73;
		LA79: ;
		LA73: ;
	}
	break;
	case ((NU8) 20):
	{
		{
			Ttype191849* LOC91;
			Ttype191849* LOC92;
			if (!((*a).kind == (*f).kind)) goto LA84;
			{
				Ttype191849* LOC88;
				LOC88 = 0;
				LOC88 = base_221039(f);
				if (!((*LOC88).kind == ((NU8) 0))) goto LA89;
				result = ((NU8) 7);
				goto BeforeRet;
			}
			LA89: ;
			LOC91 = 0;
			LOC91 = base_221039(f);
			LOC92 = 0;
			LOC92 = base_221039(a);
			result = typerel_346064(c, LOC91, LOC92, NIM_TRUE);
			{
				if (!!(((129 &(1<<((result)&15)))!=0))) goto LA95;
				{
					NI i_347994;
					NI res_349548;
					i_347994 = 0;
					res_349548 = ((NI) 0);
					{
						while (1) {
							if (!(res_349548 <= ((NI) 1))) goto LA99;
							i_347994 = res_349548;
							{
								Tnode191813* LOC102;
								Tnode191813* LOC105;
								LOC102 = 0;
								LOC102 = HEX5BHEX5D_192244((*f).n, i_347994);
								if (!((*LOC102).kind == ((NU8) 62))) goto LA103;
								LOC105 = 0;
								LOC105 = HEX5BHEX5D_192244((*f).n, i_347994);
								asgnRefNoCycle((void**) (&(*(*f).n).kindU.S6.sons->data[i_347994]), tryresolvingstaticexpr_347562(c, LOC105));
							}
							LA103: ;
							res_349548 += ((NI) 1);
						} LA99: ;
					}
				}
				result = typerangerel_347234(f, a);
			}
			LA95: ;
		}
		goto LA82;
		LA84: ;
		{
			{
				Ttype191849* LOC109;
				LOC109 = 0;
				LOC109 = skiptypes_195167(f, 1048576);
				if (!((*LOC109).kind == (*a).kind)) goto LA110;
				result = ((NU8) 2);
			}
			goto LA107;
			LA110: ;
			{
				Ttype191849* LOC113;
				NIM_BOOL LOC114;
				LOC113 = 0;
				LOC113 = skiptypes_195167(f, 1048576);
				LOC114 = 0;
				LOC114 = isconvertibletorange_346238(LOC113, a);
				if (!LOC114) goto LA115;
				result = ((NU8) 1);
			}
			goto LA107;
			LA115: ;
			LA107: ;
		}
		LA82: ;
	}
	break;
	case ((NU8) 31):
	{
		result = handlerange_346122(f, a, ((NU8) 32), ((NU8) 34));
	}
	break;
	case ((NU8) 32):
	{
		result = handlerange_346122(f, a, ((NU8) 32), ((NU8) 32));
	}
	break;
	case ((NU8) 33):
	{
		result = handlerange_346122(f, a, ((NU8) 32), ((NU8) 33));
	}
	break;
	case ((NU8) 34):
	{
		result = handlerange_346122(f, a, ((NU8) 32), ((NU8) 34));
	}
	break;
	case ((NU8) 35):
	{
		result = handlerange_346122(f, a, ((NU8) 31), ((NU8) 35));
	}
	break;
	case ((NU8) 40):
	{
		result = handlerange_346122(f, a, ((NU8) 41), ((NU8) 43));
	}
	break;
	case ((NU8) 41):
	{
		result = handlerange_346122(f, a, ((NU8) 41), ((NU8) 41));
	}
	break;
	case ((NU8) 42):
	{
		result = handlerange_346122(f, a, ((NU8) 41), ((NU8) 42));
	}
	break;
	case ((NU8) 43):
	{
		result = handlerange_346122(f, a, ((NU8) 41), ((NU8) 43));
	}
	break;
	case ((NU8) 44):
	{
		result = handlerange_346122(f, a, ((NU8) 40), ((NU8) 44));
	}
	break;
	case ((NU8) 36):
	{
		result = handlefloatrange_346293(f, a);
	}
	break;
	case ((NU8) 37):
	{
		result = handlefloatrange_346293(f, a);
	}
	break;
	case ((NU8) 38):
	{
		result = handlefloatrange_346293(f, a);
	}
	break;
	case ((NU8) 39):
	{
		result = handlefloatrange_346293(f, a);
	}
	break;
	case ((NU8) 23):
	{
		{
			Ttype191849* LOC136;
			Ttype191849* LOC137;
			if (!((*aorig).kind == ((NU8) 23))) goto LA134;
			LOC136 = 0;
			LOC136 = base_221039(f);
			LOC137 = 0;
			LOC137 = base_221039(aorig);
			result = typerel_346064(c, LOC136, LOC137, NIM_TRUE);
		}
		goto LA132;
		LA134: ;
		{
			Ttype191849* LOC139;
			LOC139 = 0;
			LOC139 = base_221039(f);
			result = typerel_346064(c, LOC139, aorig, NIM_TRUE);
		}
		LA132: ;
	}
	break;
	case ((NU8) 16):
	case ((NU8) 4):
	{
		switch ((*a).kind) {
		case ((NU8) 16):
		case ((NU8) 4):
		{
			Ttype191849* frange;
			frange = (*f).sons->data[((NI) 0)];
			{
				Ttype191849* prev;
				Tidobj168015* LOC146;
				TNimObject* LOC147;
				if (!((*frange).kind == ((NU8) 12))) goto LA144;
				LOC146 = 0;
				LOC146 = &frange->Sup;
				LOC147 = 0;
				LOC147 = idtableget_199182((*c).bindings, LOC146);
				prev = ((Ttype191849*) (LOC147));
				{
					if (!(prev == NIM_NIL)) goto LA150;
					put_345289((&(*c).bindings), frange, (*a).sons->data[((NI) 0)]);
					frange = a;
				}
				goto LA148;
				LA150: ;
				{
					frange = prev;
				}
				LA148: ;
			}
			LA144: ;
			result = typerel_346064(c, (*f).sons->data[((NI) 1)], (*a).sons->data[((NI) 1)], NIM_TRUE);
			{
				if (!(result < ((NU8) 7))) goto LA155;
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA155: ;
			{
				NIM_BOOL LOC159;
				NIM_BOOL LOC160;
				NI LOC162;
				Tnode191813* LOC164;
				Tnode191813* len;
				Tnode191813* LOC177;
				LOC159 = 0;
				LOC160 = 0;
				LOC160 = !(((*frange).n == NIM_NIL));
				if (!(LOC160)) goto LA161;
				LOC162 = 0;
				LOC162 = len_192097((*frange).n);
				LOC160 = (((NI) 1) < LOC162);
				LA161: ;
				LOC159 = LOC160;
				if (!(LOC159)) goto LA163;
				LOC164 = 0;
				LOC164 = HEX5BHEX5D_192244((*frange).n, ((NI) 1));
				LOC159 = ((*LOC164).kind == ((NU8) 62));
				LA163: ;
				if (!LOC159) goto LA165;
				{
					Ttype191849* rangestatict;
					Tnode191813* LOC171;
					Tnode191813* LOC172;
					Tnode191813* LOC173;
					Ttype191849* replacementt;
					Ttypeseq191845* LOC174;
					TY350187 LOC175;
					NI64 inputupperbound;
					Tnode191813* LOC176;
					if (!(((*frange).flags &(1<<((((NU8) 9))&31)))!=0)) goto LA169;
					LOC171 = 0;
					LOC171 = HEX5BHEX5D_192244((*frange).n, ((NI) 1));
					LOC172 = 0;
					LOC172 = HEX5BHEX5D_192244(LOC171, ((NI) 0));
					LOC173 = 0;
					LOC173 = HEX5BHEX5D_192244(LOC172, ((NI) 1));
					rangestatict = (*LOC173).typ;
					LOC174 = 0;
					LOC174 = (Ttypeseq191845*) newSeq((&NTI191845), 1);
					memset((void*)LOC175, 0, sizeof(LOC175));
					LOC175[0] = getsystype_239030(((NU8) 31));
					asgnRefNoCycle((void**) (&LOC174->data[0]), LOC175[0]);
					replacementt = newtypewithsons_245807((*c).c, ((NU8) 59), LOC174);
					LOC176 = 0;
					LOC176 = HEX5BHEX5D_192244((*(*a).sons->data[((NI) 0)]).n, ((NI) 1));
					inputupperbound = (*LOC176).kindU.S1.intval;
					asgnRefNoCycle((void**) (&(*replacementt).n), newintnode_192608(((NU8) 6), (NI64)(inputupperbound + IL64(1))));
					put_345289((&(*c).bindings), rangestatict, replacementt);
					result = ((NU8) 7);
					goto BeforeRet;
				}
				LA169: ;
				LOC177 = 0;
				LOC177 = HEX5BHEX5D_192244((*frange).n, ((NI) 1));
				len = tryresolvingstaticexpr_347562(c, LOC177);
				{
					NIM_BOOL LOC180;
					NI64 LOC182;
					LOC180 = 0;
					LOC180 = ((*len).kind == ((NU8) 6));
					if (!(LOC180)) goto LA181;
					LOC182 = 0;
					LOC182 = lengthord_221016(a);
					LOC180 = ((NI64)((*len).kindU.S1.intval + IL64(1)) == LOC182);
					LA181: ;
					if (!LOC180) goto LA183;
					goto BeforeRet;
				}
				goto LA178;
				LA183: ;
				{
					result = ((NU8) 0);
					goto BeforeRet;
				}
				LA178: ;
			}
			goto LA157;
			LA165: ;
			{
				NI64 LOC187;
				NI64 LOC188;
				LOC187 = 0;
				LOC187 = lengthord_221016(frange);
				LOC188 = 0;
				LOC188 = lengthord_221016(a);
				if (!!((LOC187 == LOC188))) goto LA189;
				result = ((NU8) 0);
			}
			goto LA157;
			LA189: ;
			LA157: ;
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((NU8) 27):
	case ((NU8) 48):
	{
		{
			NIM_BOOL LOC195;
			LOC195 = 0;
			LOC195 = ((*f).kind == ((NU8) 48));
			if (!(LOC195)) goto LA196;
			LOC195 = ((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 6));
			LA196: ;
			if (!LOC195) goto LA197;
			goto BeforeRet;
		}
		LA197: ;
		switch ((*a).kind) {
		case ((NU8) 27):
		case ((NU8) 48):
		{
			Ttype191849* LOC200;
			Ttype191849* LOC201;
			LOC200 = 0;
			LOC200 = base_221039(f);
			LOC201 = 0;
			LOC201 = base_221039(a);
			result = typerel_346064(c, LOC200, LOC201, NIM_TRUE);
			{
				if (!(result < ((NU8) 7))) goto LA204;
				result = ((NU8) 0);
			}
			LA204: ;
		}
		break;
		case ((NU8) 4):
		{
			{
				NIM_BOOL LOC209;
				LOC209 = 0;
				LOC209 = !(((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 12)));
				if (!(LOC209)) goto LA210;
				LOC209 = ((*(*a).sons->data[((NI) 1)]).kind == ((NU8) 3));
				LA210: ;
				if (!LOC209) goto LA211;
				result = ((NU8) 3);
			}
			goto LA207;
			LA211: ;
			{
				Ttype191849* LOC214;
				NU8 LOC215;
				LOC214 = 0;
				LOC214 = base_221039(f);
				LOC215 = 0;
				LOC215 = typerel_346064(c, LOC214, (*a).sons->data[((NI) 1)], NIM_TRUE);
				if (!(((NU8) 7) <= LOC215)) goto LA216;
				result = ((NU8) 3);
			}
			goto LA207;
			LA216: ;
			LA207: ;
		}
		break;
		case ((NU8) 16):
		{
			{
				NIM_BOOL LOC221;
				LOC221 = 0;
				LOC221 = !(((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 12)));
				if (!(LOC221)) goto LA222;
				LOC221 = ((*(*a).sons->data[((NI) 1)]).kind == ((NU8) 3));
				LA222: ;
				if (!LOC221) goto LA223;
				result = ((NU8) 3);
			}
			goto LA219;
			LA223: ;
			{
				Ttype191849* LOC226;
				NU8 LOC227;
				LOC226 = 0;
				LOC226 = base_221039(f);
				LOC227 = 0;
				LOC227 = typerel_346064(c, LOC226, (*a).sons->data[((NI) 1)], NIM_TRUE);
				if (!(((NU8) 7) <= LOC227)) goto LA228;
				result = ((NU8) 1);
			}
			goto LA219;
			LA228: ;
			LA219: ;
		}
		break;
		case ((NU8) 24):
		{
			{
				NIM_BOOL LOC233;
				LOC233 = 0;
				LOC233 = !(((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 12)));
				if (!(LOC233)) goto LA234;
				LOC233 = ((*(*a).sons->data[((NI) 0)]).kind == ((NU8) 3));
				LA234: ;
				if (!LOC233) goto LA235;
				result = ((NU8) 1);
			}
			goto LA231;
			LA235: ;
			{
				Ttype191849* LOC238;
				NU8 LOC239;
				LOC238 = 0;
				LOC238 = base_221039(f);
				LOC239 = 0;
				LOC239 = typerel_346064(c, LOC238, (*a).sons->data[((NI) 0)], NIM_TRUE);
				if (!(((NU8) 7) <= LOC239)) goto LA240;
				result = ((NU8) 1);
			}
			goto LA231;
			LA240: ;
			LA231: ;
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((NU8) 24):
	{
		switch ((*a).kind) {
		case ((NU8) 24):
		{
			{
				NIM_BOOL LOC247;
				LOC247 = 0;
				LOC247 = !(((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 12)));
				if (!(LOC247)) goto LA248;
				LOC247 = ((*(*a).sons->data[((NI) 0)]).kind == ((NU8) 3));
				LA248: ;
				if (!LOC247) goto LA249;
				result = ((NU8) 3);
			}
			goto LA245;
			LA249: ;
			{
				result = typerel_346064(c, (*f).sons->data[((NI) 0)], (*a).sons->data[((NI) 0)], NIM_TRUE);
				{
					if (!(result < ((NU8) 7))) goto LA254;
					result = ((NU8) 0);
				}
				goto LA252;
				LA254: ;
				{
					NIM_BOOL LOC257;
					LOC257 = 0;
					LOC257 = (((*f).flags &(1<<((((NU8) 16))&31)))!=0);
					if (!(LOC257)) goto LA258;
					LOC257 = !((((*a).flags &(1<<((((NU8) 16))&31)))!=0));
					LA258: ;
					if (!LOC257) goto LA259;
					result = ((NU8) 1);
				}
				goto LA252;
				LA259: ;
				LA252: ;
			}
			LA245: ;
		}
		break;
		case ((NU8) 5):
		{
			result = allowsnil_346833(f);
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((NU8) 15):
	{
		{
			NIM_BOOL LOC266;
			Ttype191849* x;
			LOC266 = 0;
			LOC266 = isordinaltype_221093(a);
			if (!LOC266) goto LA267;
			{
				if (!((*a).kind == ((NU8) 15))) goto LA271;
				x = (*a).sons->data[((NI) 0)];
			}
			goto LA269;
			LA271: ;
			{
				x = a;
			}
			LA269: ;
			{
				if (!((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 0))) goto LA276;
				result = ((NU8) 7);
			}
			goto LA274;
			LA276: ;
			{
				result = typerel_346064(c, (*f).sons->data[((NI) 0)], x, NIM_TRUE);
				{
					if (!(result < ((NU8) 7))) goto LA281;
					result = ((NU8) 0);
				}
				LA281: ;
			}
			LA274: ;
		}
		goto LA264;
		LA267: ;
		{
			if (!((*a).kind == ((NU8) 12))) goto LA284;
			result = ((NU8) 7);
		}
		goto LA264;
		LA284: ;
		LA264: ;
	}
	break;
	case ((NU8) 30):
	{
		internalerror_166218(((NimStringDesc*) &TMP2644));
	}
	break;
	case ((NU8) 5):
	{
		{
			if (!((*a).kind == (*f).kind)) goto LA290;
			result = ((NU8) 9);
		}
		LA290: ;
	}
	break;
	case ((NU8) 18):
	{
		{
			if (!((*a).kind == ((NU8) 18))) goto LA295;
			result = recordrel_346668(c, f, a);
		}
		LA295: ;
	}
	break;
	case ((NU8) 17):
	{
		{
			if (!((*a).kind == ((NU8) 17))) goto LA300;
			{
				NIM_BOOL LOC304;
				LOC304 = 0;
				LOC304 = sameobjecttypes_226785(f, a);
				if (!LOC304) goto LA305;
				result = ((NU8) 9);
			}
			goto LA302;
			LA305: ;
			{
				NI depth;
				depth = isobjectsubtype_346352(a, f);
				{
					if (!(((NI) 0) < depth)) goto LA310;
					(*c).inheritancepenalty += depth;
					result = ((NU8) 3);
				}
				LA310: ;
			}
			LA302: ;
		}
		LA300: ;
	}
	break;
	case ((NU8) 13):
	{
		{
			NIM_BOOL LOC315;
			LOC315 = 0;
			LOC315 = ((*a).kind == ((NU8) 13));
			if (!(LOC315)) goto LA316;
			LOC315 = samedistincttypes_226844(f, a);
			LA316: ;
			if (!LOC315) goto LA317;
			result = ((NU8) 9);
		}
		goto LA313;
		LA317: ;
		{
			Ttype191849* LOC322;
			if (!(*c).coercedistincts) goto LA320;
			LOC322 = 0;
			LOC322 = base_221039(f);
			result = typerel_346064(c, LOC322, a, NIM_TRUE);
		}
		goto LA313;
		LA320: ;
		LA313: ;
	}
	break;
	case ((NU8) 19):
	{
		{
			if (!((*a).kind == ((NU8) 19))) goto LA326;
			{
				NIM_BOOL LOC330;
				LOC330 = 0;
				LOC330 = !(((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 12)));
				if (!(LOC330)) goto LA331;
				LOC330 = ((*(*a).sons->data[((NI) 0)]).kind == ((NU8) 3));
				LA331: ;
				if (!LOC330) goto LA332;
				result = ((NU8) 3);
			}
			goto LA328;
			LA332: ;
			{
				result = typerel_346064(c, (*f).sons->data[((NI) 0)], (*a).sons->data[((NI) 0)], NIM_TRUE);
				{
					if (!(result <= ((NU8) 1))) goto LA337;
					result = ((NU8) 0);
				}
				LA337: ;
			}
			LA328: ;
		}
		LA326: ;
	}
	break;
	case ((NU8) 21):
	case ((NU8) 22):
	{
		{
			Ttype191849* LOC359;
			Ttype191849* LOC360;
			if (!((*a).kind == (*f).kind)) goto LA342;
			{
				NI LOC346;
				NI LOC347;
				LOC346 = 0;
				LOC346 = len_194377(a);
				LOC347 = 0;
				LOC347 = len_194377(f);
				if (!(LOC346 < LOC347)) goto LA348;
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA348: ;
			{
				NI i_348412;
				NI HEX3Atmp_349553;
				NI LOC351;
				NI res_349556;
				i_348412 = 0;
				HEX3Atmp_349553 = 0;
				LOC351 = 0;
				LOC351 = len_194377(f);
				HEX3Atmp_349553 = (NI)(LOC351 - ((NI) 2));
				res_349556 = ((NI) 0);
				{
					while (1) {
						if (!(res_349556 <= HEX3Atmp_349553)) goto LA353;
						i_348412 = res_349556;
						{
							NU8 LOC356;
							LOC356 = 0;
							LOC356 = typerel_346064(c, (*f).sons->data[i_348412], (*a).sons->data[i_348412], NIM_TRUE);
							if (!(LOC356 == ((NU8) 0))) goto LA357;
							result = ((NU8) 0);
							goto BeforeRet;
						}
						LA357: ;
						res_349556 += ((NI) 1);
					} LA353: ;
				}
			}
			LOC359 = 0;
			LOC359 = lastson_194442(f);
			LOC360 = 0;
			LOC360 = lastson_194442(a);
			result = typerel_346064(c, LOC359, LOC360, NIM_TRUE);
			{
				if (!(result <= ((NU8) 1))) goto LA363;
				result = ((NU8) 0);
			}
			goto LA361;
			LA363: ;
			{
				NIM_BOOL LOC366;
				LOC366 = 0;
				LOC366 = (((*f).flags &(1<<((((NU8) 16))&31)))!=0);
				if (!(LOC366)) goto LA367;
				LOC366 = !((((*a).flags &(1<<((((NU8) 16))&31)))!=0));
				LA367: ;
				if (!LOC366) goto LA368;
				result = ((NU8) 1);
			}
			goto LA361;
			LA368: ;
			LA361: ;
		}
		goto LA340;
		LA342: ;
		{
			if (!((*a).kind == ((NU8) 5))) goto LA371;
			result = allowsnil_346833(f);
		}
		goto LA340;
		LA371: ;
		{
		}
		LA340: ;
	}
	break;
	case ((NU8) 25):
	{
		result = proctyperel_346936(c, f, a);
		{
			NIM_BOOL LOC377;
			NIM_BOOL LOC378;
			LOC377 = 0;
			LOC378 = 0;
			LOC378 = !((result == ((NU8) 0)));
			if (!(LOC378)) goto LA379;
			LOC378 = (((*f).flags &(1<<((((NU8) 16))&31)))!=0);
			LA379: ;
			LOC377 = LOC378;
			if (!(LOC377)) goto LA380;
			LOC377 = !((((*a).flags &(1<<((((NU8) 16))&31)))!=0));
			LA380: ;
			if (!LOC377) goto LA381;
			result = ((NU8) 1);
		}
		LA381: ;
	}
	break;
	case ((NU8) 26):
	{
		switch ((*a).kind) {
		case ((NU8) 26):
		{
			{
				NIM_BOOL LOC387;
				LOC387 = 0;
				LOC387 = (((*f).flags &(1<<((((NU8) 16))&31)))!=0);
				if (!(LOC387)) goto LA388;
				LOC387 = !((((*a).flags &(1<<((((NU8) 16))&31)))!=0));
				LA388: ;
				if (!LOC387) goto LA389;
				result = ((NU8) 1);
			}
			goto LA385;
			LA389: ;
			{
				result = ((NU8) 9);
			}
			LA385: ;
		}
		break;
		case ((NU8) 5):
		{
			result = allowsnil_346833(f);
		}
		break;
		case ((NU8) 25):
		{
			{
				if (!!(((*a).callconv == ((NU8) 8)))) goto LA396;
				result = ((NU8) 1);
			}
			LA396: ;
		}
		break;
		case ((NU8) 21):
		{
			{
				NI LOC401;
				LOC401 = 0;
				LOC401 = len_194377(a);
				if (!(LOC401 == ((NI) 1))) goto LA402;
				result = ((NU8) 1);
			}
			LA402: ;
		}
		break;
		case ((NU8) 29):
		{
			result = ((NU8) 1);
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((NU8) 28):
	{
		switch ((*a).kind) {
		case ((NU8) 28):
		{
			{
				NIM_BOOL LOC410;
				LOC410 = 0;
				LOC410 = (((*f).flags &(1<<((((NU8) 16))&31)))!=0);
				if (!(LOC410)) goto LA411;
				LOC410 = !((((*a).flags &(1<<((((NU8) 16))&31)))!=0));
				LA411: ;
				if (!LOC410) goto LA412;
				result = ((NU8) 1);
			}
			goto LA408;
			LA412: ;
			{
				result = ((NU8) 9);
			}
			LA408: ;
		}
		break;
		case ((NU8) 5):
		{
			result = allowsnil_346833(f);
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((NU8) 29):
	{
		switch ((*a).kind) {
		case ((NU8) 29):
		{
			{
				NIM_BOOL LOC421;
				LOC421 = 0;
				LOC421 = (((*f).flags &(1<<((((NU8) 16))&31)))!=0);
				if (!(LOC421)) goto LA422;
				LOC421 = !((((*a).flags &(1<<((((NU8) 16))&31)))!=0));
				LA422: ;
				if (!LOC421) goto LA423;
				result = ((NU8) 1);
			}
			goto LA419;
			LA423: ;
			{
				result = ((NU8) 9);
			}
			LA419: ;
		}
		break;
		case ((NU8) 5):
		{
			result = allowsnil_346833(f);
		}
		break;
		case ((NU8) 28):
		{
			result = ((NU8) 1);
		}
		break;
		case ((NU8) 21):
		{
			{
				NIM_BOOL LOC431;
				NI LOC432;
				LOC431 = 0;
				LOC432 = 0;
				LOC432 = len_194377(a);
				LOC431 = (LOC432 == ((NI) 1));
				if (!(LOC431)) goto LA433;
				LOC431 = ((*(*a).sons->data[((NI) 0)]).kind == ((NU8) 2));
				LA433: ;
				if (!LOC431) goto LA434;
				result = ((NU8) 1);
			}
			LA434: ;
		}
		break;
		case ((NU8) 16):
		{
			{
				NIM_BOOL LOC439;
				NIM_BOOL LOC440;
				NI64 LOC441;
				Ttype191849* LOC443;
				LOC439 = 0;
				LOC440 = 0;
				LOC441 = 0;
				LOC441 = firstord_221004((*a).sons->data[((NI) 0)]);
				LOC440 = (LOC441 == IL64(0));
				if (!(LOC440)) goto LA442;
				LOC443 = 0;
				LOC443 = skiptypes_195167((*a).sons->data[((NI) 0)], 1048576);
				LOC440 = ((*LOC443).kind >= ((NU8) 31) && (*LOC443).kind <= ((NU8) 35));
				LA442: ;
				LOC439 = LOC440;
				if (!(LOC439)) goto LA444;
				LOC439 = ((*(*a).sons->data[((NI) 1)]).kind == ((NU8) 2));
				LA444: ;
				if (!LOC439) goto LA445;
				result = ((NU8) 1);
			}
			LA445: ;
		}
		break;
		default:
		{
		}
		break;
		}
	}
	break;
	case ((NU8) 3):
	{
		{
			if (!((*a).kind == ((NU8) 3))) goto LA451;
			result = ((NU8) 9);
		}
		LA451: ;
	}
	break;
	case ((NU8) 11):
	{
		Ttype191849* roota;
		Ttype191849* rootf;
		roota = skipgenericalias_227119(a);
		rootf = skipgenericalias_227119(f);
		{
			NIM_BOOL LOC456;
			Ttype191849* LOC458;
			Ttype191849* LOC459;
			LOC456 = 0;
			LOC456 = ((*a).kind == ((NU8) 11));
			if (!(LOC456)) goto LA457;
			LOC458 = 0;
			LOC458 = base_221039(roota);
			LOC459 = 0;
			LOC459 = base_221039(rootf);
			LOC456 = (LOC458 == LOC459);
			LA457: ;
			if (!LOC456) goto LA460;
			{
				NI i_348629;
				NI HEX3Atmp_349561;
				NI LOC463;
				NI res_349564;
				i_348629 = 0;
				HEX3Atmp_349561 = 0;
				LOC463 = 0;
				LOC463 = sonslen_194351(rootf);
				HEX3Atmp_349561 = (NI)(LOC463 - ((NI) 2));
				res_349564 = ((NI) 1);
				{
					while (1) {
						Ttype191849* ff;
						Ttype191849* aa;
						if (!(res_349564 <= HEX3Atmp_349561)) goto LA465;
						i_348629 = res_349564;
						ff = (*rootf).sons->data[i_348629];
						aa = (*roota).sons->data[i_348629];
						result = typerel_346064(c, ff, aa, NIM_TRUE);
						{
							if (!(result == ((NU8) 0))) goto LA468;
							goto BeforeRet;
						}
						LA468: ;
						{
							NIM_BOOL LOC472;
							LOC472 = 0;
							LOC472 = ((*ff).kind == ((NU8) 20));
							if (!(LOC472)) goto LA473;
							LOC472 = !((result == ((NU8) 9)));
							LA473: ;
							if (!LOC472) goto LA474;
							result = ((NU8) 0);
							goto BeforeRet;
						}
						LA474: ;
						res_349564 += ((NI) 1);
					} LA465: ;
				}
			}
		}
		goto LA454;
		LA460: ;
		{
			Ttype191849* LOC477;
			LOC477 = 0;
			LOC477 = lastson_194442(f);
			result = typerel_346064(c, LOC477, a, NIM_TRUE);
		}
		LA454: ;
	}
	break;
	case ((NU8) 10):
	{
		Ttype191849* prev_348660;
		Tidobj168015* LOC479;
		TNimObject* LOC480;
		LOC479 = 0;
		LOC479 = &f->Sup;
		LOC480 = 0;
		LOC480 = idtableget_199182((*c).bindings, LOC479);
		prev_348660 = ((Ttype191849*) (LOC480));
		{
			Ttype191849* ff;
			if (!(prev_348660 == NIM_NIL)) goto LA483;
			{
				NIM_BOOL LOC487;
				LOC487 = 0;
				LOC487 = ((*a).kind == ((NU8) 11));
				if (!(LOC487)) goto LA488;
				LOC487 = ((*a).sons->data[((NI) 0)] == f);
				LA488: ;
				if (!LOC487) goto LA489;
				{
					Ttype191849* bound_348694;
					Ttype191849* LOC495;
					if (!dobind) goto LA493;
					LOC495 = 0;
					LOC495 = skiptypes_195167(aorig, 1048576);
					bound_348694 = skipintlit_239696(LOC495);
					{
						if (!dobind) goto LA498;
						put_345289((&(*c).bindings), f, bound_348694);
					}
					LA498: ;
				}
				LA493: ;
				result = ((NU8) 7);
				goto BeforeRet;
			}
			LA489: ;
			ff = lastson_194442(f);
			{
				if (!!((ff == NIM_NIL))) goto LA502;
				result = typerel_346064(c, ff, a, NIM_TRUE);
			}
			LA502: ;
		}
		goto LA481;
		LA483: ;
		{
			result = typerel_346064(c, prev_348660, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA481: ;
	}
	break;
	case ((NU8) 9):
	{
		Ttype191849* x_348710;
		x_348710 = skipgenericalias_227119(a);
		{
			NIM_BOOL LOC508;
			LOC508 = 0;
			LOC508 = ((*x_348710).kind == ((NU8) 9));
			if (LOC508) goto LA509;
			LOC508 = !(((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 10)));
			LA509: ;
			if (!LOC508) goto LA510;
		}
		goto LA506;
		LA510: ;
		{
			NIM_BOOL LOC513;
			NIM_BOOL LOC514;
			NI LOC517;
			NI LOC518;
			LOC513 = 0;
			LOC514 = 0;
			LOC514 = ((*x_348710).kind == ((NU8) 11));
			if (!(LOC514)) goto LA515;
			LOC514 = ((*f).sons->data[((NI) 0)] == (*x_348710).sons->data[((NI) 0)]);
			LA515: ;
			LOC513 = LOC514;
			if (!(LOC513)) goto LA516;
			LOC517 = 0;
			LOC517 = sonslen_194351(x_348710);
			LOC518 = 0;
			LOC518 = sonslen_194351(f);
			LOC513 = ((NI)(LOC517 - ((NI) 1)) == LOC518);
			LA516: ;
			if (!LOC513) goto LA519;
			{
				NI i_348761;
				NI HEX3Atmp_349569;
				NI LOC522;
				NI res_349572;
				i_348761 = 0;
				HEX3Atmp_349569 = 0;
				LOC522 = 0;
				LOC522 = sonslen_194351(f);
				HEX3Atmp_349569 = (NI)(LOC522 - ((NI) 1));
				res_349572 = ((NI) 1);
				{
					while (1) {
						if (!(res_349572 <= HEX3Atmp_349569)) goto LA524;
						i_348761 = res_349572;
						{
							if (!((*(*x_348710).sons->data[i_348761]).kind == ((NU8) 12))) goto LA527;
							internalerror_166218(((NimStringDesc*) &TMP2648));
						}
						goto LA525;
						LA527: ;
						{
							NU8 LOC530;
							LOC530 = 0;
							LOC530 = typerel_346064(c, (*f).sons->data[i_348761], (*x_348710).sons->data[i_348761], NIM_TRUE);
							if (!(LOC530 <= ((NU8) 3))) goto LA531;
							goto BeforeRet;
						}
						goto LA525;
						LA531: ;
						LA525: ;
						res_349572 += ((NI) 1);
					} LA524: ;
				}
			}
			result = ((NU8) 7);
		}
		goto LA506;
		LA519: ;
		{
			Ttype191849* genericbody;
			genericbody = (*f).sons->data[((NI) 0)];
			result = typerel_346064(c, genericbody, x_348710, NIM_TRUE);
			{
				if (!!((result == ((NU8) 0)))) goto LA536;
				{
					NI i_348802;
					NI HEX3Atmp_349577;
					NI LOC539;
					NI res_349580;
					i_348802 = 0;
					HEX3Atmp_349577 = 0;
					LOC539 = 0;
					LOC539 = sonslen_194351(f);
					HEX3Atmp_349577 = (NI)(LOC539 - ((NI) 1));
					res_349580 = ((NI) 1);
					{
						while (1) {
							Ttype191849* x;
							Tidobj168015* LOC542;
							TNimObject* LOC543;
							if (!(res_349580 <= HEX3Atmp_349577)) goto LA541;
							i_348802 = res_349580;
							LOC542 = 0;
							LOC542 = &(*genericbody).sons->data[(NI)(i_348802 - ((NI) 1))]->Sup;
							LOC543 = 0;
							LOC543 = idtableget_199182((*c).bindings, LOC542);
							x = ((Ttype191849*) (LOC543));
							{
								if (!(x == NIM_NIL)) goto LA546;
							}
							goto LA544;
							LA546: ;
							{
								if (!((*x).kind == ((NU8) 9) || (*x).kind == ((NU8) 12))) goto LA549;
								internalerror_166218(((NimStringDesc*) &TMP2648));
							}
							goto LA544;
							LA549: ;
							{
								put_345289((&(*c).bindings), (*f).sons->data[i_348802], x);
							}
							LA544: ;
							res_349580 += ((NI) 1);
						} LA541: ;
					}
				}
			}
			LA536: ;
		}
		LA506: ;
	}
	break;
	case ((NU8) 55):
	{
		Ttype191849* prev_348829;
		Tidobj168015* LOC553;
		TNimObject* LOC554;
		LOC553 = 0;
		LOC553 = &f->Sup;
		LOC554 = 0;
		LOC554 = idtableget_199182((*c).bindings, LOC553);
		prev_348829 = ((Ttype191849*) (LOC554));
		{
			if (!(prev_348829 == NIM_NIL)) goto LA557;
			result = ((NU8) 9);
			{
				Ttype191849* branch_348851;
				Ttypeseq191845* HEX3Atmp_349585;
				NI i_349588;
				NI L_349590;
				branch_348851 = 0;
				HEX3Atmp_349585 = 0;
				HEX3Atmp_349585 = (*f).sons;
				i_349588 = ((NI) 0);
				L_349590 = (HEX3Atmp_349585 ? HEX3Atmp_349585->Sup.len : 0);
				{
					while (1) {
						NU8 x;
						if (!(i_349588 < L_349590)) goto LA561;
						branch_348851 = HEX3Atmp_349585->data[i_349588];
						x = typerel_346064(c, branch_348851, aorig, NIM_TRUE);
						{
							if (!(x < ((NU8) 3))) goto LA564;
							result = ((NU8) 0);
							goto BeforeRet;
						}
						LA564: ;
						{
							if (!(x < result)) goto LA568;
							result = x;
						}
						LA568: ;
						i_349588 += ((NI) 1);
					} LA561: ;
				}
			}
			{
				Ttype191849* bound_348872;
				Ttype191849* LOC574;
				if (!dobind) goto LA572;
				LOC574 = 0;
				LOC574 = skiptypes_195167(aorig, 1048576);
				bound_348872 = skipintlit_239696(LOC574);
				{
					if (!dobind) goto LA577;
					put_345289((&(*c).bindings), f, bound_348872);
				}
				LA577: ;
			}
			LA572: ;
			goto BeforeRet;
		}
		goto LA555;
		LA557: ;
		{
			result = typerel_346064(c, prev_348829, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA555: ;
	}
	break;
	case ((NU8) 56):
	{
		Ttype191849* prev_348876;
		Tidobj168015* LOC581;
		TNimObject* LOC582;
		LOC581 = 0;
		LOC581 = &f->Sup;
		LOC582 = 0;
		LOC582 = idtableget_199182((*c).bindings, LOC581);
		prev_348876 = ((Ttype191849*) (LOC582));
		{
			if (!(prev_348876 == NIM_NIL)) goto LA585;
			result = ((NU8) 0);
			{
				Ttype191849* branch_348898;
				Ttypeseq191845* HEX3Atmp_349592;
				NI i_349595;
				NI L_349597;
				branch_348898 = 0;
				HEX3Atmp_349592 = 0;
				HEX3Atmp_349592 = (*f).sons;
				i_349595 = ((NI) 0);
				L_349597 = (HEX3Atmp_349592 ? HEX3Atmp_349592->Sup.len : 0);
				{
					while (1) {
						NU8 x;
						if (!(i_349595 < L_349597)) goto LA589;
						branch_348898 = HEX3Atmp_349592->data[i_349595];
						x = typerel_346064(c, branch_348898, aorig, NIM_TRUE);
						{
							if (!(result < x)) goto LA592;
							result = x;
						}
						LA592: ;
						i_349595 += ((NI) 1);
					} LA589: ;
				}
			}
			{
				if (!(((NU8) 3) <= result)) goto LA596;
				{
					Ttype191849* bound_348919;
					Ttype191849* LOC602;
					if (!dobind) goto LA600;
					LOC602 = 0;
					LOC602 = skiptypes_195167(aorig, 1048576);
					bound_348919 = skipintlit_239696(LOC602);
					{
						if (!dobind) goto LA605;
						put_345289((&(*c).bindings), f, bound_348919);
					}
					LA605: ;
				}
				LA600: ;
				goto BeforeRet;
			}
			goto LA594;
			LA596: ;
			{
				result = ((NU8) 0);
			}
			LA594: ;
		}
		goto LA583;
		LA585: ;
		{
			result = typerel_346064(c, prev_348876, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA583: ;
	}
	break;
	case ((NU8) 57):
	{
		Ttype191849* prev_348923;
		Tidobj168015* LOC610;
		TNimObject* LOC611;
		LOC610 = 0;
		LOC610 = &f->Sup;
		LOC611 = 0;
		LOC611 = idtableget_199182((*c).bindings, LOC610);
		prev_348923 = ((Ttype191849*) (LOC611));
		{
			if (!(prev_348923 == NIM_NIL)) goto LA614;
			{
				Ttype191849* branch_348945;
				Ttypeseq191845* HEX3Atmp_349599;
				NI i_349602;
				NI L_349604;
				branch_348945 = 0;
				HEX3Atmp_349599 = 0;
				HEX3Atmp_349599 = (*f).sons;
				i_349602 = ((NI) 0);
				L_349604 = (HEX3Atmp_349599 ? HEX3Atmp_349599->Sup.len : 0);
				{
					while (1) {
						if (!(i_349602 < L_349604)) goto LA618;
						branch_348945 = HEX3Atmp_349599->data[i_349602];
						{
							NU8 LOC621;
							LOC621 = 0;
							LOC621 = typerel_346064(c, branch_348945, aorig, NIM_TRUE);
							if (!!((LOC621 == ((NU8) 0)))) goto LA622;
							result = ((NU8) 0);
							goto BeforeRet;
						}
						LA622: ;
						i_349602 += ((NI) 1);
					} LA618: ;
				}
			}
			{
				Ttype191849* bound_348956;
				Ttype191849* LOC628;
				if (!dobind) goto LA626;
				LOC628 = 0;
				LOC628 = skiptypes_195167(aorig, 1048576);
				bound_348956 = skipintlit_239696(LOC628);
				{
					if (!dobind) goto LA631;
					put_345289((&(*c).bindings), f, bound_348956);
				}
				LA631: ;
			}
			LA626: ;
			result = ((NU8) 7);
			goto BeforeRet;
		}
		goto LA612;
		LA614: ;
		{
			result = typerel_346064(c, prev_348923, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA612: ;
	}
	break;
	case ((NU8) 58):
	{
		Ttype191849* prev_348960;
		Tidobj168015* LOC635;
		TNimObject* LOC636;
		LOC635 = 0;
		LOC635 = &f->Sup;
		LOC636 = 0;
		LOC636 = idtableget_199182((*c).bindings, LOC635);
		prev_348960 = ((Ttype191849*) (LOC636));
		{
			Ttype191849* concrete;
			if (!(prev_348960 == NIM_NIL)) goto LA639;
			concrete = concretetype_346074((&(*c)), a);
			{
				NIM_BOOL LOC643;
				LOC643 = 0;
				LOC643 = !((concrete == NIM_NIL));
				if (!(LOC643)) goto LA644;
				LOC643 = dobind;
				LA644: ;
				if (!LOC643) goto LA645;
				put_345289((&(*c).bindings), f, concrete);
			}
			LA645: ;
			result = ((NU8) 7);
			goto BeforeRet;
		}
		goto LA637;
		LA639: ;
		{
			result = typerel_346064(c, prev_348960, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA637: ;
	}
	break;
	case ((NU8) 51):
	{
		Ttype191849* prev_348988;
		Tidobj168015* LOC649;
		TNimObject* LOC650;
		LOC649 = 0;
		LOC649 = &f->Sup;
		LOC650 = 0;
		LOC650 = idtableget_199182((*c).bindings, LOC649);
		prev_348988 = ((Ttype191849*) (LOC650));
		{
			NU8 targetkind;
			if (!(prev_348988 == NIM_NIL)) goto LA653;
			targetkind = (*(*f).sons->data[((NI) 0)]).kind;
			{
				NIM_BOOL LOC657;
				Ttype191849* LOC658;
				NIM_BOOL LOC660;
				LOC657 = 0;
				LOC658 = 0;
				LOC658 = skiptypes_195167(a, 1050624);
				LOC657 = (targetkind == (*LOC658).kind);
				if (LOC657) goto LA659;
				LOC660 = 0;
				LOC660 = (targetkind == ((NU8) 25) || targetkind == ((NU8) 26));
				if (!(LOC660)) goto LA661;
				LOC660 = ((*a).kind == ((NU8) 5));
				LA661: ;
				LOC657 = LOC660;
				LA659: ;
				if (!LOC657) goto LA662;
				put_345289((&(*c).bindings), f, a);
				result = ((NU8) 7);
				goto BeforeRet;
			}
			goto LA655;
			LA662: ;
			{
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA655: ;
		}
		goto LA651;
		LA653: ;
		{
			result = typerel_346064(c, prev_348988, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA651: ;
	}
	break;
	case ((NU8) 52):
	case ((NU8) 53):
	{
		Ttype191849* prev_349034;
		Tidobj168015* LOC667;
		TNimObject* LOC668;
		LOC667 = 0;
		LOC667 = &f->Sup;
		LOC668 = 0;
		LOC668 = idtableget_199182((*c).bindings, LOC667);
		prev_349034 = ((Ttype191849*) (LOC668));
		{
			if (!(prev_349034 == NIM_NIL)) goto LA671;
			result = matchusertypeclass_347249((*c).c, c, f, aorig);
			{
				if (!(result == ((NU8) 7))) goto LA675;
				put_345289((&(*c).bindings), f, a);
			}
			LA675: ;
		}
		goto LA669;
		LA671: ;
		{
			result = typerel_346064(c, prev_349034, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA669: ;
	}
	break;
	case ((NU8) 54):
	{
		Ttype191849* prev_349058;
		Tidobj168015* LOC679;
		TNimObject* LOC680;
		LOC679 = 0;
		LOC679 = &f->Sup;
		LOC680 = 0;
		LOC680 = idtableget_199182((*c).bindings, LOC679);
		prev_349058 = ((Ttype191849*) (LOC680));
		{
			if (!(prev_349058 == NIM_NIL)) goto LA683;
			{
				NU8 LOC687;
				LOC687 = 0;
				LOC687 = typerel_346064(c, (*f).sons->data[((NI) 1)], a, NIM_TRUE);
				if (!!((LOC687 == ((NU8) 0)))) goto LA688;
				put_345289((&(*c).bindings), f, a);
				result = ((NU8) 7);
				goto BeforeRet;
			}
			goto LA685;
			LA688: ;
			{
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA685: ;
		}
		goto LA681;
		LA683: ;
		{
			result = typerel_346064(c, prev_349058, a, NIM_TRUE);
			goto BeforeRet;
		}
		LA681: ;
	}
	break;
	case ((NU8) 12):
	{
		Ttype191849* x;
		Tidobj168015* LOC693;
		TNimObject* LOC694;
		LOC693 = 0;
		LOC693 = &f->Sup;
		LOC694 = 0;
		LOC694 = idtableget_199182((*c).bindings, LOC693);
		x = ((Ttype191849*) (LOC694));
		{
			if (!(x == NIM_NIL)) goto LA697;
			{
				NIM_BOOL LOC701;
				NIM_BOOL LOC702;
				LOC701 = 0;
				LOC702 = 0;
				LOC702 = ((*(*c).callee).kind == ((NU8) 10));
				if (!(LOC702)) goto LA703;
				LOC702 = ((*f).kind == ((NU8) 12));
				LA703: ;
				LOC701 = LOC702;
				if (!(LOC701)) goto LA704;
				LOC701 = !((*c).typedescmatched);
				LA704: ;
				if (!LOC701) goto LA705;
				{
					if (!(((*a).flags &(1<<((((NU8) 25))&31)))!=0)) goto LA709;
					result = ((NU8) 7);
				}
				goto LA707;
				LA709: ;
				{
					if (!((*a).kind == ((NU8) 8))) goto LA712;
					{
						NI LOC716;
						LOC716 = 0;
						LOC716 = sonslen_194351(f);
						if (!(LOC716 == ((NI) 0))) goto LA717;
						result = ((NU8) 7);
					}
					goto LA714;
					LA717: ;
					{
						Ttype191849* aa;
						Ttype191849* LOC733;
						{
							NIM_BOOL LOC722;
							NIM_BOOL LOC723;
							NimStringDesc* LOC727;
							LOC722 = 0;
							LOC723 = 0;
							LOC723 = HEX3DHEX3D_230739((*a).sons, NIM_NIL);
							LOC722 = !(LOC723);
							if (!(LOC722)) goto LA724;
							LOC722 = (((NI) 0) < ((*a).sons ? (*a).sons->Sup.len : 0));
							LA724: ;
							if (!!(LOC722)) goto LA725;
							LOC727 = 0;
							LOC727 = HEX24_166306(TMP2655);
							internalerror_166218(LOC727);
						}
						LA725: ;
						(*c).typedescmatched = NIM_TRUE;
						aa = a;
						{
							while (1) {
								NIM_BOOL LOC730;
								NI LOC732;
								LOC730 = 0;
								LOC730 = ((*aa).kind == ((NU8) 8) || (*aa).kind == ((NU8) 12));
								if (!(LOC730)) goto LA731;
								LOC732 = 0;
								LOC732 = len_194377(aa);
								LOC730 = (((NI) 0) < LOC732);
								LA731: ;
								if (!LOC730) goto LA729;
								aa = lastson_194442(aa);
							} LA729: ;
						}
						LOC733 = 0;
						LOC733 = base_221039(f);
						result = typerel_346064(c, LOC733, aa, NIM_TRUE);
						{
							if (!(((NU8) 7) < result)) goto LA736;
							result = ((NU8) 7);
						}
						LA736: ;
					}
					LA714: ;
				}
				goto LA707;
				LA712: ;
				{
					result = ((NU8) 0);
				}
				LA707: ;
			}
			goto LA699;
			LA705: ;
			{
				{
					NIM_BOOL LOC742;
					NI LOC743;
					Ttype191849* LOC747;
					LOC742 = 0;
					LOC743 = 0;
					LOC743 = sonslen_194351(f);
					LOC742 = (((NI) 0) < LOC743);
					if (!(LOC742)) goto LA744;
					LOC742 = !(((*(*f).sons->data[((NI) 0)]).kind == ((NU8) 0)));
					LA744: ;
					if (!LOC742) goto LA745;
					LOC747 = 0;
					LOC747 = lastson_194442(f);
					result = typerel_346064(c, LOC747, a, NIM_TRUE);
					{
						NIM_BOOL LOC750;
						Ttype191849* concrete;
						LOC750 = 0;
						LOC750 = dobind;
						if (!(LOC750)) goto LA751;
						LOC750 = !(((129 &(1<<((result)&15)))!=0));
						LA751: ;
						if (!LOC750) goto LA752;
						concrete = concretetype_346074((&(*c)), a);
						{
							if (!(concrete == NIM_NIL)) goto LA756;
							result = ((NU8) 0);
							goto BeforeRet;
						}
						LA756: ;
						put_345289((&(*c).bindings), f, concrete);
					}
					LA752: ;
				}
				goto LA740;
				LA745: ;
				{
					result = ((NU8) 7);
				}
				LA740: ;
			}
			LA699: ;
			{
				Ttype191849* concrete;
				if (!(result == ((NU8) 7))) goto LA761;
				concrete = a;
				{
					if (!(((*a).flags &(1<<((((NU8) 25))&31)))!=0)) goto LA765;
					(*(*a).sym).kind = ((NU8) 7);
					(*a).flags &= ~(((NI32)1) << ((((NU8) 25)) % (sizeof(NI32)*8)));
				}
				goto LA763;
				LA765: ;
				{
					concrete = concretetype_346074((&(*c)), a);
					{
						if (!(concrete == NIM_NIL)) goto LA770;
						result = ((NU8) 0);
						goto BeforeRet;
					}
					LA770: ;
				}
				LA763: ;
				{
					if (!dobind) goto LA774;
					put_345289((&(*c).bindings), f, concrete);
				}
				LA774: ;
			}
			goto LA759;
			LA761: ;
			{
				if (!(((NU8) 7) < result)) goto LA777;
				result = ((NU8) 7);
			}
			goto LA759;
			LA777: ;
			LA759: ;
		}
		goto LA695;
		LA697: ;
		{
			if (!((*a).kind == ((NU8) 3))) goto LA780;
			result = ((NU8) 7);
		}
		goto LA695;
		LA780: ;
		{
			if (!((*x).kind == ((NU8) 12))) goto LA783;
			result = ((NU8) 7);
		}
		goto LA695;
		LA783: ;
		{
			result = typerel_346064(c, x, a, NIM_TRUE);
			{
				if (!(((NU8) 7) < result)) goto LA788;
				result = ((NU8) 7);
			}
			LA788: ;
		}
		LA695: ;
	}
	break;
	case ((NU8) 59):
	{
		Ttype191849* prev;
		Tidobj168015* LOC791;
		TNimObject* LOC792;
		LOC791 = 0;
		LOC791 = &f->Sup;
		LOC792 = 0;
		LOC792 = idtableget_199182((*c).bindings, LOC791);
		prev = ((Ttype191849*) (LOC792));
		{
			if (!(prev == NIM_NIL)) goto LA795;
			{
				Ttype191849* LOC801;
				if (!((*aorig).kind == ((NU8) 59))) goto LA799;
				LOC801 = 0;
				LOC801 = lastson_194442(f);
				result = typerel_346064(c, LOC801, a, NIM_TRUE);
				{
					NIM_BOOL LOC804;
					LOC804 = 0;
					LOC804 = !((result == ((NU8) 0)));
					if (!(LOC804)) goto LA805;
					LOC804 = !(((*f).n == NIM_NIL));
					LA805: ;
					if (!LOC804) goto LA806;
					{
						NIM_BOOL LOC810;
						LOC810 = 0;
						LOC810 = exprstructuralequivalent_220149((*f).n, (*aorig).n);
						if (!!(LOC810)) goto LA811;
						result = ((NU8) 0);
					}
					LA811: ;
				}
				LA806: ;
				{
					if (!!((result == ((NU8) 0)))) goto LA815;
					put_345289((&(*c).bindings), f, aorig);
				}
				LA815: ;
			}
			goto LA797;
			LA799: ;
			{
				result = ((NU8) 0);
			}
			LA797: ;
		}
		goto LA793;
		LA795: ;
		{
			if (!((*prev).kind == ((NU8) 59))) goto LA819;
			{
				Ttype191849* LOC825;
				if (!((*aorig).kind == ((NU8) 59))) goto LA823;
				LOC825 = 0;
				LOC825 = lastson_194442(prev);
				result = typerel_346064(c, LOC825, a, NIM_TRUE);
				{
					NIM_BOOL LOC828;
					LOC828 = 0;
					LOC828 = !((result == ((NU8) 0)));
					if (!(LOC828)) goto LA829;
					LOC828 = !(((*prev).n == NIM_NIL));
					LA829: ;
					if (!LOC828) goto LA830;
					{
						NIM_BOOL LOC834;
						LOC834 = 0;
						LOC834 = exprstructuralequivalent_220149((*prev).n, (*aorig).n);
						if (!!(LOC834)) goto LA835;
						result = ((NU8) 0);
					}
					LA835: ;
				}
				LA830: ;
			}
			goto LA821;
			LA823: ;
			{
				result = ((NU8) 0);
			}
			LA821: ;
		}
		goto LA793;
		LA819: ;
		{
			result = ((NU8) 0);
		}
		LA793: ;
	}
	break;
	case ((NU8) 8):
	{
		Ttype191849* prev;
		Tidobj168015* LOC840;
		TNimObject* LOC841;
		LOC840 = 0;
		LOC840 = &f->Sup;
		LOC841 = 0;
		LOC841 = idtableget_199182((*c).bindings, LOC840);
		prev = ((Ttype191849*) (LOC841));
		{
			if (!(prev == NIM_NIL)) goto LA844;
			{
				if (!!(((*a).kind == ((NU8) 8)))) goto LA848;
				result = ((NU8) 0);
				goto BeforeRet;
			}
			LA848: ;
			{
				Ttype191849* LOC852;
				LOC852 = 0;
				LOC852 = base_221039(f);
				if (!((*LOC852).kind == ((NU8) 0))) goto LA853;
				result = ((NU8) 7);
			}
			goto LA850;
			LA853: ;
			{
				Ttype191849* LOC856;
				Ttype191849* LOC857;
				LOC856 = 0;
				LOC856 = base_221039(f);
				LOC857 = 0;
				LOC857 = base_221039(a);
				result = typerel_346064(c, LOC856, LOC857, NIM_TRUE);
			}
			LA850: ;
			{
				if (!!((result == ((NU8) 0)))) goto LA860;
				put_345289((&(*c).bindings), f, a);
			}
			LA860: ;
		}
		goto LA842;
		LA844: ;
		{
			{
				Ttype191849* LOC867;
				if (!(((*f).flags &(1<<((((NU8) 9))&31)))!=0)) goto LA865;
				LOC867 = 0;
				LOC867 = base_221039(prev);
				result = typerel_346064(c, LOC867, a, NIM_TRUE);
			}
			goto LA863;
			LA865: ;
			{
				Ttype191849* LOC871;
				Ttype191849* LOC872;
				if (!((*a).kind == ((NU8) 8))) goto LA869;
				LOC871 = 0;
				LOC871 = base_221039(prev);
				LOC872 = 0;
				LOC872 = base_221039(a);
				result = typerel_346064(c, LOC871, LOC872, NIM_TRUE);
			}
			goto LA863;
			LA869: ;
			{
				result = ((NU8) 0);
			}
			LA863: ;
		}
		LA842: ;
	}
	break;
	case ((NU8) 49):
	{
		{
			NIM_BOOL LOC877;
			NIM_BOOL LOC879;
			Ttype191849* LOC883;
			Ttype191849* LOC884;
			LOC877 = 0;
			LOC877 = ((*a).kind == ((NU8) 49));
			if (LOC877) goto LA878;
			LOC879 = 0;
			LOC879 = ((*a).kind == ((NU8) 25));
			if (!(LOC879)) goto LA880;
			LOC879 = (((*a).flags &(1<<((((NU8) 14))&31)))!=0);
			LA880: ;
			LOC877 = LOC879;
			LA878: ;
			if (!LOC877) goto LA881;
			LOC883 = 0;
			LOC883 = base_221039(f);
			LOC884 = 0;
			LOC884 = base_221039(a);
			result = typerel_346064(c, LOC883, LOC884, NIM_TRUE);
		}
		goto LA875;
		LA881: ;
		{
			result = ((NU8) 0);
		}
		LA875: ;
	}
	break;
	case ((NU8) 7):
	{
		result = ((NU8) 7);
	}
	break;
	case ((NU8) 50):
	{
		result = ((NU8) 9);
	}
	break;
	case ((NU8) 60):
	{
		Tnode191813* reevaluated;
		{
			NIM_BOOL LOC891;
			LOC891 = 0;
			LOC891 = ((*f).n == NIM_NIL);
			if (LOC891) goto LA892;
			LOC891 = ((*(*f).n).kind == ((NU8) 1));
			LA892: ;
			if (!LOC891) goto LA893;
			result = ((NU8) 7);
			goto BeforeRet;
		}
		LA893: ;
		reevaluated = tryresolvingstaticexpr_347562(c, (*f).n);
		switch ((*(*reevaluated).typ).kind) {
		case ((NU8) 8):
		{
			Ttype191849* LOC896;
			LOC896 = 0;
			LOC896 = base_221039((*reevaluated).typ);
			result = typerel_346064(c, a, LOC896, NIM_TRUE);
		}
		break;
		case ((NU8) 59):
		{
			Ttype191849* LOC898;
			LOC898 = 0;
			LOC898 = base_221039((*reevaluated).typ);
			result = typerel_346064(c, a, LOC898, NIM_TRUE);
			{
				NIM_BOOL LOC901;
				LOC901 = 0;
				LOC901 = !((result == ((NU8) 0)));
				if (!(LOC901)) goto LA902;
				LOC901 = !(((*(*reevaluated).typ).n == NIM_NIL));
				LA902: ;
				if (!LOC901) goto LA903;
				{
					NIM_BOOL LOC907;
					LOC907 = 0;
					LOC907 = exprstructuralequivalent_220149((*aorig).n, (*(*reevaluated).typ).n);
					if (!!(LOC907)) goto LA908;
					result = ((NU8) 0);
				}
				LA908: ;
			}
			LA903: ;
		}
		break;
		default:
		{
			localerror_166155((*(*f).n).info, ((NU16) 63), ((NimStringDesc*) &TMP2656));
			result = ((NU8) 0);
		}
		break;
		}
	}
	break;
	case ((NU8) 0):
	{
		{
			if (!((*a).kind == ((NU8) 0))) goto LA914;
			result = ((NU8) 9);
		}
		LA914: ;
	}
	break;
	default:
	{
		NimStringDesc* LOC917;
		LOC917 = 0;
		LOC917 = rawNewString(reprEnum((*f).kind, (&NTI191260))->Sup.len + 19);
appendString(LOC917, ((NimStringDesc*) &TMP2657));
appendString(LOC917, reprEnum((*f).kind, (&NTI191260)));
		internalerror_166218(LOC917);
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(void, incmatches_350036)(Tcandidate345209* m, NU8 r, NI convmatch) {
	switch (r) {
	case ((NU8) 1):
	case ((NU8) 2):
	{
		(*m).convmatches += convmatch;
	}
	break;
	case ((NU8) 3):
	case ((NU8) 4):
	{
		(*m).subtypematches += ((NI) 1);
	}
	break;
	case ((NU8) 7):
	case ((NU8) 5):
	{
		(*m).genericmatches += ((NI) 1);
	}
	break;
	case ((NU8) 8):
	{
		(*m).intconvmatches += ((NI) 256);
	}
	break;
	case ((NU8) 6):
	{
		(*m).convmatches += ((NI) 1);
	}
	break;
	case ((NU8) 9):
	{
		(*m).exactmatches += ((NI) 1);
	}
	break;
	case ((NU8) 0):
	{
	}
	break;
	}
}

N_NIMCALL(NIM_BOOL, isinlineiterator_349999)(Ttype191849* t) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	NIM_BOOL LOC3;
	Ttype191849* LOC5;
	result = 0;
	LOC1 = 0;
	LOC1 = ((*t).kind == ((NU8) 49));
	if (LOC1) goto LA2;
	LOC3 = 0;
	LOC3 = ((*t).kind == ((NU8) 51));
	if (!(LOC3)) goto LA4;
	LOC5 = 0;
	LOC5 = base_221039(t);
	LOC3 = ((*LOC5).kind == ((NU8) 49));
	LA4: ;
	LOC1 = LOC3;
	LA2: ;
	result = LOC1;
	return result;
}

N_NIMCALL(Ttype191849*, getinstantiatedtype_349724)(Tcontext245023* c, Tnode191813* arg, Tcandidate345209* m, Ttype191849* f) {
	Ttype191849* result;
	Tidobj168015* LOC1;
	TNimObject* LOC2;
	result = 0;
	LOC1 = 0;
	LOC1 = &f->Sup;
	LOC2 = 0;
	LOC2 = idtableget_199182((*m).bindings, LOC1);
	result = ((Ttype191849*) (LOC2));
	{
		if (!(result == NIM_NIL)) goto LA5;
		result = generatetypeinstance_268631(c, (*m).bindings, (*arg).info, f);
	}
	LA5: ;
	{
		if (!(result == NIM_NIL)) goto LA9;
		internalerror_166199((*arg).info, ((NimStringDesc*) &TMP2658));
		result = errortype_246150(c);
	}
	LA9: ;
	return result;
}

N_NIMCALL(Tnode191813*, implicitconv_349761)(NU8 kind, Ttype191849* f, Tnode191813* arg, Tcandidate345209* m, Tcontext245023* c) {
	Tnode191813* result;
	result = 0;
	result = newnodei_193351(kind, (*arg).info);
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = containsgenerictype_230310(f);
		if (!LOC3) goto LA4;
		{
			if (!!(!(((*m).fauxmatch == ((NU8) 0))))) goto LA8;
			asgnRefNoCycle((void**) (&(*result).typ), getinstantiatedtype_349724(c, arg, m, f));
		}
		goto LA6;
		LA8: ;
		{
			asgnRefNoCycle((void**) (&(*result).typ), errortype_246150(c));
		}
		LA6: ;
	}
	goto LA1;
	LA4: ;
	{
		asgnRefNoCycle((void**) (&(*result).typ), f);
	}
	LA1: ;
	{
		if (!((*result).typ == NIM_NIL)) goto LA14;
		internalerror_166199((*arg).info, ((NimStringDesc*) &TMP2659));
	}
	LA14: ;
	addson_193819(result, emptynode_192807);
	addson_193819(result, arg);
	return result;
}

N_NIMCALL(NIM_BOOL, istracked_354796)(Tlineinfo164338 current, NI tokenlen) {
	NIM_BOOL result;
{	result = 0;
	{
		if (!(current.fileindex == gtrackpos_165500.fileindex)) goto LA3;
		{
			NI16 col;
			if (!(current.line == gtrackpos_165500.line)) goto LA7;
			col = gtrackpos_165500.col;
			{
				NIM_BOOL LOC11;
				LOC11 = 0;
				LOC11 = (current.col <= col);
				if (!(LOC11)) goto LA12;
				LOC11 = (((NI) (col)) <= (NI)((NI)(((NI) (current.col)) + tokenlen) - ((NI) 1)));
				LA12: ;
				if (!LOC11) goto LA13;
				result = NIM_TRUE;
				goto BeforeRet;
			}
			LA13: ;
		}
		LA7: ;
	}
	LA3: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(void, findusages_354892)(Tlineinfo164338 info, Tsym191843* s) {
	{
		NIM_BOOL LOC3;
		NimStringDesc* LOC7;
		LOC3 = 0;
		LOC3 = (usagesym_354890 == NIM_NIL);
		if (!(LOC3)) goto LA4;
		LOC3 = istracked_354796(info, ((*(*s).name).s ? (*(*s).name).s->Sup.len : 0));
		LA4: ;
		if (!LOC3) goto LA5;
		asgnRefNoCycle((void**) (&usagesym_354890), s);
		LOC7 = 0;
		LOC7 = symtostr_352005(s, NIM_FALSE, ((NimStringDesc*) &TMP2662));
		suggestwriteln_165069(LOC7);
	}
	goto LA1;
	LA5: ;
	{
		if (!(s == usagesym_354890)) goto LA9;
		{
			NIM_BOOL LOC13;
			NimStringDesc* LOC16;
			LOC13 = 0;
			LOC13 = HEX3DHEX3D_165789(lastlineinfo_354891, info);
			if (!!(LOC13)) goto LA14;
			LOC16 = 0;
			LOC16 = symtostr_351816(s, NIM_FALSE, ((NimStringDesc*) &TMP2662), info);
			suggestwriteln_165069(LOC16);
		}
		LA14: ;
		lastlineinfo_354891 = info;
	}
	goto LA1;
	LA9: ;
	LA1: ;
}

N_NIMCALL(void, finddefinition_354923)(Tlineinfo164338 info, Tsym191843* s) {
{	{
		if (!s == 0) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	{
		NIM_BOOL LOC7;
		NimStringDesc* LOC10;
		LOC7 = 0;
		LOC7 = istracked_354796(info, ((*(*s).name).s ? (*(*s).name).s->Sup.len : 0));
		if (!LOC7) goto LA8;
		LOC10 = 0;
		LOC10 = symtostr_352005(s, NIM_FALSE, ((NimStringDesc*) &TMP2663));
		suggestwriteln_165069(LOC10);
		suggestquit_165125();
	}
	LA8: ;
	}BeforeRet: ;
}

static N_INLINE(void, suggestsym_354960)(Tlineinfo164338 info, Tsym191843* s) {
	{
		if (!(gidecmd_155115 == ((NU8) 4))) goto LA3;
		findusages_354892(info, s);
	}
	goto LA1;
	LA3: ;
	{
		if (!(gidecmd_155115 == ((NU8) 3))) goto LA6;
		finddefinition_354923(info, s);
	}
	goto LA1;
	LA6: ;
	LA1: ;
}

N_NIMCALL(void, markused_345251)(Tlineinfo164338 info, Tsym191843* s) {
	(*s).flags |= ((NI32)1)<<((((NU8) 0))%(sizeof(NI32)*8));
	{
		if (!!(((1572864 & (*s).flags) == 0))) goto LA3;
		{
			if (!(((*s).flags &(1<<((((NU8) 19))&31)))!=0)) goto LA7;
			message_166188(info, ((NU16) 234), (*(*s).name).s);
		}
		LA7: ;
		{
			if (!(((*s).flags &(1<<((((NU8) 20))&31)))!=0)) goto LA11;
			localerror_166155(info, ((NU16) 221), (*(*s).name).s);
		}
		LA11: ;
	}
	LA3: ;
	suggestsym_354960(info, s);
}

N_NIMCALL(Tnode191813*, userconvmatch_349796)(Tcontext245023* c, Tcandidate345209* m, Ttype191849* f, Ttype191849* a, Tnode191813* arg) {
	Tnode191813* result;
{	result = 0;
	result = NIM_NIL;
	{
		NI i_349825;
		NI HEX3Atmp_349877;
		NI res_349880;
		i_349825 = 0;
		HEX3Atmp_349877 = 0;
		HEX3Atmp_349877 = (NI)(((*c).converters ? (*c).converters->Sup.len : 0) - ((NI) 1));
		res_349880 = ((NI) 0);
		{
			while (1) {
				if (!(res_349880 <= HEX3Atmp_349877)) goto LA3;
				i_349825 = res_349880;
				{
					Ttype191849* src;
					Ttype191849* dest;
					NU8 srca;
					NIM_BOOL destisgeneric;
					NU8 fdest;
					src = (*(*(*c).converters->data[i_349825]).typ).sons->data[((NI) 1)];
					dest = (*(*(*c).converters->data[i_349825]).typ).sons->data[((NI) 0)];
					srca = typerel_346064(m, src, a, NIM_TRUE);
					{
						if (!!(((640 &(1<<((srca)&15)))!=0))) goto LA7;
						goto LA4;
					}
					LA7: ;
					destisgeneric = containsgenerictype_230310(dest);
					{
						if (!destisgeneric) goto LA11;
						dest = generatetypeinstance_268631(c, (*m).bindings, (*arg).info, dest);
					}
					LA11: ;
					fdest = typerel_346064(m, f, dest, NIM_TRUE);
					{
						Tnode191813* s;
						Tnode191813* LOC17;
						NIM_BOOL LOC18;
						if (!((640 &(1<<((fdest)&15)))!=0)) goto LA15;
						markused_345251((*arg).info, (*c).converters->data[i_349825]);
						s = newsymnode_193325((*c).converters->data[i_349825]);
						asgnRefNoCycle((void**) (&(*s).typ), (*(*c).converters->data[i_349825]).typ);
						(*s).info = (*arg).info;
						result = newnodeit_193807(((NU8) 32), (*arg).info, dest);
						addson_193819(result, s);
						LOC17 = 0;
						LOC17 = copytree_196028(arg);
						addson_193819(result, LOC17);
						(*m).convmatches += ((NI) 1);
						LOC18 = 0;
						LOC18 = (srca == ((NU8) 7));
						if (LOC18) goto LA19;
						LOC18 = destisgeneric;
						LA19: ;
						(*m).genericconverter = LOC18;
						goto BeforeRet;
					}
					LA15: ;
				} LA4: ;
				res_349880 += ((NI) 1);
			} LA3: ;
		}
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Tnode191813*, localconvmatch_349902)(Tcontext245023* c, Tcandidate345209* m, Ttype191849* f, Ttype191849* a, Tnode191813* arg) {
	Tnode191813* result;
	Tnode191813* call;
	Tnode191813* LOC11;
	Tnode191813* LOC12;
{	result = 0;
	{
		if (!(*arg).typ == 0) goto LA3;
		result = NIM_NIL;
		goto BeforeRet;
	}
	LA3: ;
	{
		NIM_BOOL LOC7;
		LOC7 = 0;
		LOC7 = (f == (*arg).typ);
		if (!(LOC7)) goto LA8;
		LOC7 = ((*arg).kind == ((NU8) 58));
		LA8: ;
		if (!LOC7) goto LA9;
		result = arg;
		goto BeforeRet;
	}
	LA9: ;
	call = newnodei_193351(((NU8) 27), (*arg).info);
	LOC11 = 0;
	LOC11 = copytree_196028((*f).n);
	add_192164(call, LOC11);
	LOC12 = 0;
	LOC12 = copytree_196028(arg);
	add_192164(call, LOC12);
	result = (*c).semoverloadedcall(c, call, call, 520192);
	{
		NU8 r;
		if (!!((result == NIM_NIL))) goto LA15;
		r = typerel_346064(m, (*f).sons->data[((NI) 0)], (*result).typ, NIM_TRUE);
		{
			if (!(r < ((NU8) 7))) goto LA19;
			result = NIM_NIL;
			goto BeforeRet;
		}
		LA19: ;
		{
			if (!((*result).kind == ((NU8) 27))) goto LA23;
			(*result).kind = ((NU8) 32);
		}
		LA23: ;
		(*m).convmatches += ((NI) 1);
		{
			Ttype191849* LOC29;
			if (!(r == ((NU8) 7))) goto LA27;
			LOC29 = 0;
			LOC29 = base_221039(f);
			asgnRefNoCycle((void**) (&(*result).typ), getinstantiatedtype_349724(c, arg, (&(*m)), LOC29));
		}
		LA27: ;
		(*m).basetypematch = NIM_TRUE;
	}
	LA15: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Tnode191813*, paramtypesmatchaux_350103)(Tcandidate345209* m, Ttype191849* f, Ttype191849* argtype_350108, Tnode191813* argsemantized, Tnode191813* argorig) {
	Tnode191813* result;
	Ttype191849* fmaybestatic;
	Tnode191813* arg;
	Ttype191849* argtype;
	Tcontext245023* c;
	Ttype191849* a;
	NU8 r;
{	result = 0;
	fmaybestatic = skiptypes_195167(f, 8192);
	arg = argsemantized;
	argtype = argtype_350108;
	c = (*m).c;
	{
		if (!(((*fmaybestatic).flags &(1<<((((NU8) 22))&31)))!=0)) goto LA3;
		{
			NIM_BOOL LOC7;
			LOC7 = 0;
			LOC7 = ((*argtype).kind == ((NU8) 12));
			if (!(LOC7)) goto LA8;
			LOC7 = (((*argtype).flags &(1<<((((NU8) 25))&31)))!=0);
			LA8: ;
			if (!LOC7) goto LA9;
			assigntype_194452(argtype, f);
			result = argsemantized;
			goto BeforeRet;
		}
		LA9: ;
		{
			if (!((*argtype).kind == ((NU8) 59))) goto LA13;
			{
				NIM_BOOL LOC17;
				Ttype191849* LOC21;
				LOC17 = 0;
				LOC17 = ((*(*m).callee).kind == ((NU8) 10));
				if (!(LOC17)) goto LA18;
				LOC17 = !((((*argtype).flags &(1<<((((NU8) 23))&31)))!=0));
				LA18: ;
				if (!LOC17) goto LA19;
				LOC21 = 0;
				LOC21 = maketypefromexpr_245727(c, arg);
				result = newnodeit_193807(((NU8) 4), (*argorig).info, LOC21);
				goto BeforeRet;
			}
			LA19: ;
		}
		goto LA11;
		LA13: ;
		{
			Tnode191813* evaluated;
			evaluated = (*c).semtryconstexpr(c, arg);
			{
				TY350187 LOC27;
				if (!!((evaluated == NIM_NIL))) goto LA25;
				asgnRefNoCycle((void**) (&(*arg).typ), newtypes_245219(((NU8) 59), c));
				if ((*(*arg).typ).sons) nimGCunrefNoCycle((*(*arg).typ).sons);
				(*(*arg).typ).sons = (Ttypeseq191845*) newSeqRC1((&NTI191845), 1);
				memset((void*)LOC27, 0, sizeof(LOC27));
				LOC27[0] = (*evaluated).typ;
				asgnRefNoCycle((void**) (&(*(*arg).typ).sons->data[0]), LOC27[0]);
				asgnRefNoCycle((void**) (&(*(*arg).typ).n), evaluated);
				argtype = (*arg).typ;
			}
			LA25: ;
		}
		LA11: ;
	}
	LA3: ;
	{
		if (!(((NI) 0) < (*c).intypeclass)) goto LA30;
		a = skiptypes_195167(argtype, IL64(2305843009213694208));
	}
	goto LA28;
	LA30: ;
	{
		a = argtype;
	}
	LA28: ;
	r = typerel_346064(m, f, a, NIM_TRUE);
	{
		NIM_BOOL LOC35;
		NIM_BOOL LOC36;
		LOC35 = 0;
		LOC36 = 0;
		LOC36 = !((r == ((NU8) 0)));
		if (!(LOC36)) goto LA37;
		LOC36 = !(((*m).calleesym == NIM_NIL));
		LA37: ;
		LOC35 = LOC36;
		if (!(LOC35)) goto LA38;
		LOC35 = ((393216 &(1<<(((*(*m).calleesym).kind)&31)))!=0);
		LA38: ;
		if (!LOC35) goto LA39;
		incmatches_350036(m, r, ((NI) 1));
		{
			if (!((*f).kind == ((NU8) 7))) goto LA43;
			result = arg;
			goto BeforeRet;
		}
		goto LA41;
		LA43: ;
		{
			if (!((*f).kind == ((NU8) 8))) goto LA46;
			result = arg;
			goto BeforeRet;
		}
		goto LA41;
		LA46: ;
		{
			if (!((*f).kind == ((NU8) 59))) goto LA49;
			result = (*(*arg).typ).n;
			goto BeforeRet;
		}
		goto LA41;
		LA49: ;
		{
			result = argsemantized;
			goto BeforeRet;
		}
		LA41: ;
	}
	LA39: ;
	{
		NIM_BOOL LOC54;
		Ttype191849* inlined;
		TY350187 LOC58;
		LOC54 = 0;
		LOC54 = !((r == ((NU8) 0)));
		if (!(LOC54)) goto LA55;
		LOC54 = isinlineiterator_349999(f);
		LA55: ;
		if (!LOC54) goto LA56;
		inlined = newtypes_245219(((NU8) 59), c);
		if ((*inlined).sons) nimGCunrefNoCycle((*inlined).sons);
		(*inlined).sons = (Ttypeseq191845*) newSeqRC1((&NTI191845), 1);
		memset((void*)LOC58, 0, sizeof(LOC58));
		LOC58[0] = argtype;
		asgnRefNoCycle((void**) (&(*inlined).sons->data[0]), LOC58[0]);
		asgnRefNoCycle((void**) (&(*inlined).n), argsemantized);
		put_345289((&(*m).bindings), f, inlined);
		result = argsemantized;
		goto BeforeRet;
	}
	LA56: ;
	switch (r) {
	case ((NU8) 1):
	{
		(*m).convmatches += ((NI) 1);
		result = implicitconv_349761(((NU8) 58), f, arg, (&(*m)), c);
	}
	break;
	case ((NU8) 2):
	{
		(*m).intconvmatches += ((NI) 1);
		result = implicitconv_349761(((NU8) 58), f, arg, (&(*m)), c);
	}
	break;
	case ((NU8) 3):
	{
		(*m).subtypematches += ((NI) 1);
		result = implicitconv_349761(((NU8) 59), f, arg, (&(*m)), c);
	}
	break;
	case ((NU8) 4):
	{
		(*m).subtypematches += ((NI) 1);
		{
			if (!((*f).kind == ((NU8) 23))) goto LA65;
			result = arg;
		}
		goto LA63;
		LA65: ;
		{
			result = implicitconv_349761(((NU8) 58), f, arg, (&(*m)), c);
		}
		LA63: ;
	}
	break;
	case ((NU8) 5):
	case ((NU8) 6):
	{
		{
			if (!((*arg).kind >= ((NU8) 51) && (*arg).kind <= ((NU8) 52) || (*arg).kind == ((NU8) 79) || (*arg).kind == ((NU8) 84))) goto LA71;
			result = (*c).seminferredlambda.ClEnv? (*c).seminferredlambda.ClPrc(c, (*m).bindings, arg, (*c).seminferredlambda.ClEnv):((TMP2660)((*c).seminferredlambda.ClPrc))(c, (*m).bindings, arg);
		}
		goto LA69;
		LA71: ;
		{
			Tsym191843* inferred;
			inferred = (*c).semgenerateinstance.ClEnv? (*c).semgenerateinstance.ClPrc(c, (*arg).kindU.S4.sym, (*m).bindings, (*arg).info, (*c).semgenerateinstance.ClEnv):((TMP2661)((*c).semgenerateinstance.ClPrc))(c, (*arg).kindU.S4.sym, (*m).bindings, (*arg).info);
			result = newsymnode_193338(inferred, (*arg).info);
		}
		LA69: ;
		{
			if (!(r == ((NU8) 6))) goto LA76;
			(*m).convmatches += ((NI) 1);
			result = implicitconv_349761(((NU8) 58), f, result, (&(*m)), c);
		}
		goto LA74;
		LA76: ;
		{
			(*m).genericmatches += ((NI) 1);
		}
		LA74: ;
	}
	break;
	case ((NU8) 7):
	{
		(*m).genericmatches += ((NI) 1);
		{
			if (!((*arg).typ == NIM_NIL)) goto LA82;
			result = arg;
		}
		goto LA80;
		LA82: ;
		{
			Ttype191849* LOC85;
			LOC85 = 0;
			LOC85 = skiptypes_195167((*arg).typ, IL64(211106240964608));
			if (!((*LOC85).kind == ((NU8) 18))) goto LA86;
			result = implicitconv_349761(((NU8) 59), f, arg, (&(*m)), c);
		}
		goto LA80;
		LA86: ;
		{
			NIM_BOOL LOC89;
			LOC89 = 0;
			LOC89 = isemptycontainer_230978((*arg).typ);
			if (!LOC89) goto LA90;
			result = copytree_196028(arg);
			asgnRefNoCycle((void**) (&(*result).typ), getinstantiatedtype_349724(c, arg, (&(*m)), f));
		}
		goto LA80;
		LA90: ;
		{
			result = arg;
		}
		LA80: ;
	}
	break;
	case ((NU8) 8):
	{
		(*m).intconvmatches += ((NI) 256);
		result = implicitconv_349761(((NU8) 58), f, arg, (&(*m)), c);
	}
	break;
	case ((NU8) 9):
	{
		(*m).exactmatches += ((NI) 1);
		result = arg;
		{
			Ttype191849* LOC97;
			LOC97 = 0;
			LOC97 = skiptypes_195167(f, IL64(211106240964608));
			if (!((*LOC97).kind == ((NU8) 18))) goto LA98;
			result = implicitconv_349761(((NU8) 59), f, arg, (&(*m)), c);
		}
		LA98: ;
	}
	break;
	case ((NU8) 0):
	{
		{
			if (!((*a).kind == ((NU8) 50) || (*a).kind == ((NU8) 60))) goto LA103;
			(*m).genericmatches += ((NI) 1);
			(*m).fauxmatch = (*a).kind;
			result = arg;
			goto BeforeRet;
		}
		LA103: ;
		result = userconvmatch_349796(c, m, f, a, arg);
		{
			NIM_BOOL LOC107;
			LOC107 = 0;
			LOC107 = (result == NIM_NIL);
			if (!(LOC107)) goto LA108;
			LOC107 = ((*f).kind == ((NU8) 48));
			LA108: ;
			if (!LOC107) goto LA109;
			{
				if (!!(((*f).n == NIM_NIL))) goto LA113;
				result = localconvmatch_349902(c, m, f, a, arg);
			}
			goto LA111;
			LA113: ;
			{
				Ttype191849* LOC116;
				LOC116 = 0;
				LOC116 = base_221039(f);
				r = typerel_346064(m, LOC116, a, NIM_TRUE);
				{
					if (!(((NU8) 7) <= r)) goto LA119;
					(*m).convmatches += ((NI) 1);
					result = copytree_196028(arg);
					{
						Ttype191849* LOC125;
						if (!(r == ((NU8) 7))) goto LA123;
						LOC125 = 0;
						LOC125 = base_221039(f);
						asgnRefNoCycle((void**) (&(*result).typ), getinstantiatedtype_349724(c, arg, (&(*m)), LOC125));
					}
					LA123: ;
					(*m).basetypematch = NIM_TRUE;
				}
				goto LA117;
				LA119: ;
				{
					Ttype191849* LOC127;
					LOC127 = 0;
					LOC127 = base_221039(f);
					result = userconvmatch_349796(c, m, LOC127, a, arg);
				}
				LA117: ;
			}
			LA111: ;
		}
		LA109: ;
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(void, copycandidate_345490)(Tcandidate345209* a, Tcandidate345209* b) {
	unsureAsgnRef((void**) (&(*a).c), (*b).c);
	(*a).exactmatches = (*b).exactmatches;
	(*a).subtypematches = (*b).subtypematches;
	(*a).convmatches = (*b).convmatches;
	(*a).intconvmatches = (*b).intconvmatches;
	(*a).genericmatches = (*b).genericmatches;
	(*a).state = (*b).state;
	unsureAsgnRef((void**) (&(*a).callee), (*b).callee);
	unsureAsgnRef((void**) (&(*a).calleesym), (*b).calleesym);
	unsureAsgnRef((void**) (&(*a).call), copytree_196028((*b).call));
	(*a).basetypematch = (*b).basetypematch;
	copyidtable_193091((&(*a).bindings), (*b).bindings);
}

N_NIMCALL(NI, sumgeneric_345502)(Ttype191849* t_345504) {
	NI result;
	Ttype191849* t;
	NI isvar;
{	result = 0;
	t = t_345504;
	isvar = ((NI) 1);
	{
		while (1) {
			switch ((*t).kind) {
			case ((NU8) 11):
			case ((NU8) 16):
			case ((NU8) 22):
			case ((NU8) 21):
			case ((NU8) 13):
			case ((NU8) 4):
			case ((NU8) 27):
			case ((NU8) 48):
			case ((NU8) 19):
			case ((NU8) 20):
			case ((NU8) 24):
			case ((NU8) 10):
			{
				t = lastson_194442(t);
				result += ((NI) 1);
			}
			break;
			case ((NU8) 23):
			{
				t = (*t).sons->data[((NI) 0)];
				result += ((NI) 1);
				isvar += ((NI) 1);
			}
			break;
			case ((NU8) 9):
			case ((NU8) 18):
			{
				result += ((NI) (((*t).kind == ((NU8) 9))));
				{
					NI i_345579;
					NI HEX3Atmp_345591;
					NI LOC7;
					NI res_345594;
					i_345579 = 0;
					HEX3Atmp_345591 = 0;
					LOC7 = 0;
					LOC7 = len_194377(t);
					HEX3Atmp_345591 = (LOC7 - 1);
					res_345594 = ((NI) 0);
					{
						while (1) {
							NI LOC10;
							if (!(res_345594 <= HEX3Atmp_345591)) goto LA9;
							i_345579 = res_345594;
							LOC10 = 0;
							LOC10 = sumgeneric_345502((*t).sons->data[i_345579]);
							result += LOC10;
							res_345594 += ((NI) 1);
						} LA9: ;
					}
				}
				goto LA1;
			}
			break;
			case ((NU8) 12):
			case ((NU8) 6):
			case ((NU8) 59):
			case ((NU8) 7):
			case ((NU8) 8):
			{
				goto LA1;
			}
			break;
			case ((NU8) 1):
			case ((NU8) 2):
			case ((NU8) 14):
			case ((NU8) 17):
			case ((NU8) 25):
			case ((NU8) 26):
			case ((NU8) 28):
			case ((NU8) 29):
			case ((NU8) 31) ... ((NU8) 35):
			case ((NU8) 36) ... ((NU8) 39):
			case ((NU8) 40) ... ((NU8) 44):
			{
				result = isvar;
				goto BeforeRet;
			}
			break;
			default:
			{
				result = ((NI) 0);
				goto BeforeRet;
			}
			break;
			}
		}
	} LA1: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NI, complexdisambiguation_345619)(Ttype191849* a, Ttype191849* b) {
	NI result;
	NI winner;
{	result = 0;
	winner = ((NI) 0);
	{
		NI i_345647;
		NI HEX3Atmp_345802;
		NI LOC2;
		NI LOC3;
		NI res_345805;
		i_345647 = 0;
		HEX3Atmp_345802 = 0;
		LOC2 = 0;
		LOC2 = len_194377(a);
		LOC3 = 0;
		LOC3 = len_194377(b);
		HEX3Atmp_345802 = (((LOC2 <= LOC3) ? LOC2 : LOC3) - 1);
		res_345805 = ((NI) 1);
		{
			while (1) {
				NI x;
				NI y;
				if (!(res_345805 <= HEX3Atmp_345802)) goto LA5;
				i_345647 = res_345805;
				x = sumgeneric_345502((*a).sons->data[i_345647]);
				y = sumgeneric_345502((*b).sons->data[i_345647]);
				{
					if (!!((x == y))) goto LA8;
					{
						if (!(winner == ((NI) 0))) goto LA12;
						{
							if (!(y < x)) goto LA16;
							winner = ((NI) 1);
						}
						goto LA14;
						LA16: ;
						{
							winner = ((NI) -1);
						}
						LA14: ;
					}
					goto LA10;
					LA12: ;
					{
						if (!(y < x)) goto LA20;
						{
							if (!!((winner == ((NI) 1)))) goto LA24;
							result = ((NI) 0);
							goto BeforeRet;
						}
						LA24: ;
					}
					goto LA10;
					LA20: ;
					{
						{
							if (!!((winner == ((NI) -1)))) goto LA29;
							result = ((NI) 0);
							goto BeforeRet;
						}
						LA29: ;
					}
					LA10: ;
				}
				LA8: ;
				res_345805 += ((NI) 1);
			} LA5: ;
		}
	}
	result = winner;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NI, cmpcandidates_345824)(Tcandidate345209* a, Tcandidate345209* b) {
	NI result;
{	result = 0;
	result = (NI)((*a).exactmatches - (*b).exactmatches);
	{
		if (!!((result == ((NI) 0)))) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	result = (NI)((*a).genericmatches - (*b).genericmatches);
	{
		if (!!((result == ((NI) 0)))) goto LA7;
		goto BeforeRet;
	}
	LA7: ;
	result = (NI)((*a).subtypematches - (*b).subtypematches);
	{
		if (!!((result == ((NI) 0)))) goto LA11;
		goto BeforeRet;
	}
	LA11: ;
	result = (NI)((*a).intconvmatches - (*b).intconvmatches);
	{
		if (!!((result == ((NI) 0)))) goto LA15;
		goto BeforeRet;
	}
	LA15: ;
	result = (NI)((*a).convmatches - (*b).convmatches);
	{
		if (!!((result == ((NI) 0)))) goto LA19;
		goto BeforeRet;
	}
	LA19: ;
	result = (NI)((*a).calleescope - (*b).calleescope);
	{
		if (!!((result == ((NI) 0)))) goto LA23;
		goto BeforeRet;
	}
	LA23: ;
	result = (NI)((*b).inheritancepenalty - (*a).inheritancepenalty);
	{
		if (!!((result == ((NI) 0)))) goto LA27;
		goto BeforeRet;
	}
	LA27: ;
	result = complexdisambiguation_345619((*a).callee, (*b).callee);
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Tnode191813*, paramtypesmatch_350556)(Tcandidate345209* m, Ttype191849* f, Ttype191849* a, Tnode191813* arg, Tnode191813* argorig) {
	Tnode191813* result;
	result = 0;
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = (arg == NIM_NIL);
		if (LOC3) goto LA4;
		LOC3 = !(((*arg).kind == ((NU8) 56) || (*arg).kind == ((NU8) 57)));
		LA4: ;
		if (!LOC3) goto LA5;
		result = paramtypesmatchaux_350103(m, f, a, arg, argorig);
	}
	goto LA1;
	LA5: ;
	{
		Tcontext245023* c;
		Tcandidate345209 x;
		Tcandidate345209 y;
		Tcandidate345209 z;
		NI best;
		c = (*m).c;
		memset((void*)(&x), 0, sizeof(x));
		memset((void*)(&y), 0, sizeof(y));
		memset((void*)(&z), 0, sizeof(z));
		initcandidate_345276(c, (&x), (*m).callee);
		initcandidate_345276(c, (&y), (*m).callee);
		initcandidate_345276(c, (&z), (*m).callee);
		x.calleesym = (*m).calleesym;
		y.calleesym = (*m).calleesym;
		z.calleesym = (*m).calleesym;
		best = ((NI) -1);
		{
			NI i_350607;
			NI HEX3Atmp_350807;
			NI LOC9;
			NI res_350810;
			i_350607 = 0;
			HEX3Atmp_350807 = 0;
			LOC9 = 0;
			LOC9 = sonslen_194403(arg);
			HEX3Atmp_350807 = (NI)(LOC9 - ((NI) 1));
			res_350810 = ((NI) 0);
			{
				while (1) {
					if (!(res_350810 <= HEX3Atmp_350807)) goto LA11;
					i_350607 = res_350810;
					{
						NU8 r;
						if (!((126976 &(1<<(((*(*(*arg).kindU.S6.sons->data[i_350607]).kindU.S4.sym).kind)&31)))!=0)) goto LA14;
						copycandidate_345490((&z), (&(*m)));
						z.callee = (*(*arg).kindU.S6.sons->data[i_350607]).typ;
						z.calleesym = (*(*arg).kindU.S6.sons->data[i_350607]).kindU.S4.sym;
						r = typerel_346064((&z), f, (*(*arg).kindU.S6.sons->data[i_350607]).typ, NIM_TRUE);
						incmatches_350036((&z), r, ((NI) 2));
						{
							if (!!((r == ((NU8) 0)))) goto LA18;
							z.state = ((NU8) 1);
							switch (x.state) {
							case ((NU8) 0):
							case ((NU8) 2):
							{
								genericAssign((void*)(&x), (void*)(&z), (&NTI345209));
								best = i_350607;
							}
							break;
							case ((NU8) 1):
							{
								NI cmp;
								cmp = cmpcandidates_345824((&x), (&z));
								{
									if (!(cmp < ((NI) 0))) goto LA24;
									best = i_350607;
									genericAssign((void*)(&x), (void*)(&z), (&NTI345209));
								}
								goto LA22;
								LA24: ;
								{
									if (!(cmp == ((NI) 0))) goto LA27;
									genericAssign((void*)(&y), (void*)(&z), (&NTI345209));
								}
								goto LA22;
								LA27: ;
								LA22: ;
							}
							break;
							}
						}
						LA18: ;
					}
					LA14: ;
					res_350810 += ((NI) 1);
				} LA11: ;
			}
		}
		{
			if (!(x.state == ((NU8) 0))) goto LA31;
			result = NIM_NIL;
		}
		goto LA29;
		LA31: ;
		{
			NIM_BOOL LOC34;
			NI LOC36;
			LOC34 = 0;
			LOC34 = (y.state == ((NU8) 1));
			if (!(LOC34)) goto LA35;
			LOC36 = 0;
			LOC36 = cmpcandidates_345824((&x), (&y));
			LOC34 = (LOC36 == ((NI) 0));
			LA35: ;
			if (!LOC34) goto LA37;
			{
				if (!!((x.state == ((NU8) 1)))) goto LA41;
				internalerror_166199((*arg).info, ((NimStringDesc*) &TMP2670));
			}
			LA41: ;
			{
				if (!((*f).kind == ((NU8) 6))) goto LA45;
				result = arg;
			}
			goto LA43;
			LA45: ;
			{
				result = NIM_NIL;
			}
			LA43: ;
		}
		goto LA29;
		LA37: ;
		{
			markused_345251((*arg).info, (*(*arg).kindU.S6.sons->data[best]).kindU.S4.sym);
			result = paramtypesmatchaux_350103(m, f, (*(*arg).kindU.S6.sons->data[best]).typ, (*arg).kindU.S6.sons->data[best], argorig);
		}
		LA29: ;
	}
	LA1: ;
	return result;
}

N_NIMCALL(NIM_BOOL, argtypematches_351522)(Tcontext245023* c, Ttype191849* f, Ttype191849* a) {
	NIM_BOOL result;
	Tcandidate345209 m;
	Tnode191813* res;
	result = 0;
	memset((void*)(&m), 0, sizeof(m));
	initcandidate_345276(c, (&m), f);
	res = paramtypesmatch_350556((&m), f, a, emptynode_192807, NIM_NIL);
	result = !((res == NIM_NIL));
	return result;
}

static N_INLINE(NIM_BOOL, typefits_353941)(Tcontext245023* c, Tsym191843* s, Ttype191849* firstarg) {
	NIM_BOOL result;
{	result = 0;
	{
		NIM_BOOL LOC3;
		NIM_BOOL LOC4;
		NI LOC6;
		Tsym191843* m;
		LOC3 = 0;
		LOC4 = 0;
		LOC4 = !(((*s).typ == NIM_NIL));
		if (!(LOC4)) goto LA5;
		LOC6 = 0;
		LOC6 = sonslen_194351((*s).typ);
		LOC4 = (((NI) 1) < LOC6);
		LA5: ;
		LOC3 = LOC4;
		if (!(LOC3)) goto LA7;
		LOC3 = !(((*(*s).typ).sons->data[((NI) 1)] == NIM_NIL));
		LA7: ;
		if (!LOC3) goto LA8;
		m = getmodule_199243(s);
		{
			NIM_BOOL LOC12;
			Ttype191849* exp;
			LOC12 = 0;
			LOC12 = !((m == NIM_NIL));
			if (!(LOC12)) goto LA13;
			LOC12 = (((*m).flags &(1<<((((NU8) 13))&31)))!=0);
			LA13: ;
			if (!LOC12) goto LA14;
			{
				if (!((*s).kind == ((NU8) 7))) goto LA18;
				goto BeforeRet;
			}
			LA18: ;
			exp = skiptypes_195167((*(*s).typ).sons->data[((NI) 1)], 8390656);
			{
				if (!((*exp).kind == ((NU8) 48))) goto LA22;
				exp = elemtype_221522(exp);
			}
			LA22: ;
			{
				if (!((*exp).kind == ((NU8) 6) || (*exp).kind == ((NU8) 7) || (*exp).kind == ((NU8) 12) || (*exp).kind == ((NU8) 58))) goto LA26;
				goto BeforeRet;
			}
			LA26: ;
		}
		LA14: ;
		result = argtypematches_351522(c, (*(*s).typ).sons->data[((NI) 1)], firstarg);
	}
	LA8: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(void, suggestoperations_354035)(Tcontext245023* c, Tnode191813* n, Ttype191849* typ, NI* outputs) {
	NIM_BOOL islocal_354202;
	islocal_354202 = NIM_TRUE;
	{
		Tscope191837* scope_354204;
		Tscope191837* HEX3Atmp_354318;
		Tscope191837* current_354321;
		scope_354204 = 0;
		HEX3Atmp_354318 = 0;
		HEX3Atmp_354318 = (*c).currentscope;
		current_354321 = HEX3Atmp_354318;
		{
			while (1) {
				Tsymseq191815* entries_354206;
				Tsymseq191815* result_354225;
				TY352525 LOC11;
				if (!!((current_354321 == NIM_NIL))) goto LA3;
				scope_354204 = current_354321;
				{
					if (!(scope_354204 == (*c).toplevelscope)) goto LA6;
					islocal_354202 = NIM_FALSE;
				}
				LA6: ;
				result_354225 = (Tsymseq191815*) newSeq((&NTI191815), 0);
				{
					Tsym191843* x_354227;
					Tstrtable191817 HEX3Atmp_354306;
					Ttabiter199119 it_354309;
					Tsym191843* s_354311;
					x_354227 = 0;
					memset((void*)(&HEX3Atmp_354306), 0, sizeof(HEX3Atmp_354306));
					HEX3Atmp_354306.counter = (*scope_354204).symbols.counter;
					HEX3Atmp_354306.data = (*scope_354204).symbols.data;
					memset((void*)(&it_354309), 0, sizeof(it_354309));
					s_354311 = inittabiter_199124((&it_354309), HEX3Atmp_354306);
					{
						while (1) {
							if (!!((s_354311 == NIM_NIL))) goto LA10;
							x_354227 = s_354311;
							result_354225 = (Tsymseq191815*) incrSeq(&(result_354225)->Sup, sizeof(Tsym191843*));
							asgnRefNoCycle((void**) (&result_354225->data[result_354225->Sup.len-1]), x_354227);
							s_354311 = nextiter_199132((&it_354309), HEX3Atmp_354306);
						} LA10: ;
					}
				}
				genericSeqAssign((&entries_354206), result_354225, (&NTI191815));
				memset((void*)(&LOC11), 0, sizeof(LOC11));
				LOC11.ClPrc = ((TMP2623) (HEX3Aanonymous_354257)); LOC11.ClEnv = NIM_NIL;
				sort_352518(entries_354206->data, entries_354206->Sup.len, LOC11, ((NU8) 1));
				{
					Tsym191843* item_354212;
					NI i_354315;
					NI L_354317;
					item_354212 = 0;
					i_354315 = ((NI) 0);
					L_354317 = (entries_354206 ? entries_354206->Sup.len : 0);
					{
						while (1) {
							Tsym191843* it;
							if (!(i_354315 < L_354317)) goto LA14;
							item_354212 = entries_354206->data[i_354315];
							it = item_354212;
							{
								NIM_BOOL LOC17;
								NimStringDesc* LOC21;
								LOC17 = 0;
								LOC17 = filtersymnoopr_352031(it);
								if (!(LOC17)) goto LA18;
								LOC17 = typefits_353941(c, it, typ);
								LA18: ;
								if (!LOC17) goto LA19;
								LOC21 = 0;
								LOC21 = symtostr_352005(it, islocal_354202, ((NimStringDesc*) &TMP2620));
								suggestwriteln_165069(LOC21);
								(*outputs) += ((NI) 1);
							}
							LA19: ;
							i_354315 += ((NI) 1);
						} LA14: ;
					}
				}
				current_354321 = (*current_354321).parent;
			} LA3: ;
		}
	}
}

N_NIMCALL(void, suggestobject_352318)(Tcontext245023* c, Tnode191813* n, NI* outputs) {
	switch ((*n).kind) {
	case ((NU8) 138):
	{
		{
			NI i_352336;
			NI HEX3Atmp_352356;
			NI LOC3;
			NI res_352359;
			i_352336 = 0;
			HEX3Atmp_352356 = 0;
			LOC3 = 0;
			LOC3 = sonslen_194403(n);
			HEX3Atmp_352356 = (NI)(LOC3 - ((NI) 1));
			res_352359 = ((NI) 0);
			{
				while (1) {
					if (!(res_352359 <= HEX3Atmp_352356)) goto LA5;
					i_352336 = res_352359;
					suggestobject_352318(c, (*n).kindU.S6.sons->data[i_352336], outputs);
					res_352359 += ((NI) 1);
				} LA5: ;
			}
		}
	}
	break;
	case ((NU8) 139):
	{
		NI L;
		L = sonslen_194403(n);
		{
			if (!(((NI) 0) < L)) goto LA9;
			suggestobject_352318(c, (*n).kindU.S6.sons->data[((NI) 0)], outputs);
			{
				NI i_352352;
				NI HEX3Atmp_352364;
				NI res_352367;
				i_352352 = 0;
				HEX3Atmp_352364 = 0;
				HEX3Atmp_352364 = (NI)(L - ((NI) 1));
				res_352367 = ((NI) 1);
				{
					while (1) {
						Tnode191813* LOC14;
						if (!(res_352367 <= HEX3Atmp_352364)) goto LA13;
						i_352352 = res_352367;
						LOC14 = 0;
						LOC14 = lastson_194431((*n).kindU.S6.sons->data[i_352352]);
						suggestobject_352318(c, LOC14, outputs);
						res_352367 += ((NI) 1);
					} LA13: ;
				}
			}
		}
		LA9: ;
	}
	break;
	case ((NU8) 3):
	{
		suggestfield_352232(c, (*n).kindU.S4.sym, outputs);
	}
	break;
	default:
	{
	}
	break;
	}
}

N_NIMCALL(void, suggestfieldaccess_354428)(Tcontext245023* c, Tnode191813* n, NI* outputs) {
	Ttype191849* typ;
	typ = (*n).typ;
	{
		if (!(typ == NIM_NIL)) goto LA3;
		{
			NIM_BOOL LOC7;
			LOC7 = 0;
			LOC7 = ((*n).kind == ((NU8) 3));
			if (!(LOC7)) goto LA8;
			LOC7 = ((*(*n).kindU.S4.sym).kind == ((NU8) 6));
			LA8: ;
			if (!LOC7) goto LA9;
			{
				if (!((*n).kindU.S4.sym == (*c).module)) goto LA13;
				{
					Tsym191843* it_354478;
					Tstrtable191817 HEX3Atmp_354587;
					Ttabiter199119 it_354590;
					Tsym191843* s_354592;
					it_354478 = 0;
					memset((void*)(&HEX3Atmp_354587), 0, sizeof(HEX3Atmp_354587));
					HEX3Atmp_354587.counter = (*(*c).toplevelscope).symbols.counter;
					HEX3Atmp_354587.data = (*(*c).toplevelscope).symbols.data;
					memset((void*)(&it_354590), 0, sizeof(it_354590));
					s_354592 = inittabiter_199124((&it_354590), HEX3Atmp_354587);
					{
						while (1) {
							if (!!((s_354592 == NIM_NIL))) goto LA17;
							it_354478 = s_354592;
							{
								NIM_BOOL LOC20;
								NimStringDesc* LOC23;
								LOC20 = 0;
								LOC20 = filtersym_352015(it_354478);
								if (!LOC20) goto LA21;
								LOC23 = 0;
								LOC23 = symtostr_352005(it_354478, NIM_FALSE, ((NimStringDesc*) &TMP2620));
								suggestwriteln_165069(LOC23);
								(*outputs) += ((NI) 1);
							}
							LA21: ;
							s_354592 = nextiter_199132((&it_354590), HEX3Atmp_354587);
						} LA17: ;
					}
				}
			}
			goto LA11;
			LA13: ;
			{
				{
					Tsym191843* it_354490;
					Tstrtable191817 HEX3Atmp_354594;
					Ttabiter199119 it_354597;
					Tsym191843* s_354599;
					it_354490 = 0;
					memset((void*)(&HEX3Atmp_354594), 0, sizeof(HEX3Atmp_354594));
					HEX3Atmp_354594.counter = (*(*n).kindU.S4.sym).kindU.S3.tab.counter;
					HEX3Atmp_354594.data = (*(*n).kindU.S4.sym).kindU.S3.tab.data;
					memset((void*)(&it_354597), 0, sizeof(it_354597));
					s_354599 = inittabiter_199124((&it_354597), HEX3Atmp_354594);
					{
						while (1) {
							if (!!((s_354599 == NIM_NIL))) goto LA27;
							it_354490 = s_354599;
							{
								NIM_BOOL LOC30;
								NimStringDesc* LOC33;
								LOC30 = 0;
								LOC30 = filtersym_352015(it_354490);
								if (!LOC30) goto LA31;
								LOC33 = 0;
								LOC33 = symtostr_352005(it_354490, NIM_FALSE, ((NimStringDesc*) &TMP2620));
								suggestwriteln_165069(LOC33);
								(*outputs) += ((NI) 1);
							}
							LA31: ;
							s_354599 = nextiter_199132((&it_354597), HEX3Atmp_354594);
						} LA27: ;
					}
				}
			}
			LA11: ;
		}
		goto LA5;
		LA9: ;
		{
			suggesteverything_354355(c, n, outputs);
		}
		LA5: ;
	}
	goto LA1;
	LA3: ;
	{
		NIM_BOOL LOC36;
		NIM_BOOL LOC37;
		Ttype191849* t;
		LOC36 = 0;
		LOC37 = 0;
		LOC37 = ((*typ).kind == ((NU8) 14));
		if (!(LOC37)) goto LA38;
		LOC37 = ((*n).kind == ((NU8) 3));
		LA38: ;
		LOC36 = LOC37;
		if (!(LOC36)) goto LA39;
		LOC36 = ((*(*n).kindU.S4.sym).kind == ((NU8) 7));
		LA39: ;
		if (!LOC36) goto LA40;
		t = typ;
		{
			while (1) {
				if (!!((t == NIM_NIL))) goto LA43;
				suggestsymlist_352267(c, (*t).n, outputs);
				t = (*t).sons->data[((NI) 0)];
			} LA43: ;
		}
		suggestoperations_354035(c, n, typ, outputs);
	}
	goto LA1;
	LA40: ;
	{
		typ = skiptypes_195167(typ, 14682112);
		{
			Ttype191849* t;
			if (!((*typ).kind == ((NU8) 17))) goto LA47;
			t = typ;
			{
				while (1) {
					suggestobject_352318(c, (*t).n, outputs);
					{
						if (!((*t).sons->data[((NI) 0)] == NIM_NIL)) goto LA53;
						goto LA49;
					}
					LA53: ;
					t = skiptypes_195167((*t).sons->data[((NI) 0)], 2048);
				}
			} LA49: ;
			suggestoperations_354035(c, n, typ, outputs);
		}
		goto LA45;
		LA47: ;
		{
			NIM_BOOL LOC56;
			LOC56 = 0;
			LOC56 = ((*typ).kind == ((NU8) 18));
			if (!(LOC56)) goto LA57;
			LOC56 = !(((*typ).n == NIM_NIL));
			LA57: ;
			if (!LOC56) goto LA58;
			suggestsymlist_352267(c, (*typ).n, outputs);
			suggestoperations_354035(c, n, typ, outputs);
		}
		goto LA45;
		LA58: ;
		{
			suggestoperations_354035(c, n, typ, outputs);
		}
		LA45: ;
	}
	LA1: ;
}

N_NIMCALL(Tnode191813*, findclosestcall_354721)(Tnode191813* n) {
	Tnode191813* result;
{	result = 0;
	{
		NIM_BOOL LOC3;
		NU8 LOC5;
		LOC3 = 0;
		LOC3 = ((*n).kind == ((NU8) 27) || (*n).kind == ((NU8) 29) || (*n).kind == ((NU8) 30) || (*n).kind == ((NU8) 31) || (*n).kind == ((NU8) 26) || (*n).kind == ((NU8) 28) || (*n).kind == ((NU8) 32));
		if (!(LOC3)) goto LA4;
		LOC5 = 0;
		LOC5 = incheckpoint_354640((*n).info);
		LOC3 = (LOC5 == ((NU8) 2));
		LA4: ;
		if (!LOC3) goto LA6;
		result = n;
	}
	goto LA1;
	LA6: ;
	{
		{
			NI i_354762;
			NI HEX3Atmp_354777;
			NI LOC10;
			NI res_354780;
			i_354762 = 0;
			HEX3Atmp_354777 = 0;
			LOC10 = 0;
			LOC10 = safelen_192125(n);
			HEX3Atmp_354777 = (LOC10 - 1);
			res_354780 = ((NI) 0);
			{
				while (1) {
					if (!(res_354780 <= HEX3Atmp_354777)) goto LA12;
					i_354762 = res_354780;
					result = findclosestcall_354721((*n).kindU.S6.sons->data[i_354762]);
					{
						if (!!((result == NIM_NIL))) goto LA15;
						goto BeforeRet;
					}
					LA15: ;
					res_354780 += ((NI) 1);
				} LA12: ;
			}
		}
	}
	LA1: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NI, HEX3Aanonymous_352507)(Tsym191843* a_352458, Tsym191843* b_352460) {
	NI result;
{	result = 0;
	result = cmp_4717((*(*a_352458).name).s, (*(*b_352460).name).s);
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, namefits_352392)(Tcontext245023* c, Tsym191843* s, Tnode191813* n) {
	NIM_BOOL result;
	Tnode191813* op;
	Tident168021* opr;
{	result = 0;
	op = (*n).kindU.S6.sons->data[((NI) 0)];
	{
		if (!((*op).kind == ((NU8) 57) || (*op).kind == ((NU8) 56))) goto LA3;
		op = (*op).kindU.S6.sons->data[((NI) 0)];
	}
	LA3: ;
	opr = 0;
	switch ((*op).kind) {
	case ((NU8) 3):
	{
		opr = (*(*op).kindU.S4.sym).name;
	}
	break;
	case ((NU8) 2):
	{
		opr = (*op).kindU.S5.ident;
	}
	break;
	default:
	{
		result = NIM_FALSE;
		goto BeforeRet;
	}
	break;
	}
	result = ((*opr).Sup.id == (*(*s).name).Sup.id);
	}BeforeRet: ;
	return result;
}

N_NIMCALL(void, initcandidate_345301)(Tcontext245023* ctx, Tcandidate345209* c, Tsym191843* callee, Tnode191813* binding, NI calleescope) {
	initcandidateaux_345264(ctx, c, (*callee).typ);
	unsureAsgnRef((void**) (&(*c).calleesym), callee);
	{
		NIM_BOOL LOC3;
		LOC3 = 0;
		LOC3 = ((520192 &(1<<(((*callee).kind)&31)))!=0);
		if (!(LOC3)) goto LA4;
		LOC3 = (calleescope == ((NI) -1));
		LA4: ;
		if (!LOC3) goto LA5;
		{
			Tsym191843* LOC9;
			Tsym191843* owner;
			LOC9 = 0;
			LOC9 = originatingmodule_196736(callee);
			if (!(LOC9 == (*ctx).module)) goto LA10;
			(*c).calleescope = ((NI) 2);
			owner = callee;
			{
				while (1) {
					owner = skipgenericowner_196695(owner);
					{
						if (!((*owner).kind == ((NU8) 6))) goto LA16;
						goto LA12;
					}
					LA16: ;
					(*c).calleescope += ((NI) 1);
				}
			} LA12: ;
		}
		goto LA7;
		LA10: ;
		{
			(*c).calleescope = ((NI) 1);
		}
		LA7: ;
	}
	goto LA1;
	LA5: ;
	{
		(*c).calleescope = calleescope;
	}
	LA1: ;
	initidtable_195057((&(*c).bindings));
	genericSeqAssign((&(*c).errors), NIM_NIL, (&NTI191815));
	{
		NIM_BOOL LOC22;
		Tnode191813* typeparams;
		LOC22 = 0;
		LOC22 = !((binding == NIM_NIL));
		if (!(LOC22)) goto LA23;
		LOC22 = ((520192 &(1<<(((*callee).kind)&31)))!=0);
		LA23: ;
		if (!LOC22) goto LA24;
		typeparams = HEX5BHEX5D_192244((*callee).ast, ((NI) 2));
		{
			NI i_345391;
			NI HEX3Atmp_345436;
			NI LOC27;
			NI LOC28;
			NI res_345439;
			i_345391 = 0;
			HEX3Atmp_345436 = 0;
			LOC27 = 0;
			LOC27 = sonslen_194403(typeparams);
			LOC28 = 0;
			LOC28 = sonslen_194403(binding);
			HEX3Atmp_345436 = ((LOC27 <= (NI)(LOC28 - ((NI) 1))) ? LOC27 : (NI)(LOC28 - ((NI) 1)));
			res_345439 = ((NI) 1);
			{
				while (1) {
					Ttype191849* formaltypeparam;
					Ttype191849* bound;
					Tnode191813* LOC31;
					if (!(res_345439 <= HEX3Atmp_345436)) goto LA30;
					i_345391 = res_345439;
					formaltypeparam = (*(*typeparams).kindU.S6.sons->data[(NI)(i_345391 - ((NI) 1))]).typ;
					LOC31 = 0;
					LOC31 = HEX5BHEX5D_192244(binding, i_345391);
					bound = (*LOC31).typ;
					{
						NimStringDesc* LOC36;
						if (!!(!((bound == NIM_NIL)))) goto LA34;
						LOC36 = 0;
						LOC36 = HEX24_166306(TMP2676);
						internalerror_166218(LOC36);
					}
					LA34: ;
					{
						if (!((*formaltypeparam).kind == ((NU8) 8))) goto LA39;
						{
							if (!!(((*bound).kind == ((NU8) 8)))) goto LA43;
							bound = maketypedesc_245682(ctx, bound);
						}
						LA43: ;
					}
					goto LA37;
					LA39: ;
					{
						bound = skiptypes_195167(bound, 256);
					}
					LA37: ;
					put_345289((&(*c).bindings), formaltypeparam, bound);
					res_345439 += ((NI) 1);
				} LA30: ;
			}
		}
	}
	LA24: ;
}

N_NIMCALL(void, preparenamedparam_350913)(Tnode191813* a) {
	{
		Tlineinfo164338 info;
		Tident168021* LOC5;
		if (!!(((*(*a).kindU.S6.sons->data[((NI) 0)]).kind == ((NU8) 2)))) goto LA3;
		info = (*(*a).kindU.S6.sons->data[((NI) 0)]).info;
		LOC5 = 0;
		LOC5 = considerquotedident_250010((*a).kindU.S6.sons->data[((NI) 0)]);
		asgnRefNoCycle((void**) (&(*a).kindU.S6.sons->data[((NI) 0)]), newidentnode_193313(LOC5, info));
	}
	LA3: ;
}

N_NIMCALL(Tnode191813*, prepareoperand_350852)(Tcontext245023* c, Ttype191849* formal, Tnode191813* a) {
	Tnode191813* result;
	result = 0;
	{
		NIM_BOOL LOC3;
		NI LOC5;
		LOC3 = 0;
		LOC3 = ((*formal).kind == ((NU8) 6));
		if (!(LOC3)) goto LA4;
		LOC5 = 0;
		LOC5 = len_194377(formal);
		LOC3 = !((LOC5 == ((NI) 1)));
		LA4: ;
		if (!LOC3) goto LA6;
		result = a;
	}
	goto LA1;
	LA6: ;
	{
		NU16 flags;
		if (!(*a).typ == 0) goto LA9;
		{
			if (!((*formal).kind == ((NU8) 49))) goto LA13;
			flags = 34;
		}
		goto LA11;
		LA13: ;
		{
			flags = 48;
		}
		LA11: ;
		result = (*c).semoperand(c, a, flags);
	}
	goto LA1;
	LA9: ;
	{
		result = a;
	}
	LA1: ;
	return result;
}

N_NIMCALL(Ttype191849*, arrayconstr_350936)(Tcontext245023* c, Tnode191813* n) {
	Ttype191849* result;
	Ttype191849* LOC1;
	Ttype191849* LOC2;
	Ttype191849* LOC3;
	result = 0;
	result = newtypes_245219(((NU8) 4), c);
	LOC1 = 0;
	LOC1 = getsystype_239030(((NU8) 31));
	LOC2 = 0;
	LOC2 = makerangetype_246182(c, IL64(0), IL64(0), (*n).info, LOC1);
	rawaddson_195478(result, LOC2);
	LOC3 = 0;
	LOC3 = skiptypes_195167((*n).typ, 8423424);
	addsonskipintlit_239729(result, LOC3);
	return result;
}

N_NIMCALL(void, setson_350829)(Tnode191813* father, NI at, Tnode191813* son) {
	{
		NI LOC3;
		LOC3 = 0;
		LOC3 = sonslen_194403(father);
		if (!(LOC3 <= at)) goto LA4;
		(*father).kindU.S6.sons = (Tnodeseq191807*) setLengthSeq(&((*father).kindU.S6.sons)->Sup, sizeof(Tnode191813*), ((NI) ((NI)(at + ((NI) 1)))));
	}
	LA4: ;
	asgnRefNoCycle((void**) (&(*father).kindU.S6.sons->data[at]), son);
}

N_NIMCALL(Tnode191813*, prepareoperand_350893)(Tcontext245023* c, Tnode191813* a) {
	Tnode191813* result;
	result = 0;
	{
		if (!(*a).typ == 0) goto LA3;
		result = (*c).semoperand(c, a, 32);
	}
	goto LA1;
	LA3: ;
	{
		result = a;
	}
	LA1: ;
	return result;
}

N_NIMCALL(void, incrindextype_350959)(Ttype191849* t) {
	(*(*(*(*t).sons->data[((NI) 0)]).n).kindU.S6.sons->data[((NI) 1)]).kindU.S1.intval += ((NI) 1);
}

N_NIMCALL(void, matchesaux_351018)(Tcontext245023* c, Tnode191813* n, Tnode191813* norig, Tcandidate345209* m, Intset188056* marker) {
	NI f;
	NI a;
	NI formallen;
	Tnode191813* LOC6;
	Tnode191813* container;
	Tsym191843* formal;
{	{
		if (!!(((*(*m).callee).kind == ((NU8) 10)))) goto LA3;
		f = ((NI) 1);
	}
	goto LA1;
	LA3: ;
	{
		f = ((NI) 0);
	}
	LA1: ;
	a = ((NI) 1);
	(*m).state = ((NU8) 1);
	unsureAsgnRef((void**) (&(*m).call), newnodei_193351((*n).kind, (*n).info));
	asgnRefNoCycle((void**) (&(*(*m).call).typ), base_221039((*m).callee));
	formallen = len_192097((*(*m).callee).n);
	LOC6 = 0;
	LOC6 = copytree_196028((*n).kindU.S6.sons->data[((NI) 0)]);
	addson_193819((*m).call, LOC6);
	container = NIM_NIL;
	formal = NIM_NIL;
	{
		while (1) {
			NI LOC9;
			LOC9 = 0;
			LOC9 = len_192097(n);
			if (!(a < LOC9)) goto LA8;
			{
				Tnode191813* arg;
				if (!((*(*n).kindU.S6.sons->data[a]).kind == ((NU8) 33))) goto LA12;
				preparenamedparam_350913((*n).kindU.S6.sons->data[a]);
				{
					if (!!(((*(*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 0)]).kind == ((NU8) 2)))) goto LA16;
					localerror_166155((*(*n).kindU.S6.sons->data[a]).info, ((NU16) 159), ((NimStringDesc*) &TMP2656));
					(*m).state = ((NU8) 2);
					goto BeforeRet;
				}
				LA16: ;
				formal = getsymfromlist_199228((*(*m).callee).n, (*(*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 0)]).kindU.S5.ident, ((NI) 1));
				{
					if (!(formal == NIM_NIL)) goto LA20;
					(*m).state = ((NU8) 2);
					goto BeforeRet;
				}
				LA20: ;
				{
					NIM_BOOL LOC24;
					LOC24 = 0;
					LOC24 = containsorincl_188898(marker, (*formal).position);
					if (!LOC24) goto LA25;
					localerror_166155((*(*n).kindU.S6.sons->data[a]).info, ((NU16) 143), (*(*formal).name).s);
					(*m).state = ((NU8) 2);
					goto BeforeRet;
				}
				LA25: ;
				(*m).basetypematch = NIM_FALSE;
				asgnRefNoCycle((void**) (&(*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 1)]), prepareoperand_350852(c, (*formal).typ, (*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 1)]));
				asgnRefNoCycle((void**) (&(*(*n).kindU.S6.sons->data[a]).typ), (*(*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 1)]).typ);
				arg = paramtypesmatch_350556(m, (*formal).typ, (*(*n).kindU.S6.sons->data[a]).typ, (*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 1)], (*(*norig).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 1)]);
				{
					if (!(arg == NIM_NIL)) goto LA29;
					(*m).state = ((NU8) 2);
					goto BeforeRet;
				}
				LA29: ;
				{
					if (!!((*formal).constraint == 0)) goto LA33;
					{
						NIM_BOOL LOC37;
						LOC37 = 0;
						LOC37 = matchnodekinds_270284((*formal).constraint, (*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 1)]);
						if (!LOC37) goto LA38;
						(*m).genericmatches += ((NI) 100);
					}
					goto LA35;
					LA38: ;
					{
						(*m).state = ((NU8) 2);
						goto BeforeRet;
					}
					LA35: ;
				}
				LA33: ;
				{
					if (!((*(*formal).typ).kind == ((NU8) 23))) goto LA43;
					{
						NIM_BOOL LOC47;
						LOC47 = 0;
						LOC47 = islvalue_270263((*(*n).kindU.S6.sons->data[a]).kindU.S6.sons->data[((NI) 1)]);
						if (!!(LOC47)) goto LA48;
						(*m).state = ((NU8) 2);
						goto BeforeRet;
					}
					LA48: ;
				}
				LA43: ;
				{
					Ttype191849* LOC54;
					if (!(*m).basetypematch) goto LA52;
					LOC54 = 0;
					LOC54 = arrayconstr_350936(c, arg);
					container = newnodeit_193807(((NU8) 41), (*(*n).kindU.S6.sons->data[a]).info, LOC54);
					addson_193819(container, arg);
					setson_350829((*m).call, (NI)((*formal).position + ((NI) 1)), container);
					{
						if (!!((f == (NI)(formallen - ((NI) 1))))) goto LA57;
						container = NIM_NIL;
					}
					LA57: ;
				}
				goto LA50;
				LA52: ;
				{
					setson_350829((*m).call, (NI)((*formal).position + ((NI) 1)), arg);
				}
				LA50: ;
				f += ((NI) 1);
			}
			goto LA10;
			LA12: ;
			{
				{
					if (!(formallen <= f)) goto LA63;
					{
						if (!(((*(*m).callee).flags &(1<<((((NU8) 0))&31)))!=0)) goto LA67;
						asgnRefNoCycle((void**) (&(*n).kindU.S6.sons->data[a]), prepareoperand_350893(c, (*n).kindU.S6.sons->data[a]));
						{
							Ttype191849* LOC71;
							Ttype191849* LOC74;
							Tnode191813* LOC75;
							Tnode191813* LOC76;
							LOC71 = 0;
							LOC71 = skiptypes_195167((*(*n).kindU.S6.sons->data[a]).typ, IL64(211106240964608));
							if (!((*LOC71).kind == ((NU8) 28))) goto LA72;
							LOC74 = 0;
							LOC74 = getsystype_239030(((NU8) 29));
							LOC75 = 0;
							LOC75 = copytree_196028((*n).kindU.S6.sons->data[a]);
							LOC76 = 0;
							LOC76 = implicitconv_349761(((NU8) 58), LOC74, LOC75, (&(*m)), c);
							addson_193819((*m).call, LOC76);
						}
						goto LA69;
						LA72: ;
						{
							Tnode191813* LOC78;
							LOC78 = 0;
							LOC78 = copytree_196028((*n).kindU.S6.sons->data[a]);
							addson_193819((*m).call, LOC78);
						}
						LA69: ;
					}
					goto LA65;
					LA67: ;
					{
						NIM_BOOL LOC80;
						Tnode191813* arg;
						LOC80 = 0;
						LOC80 = !((formal == NIM_NIL));
						if (!(LOC80)) goto LA81;
						LOC80 = ((*(*formal).typ).kind == ((NU8) 48));
						LA81: ;
						if (!LOC80) goto LA82;
						(*m).basetypematch = NIM_FALSE;
						asgnRefNoCycle((void**) (&(*n).kindU.S6.sons->data[a]), prepareoperand_350852(c, (*formal).typ, (*n).kindU.S6.sons->data[a]));
						arg = paramtypesmatch_350556(m, (*formal).typ, (*(*n).kindU.S6.sons->data[a]).typ, (*n).kindU.S6.sons->data[a], (*norig).kindU.S6.sons->data[a]);
						{
							NIM_BOOL LOC86;
							NIM_BOOL LOC87;
							LOC86 = 0;
							LOC87 = 0;
							LOC87 = !((arg == NIM_NIL));
							if (!(LOC87)) goto LA88;
							LOC87 = (*m).basetypematch;
							LA88: ;
							LOC86 = LOC87;
							if (!(LOC86)) goto LA89;
							LOC86 = !((container == NIM_NIL));
							LA89: ;
							if (!LOC86) goto LA90;
							addson_193819(container, arg);
							incrindextype_350959((*container).typ);
						}
						goto LA84;
						LA90: ;
						{
							(*m).state = ((NU8) 2);
							goto BeforeRet;
						}
						LA84: ;
					}
					goto LA65;
					LA82: ;
					{
						(*m).state = ((NU8) 2);
						goto BeforeRet;
					}
					LA65: ;
				}
				goto LA61;
				LA63: ;
				{
					Tnode191813* arg;
					{
						if (!!(((*(*(*(*m).callee).n).kindU.S6.sons->data[f]).kind == ((NU8) 3)))) goto LA97;
						internalerror_166199((*(*n).kindU.S6.sons->data[a]).info, ((NimStringDesc*) &TMP2678));
						goto BeforeRet;
					}
					LA97: ;
					formal = (*(*(*(*m).callee).n).kindU.S6.sons->data[f]).kindU.S4.sym;
					{
						NIM_BOOL LOC101;
						LOC101 = 0;
						LOC101 = containsorincl_188898(marker, (*formal).position);
						if (!(LOC101)) goto LA102;
						LOC101 = container == 0;
						LA102: ;
						if (!LOC101) goto LA103;
						localerror_166155((*(*n).kindU.S6.sons->data[a]).info, ((NU16) 143), (*(*formal).name).s);
						(*m).state = ((NU8) 2);
						goto BeforeRet;
					}
					LA103: ;
					(*m).basetypematch = NIM_FALSE;
					asgnRefNoCycle((void**) (&(*n).kindU.S6.sons->data[a]), prepareoperand_350852(c, (*formal).typ, (*n).kindU.S6.sons->data[a]));
					arg = paramtypesmatch_350556(m, (*formal).typ, (*(*n).kindU.S6.sons->data[a]).typ, (*n).kindU.S6.sons->data[a], (*norig).kindU.S6.sons->data[a]);
					{
						if (!(arg == NIM_NIL)) goto LA107;
						(*m).state = ((NU8) 2);
						goto BeforeRet;
					}
					LA107: ;
					{
						Tnode191813* LOC119;
						NI LOC120;
						if (!(*m).basetypematch) goto LA111;
						{
							Ttype191849* LOC117;
							if (!container == 0) goto LA115;
							LOC117 = 0;
							LOC117 = arrayconstr_350936(c, arg);
							container = newnodeit_193807(((NU8) 41), (*(*n).kindU.S6.sons->data[a]).info, LOC117);
						}
						goto LA113;
						LA115: ;
						{
							incrindextype_350959((*container).typ);
						}
						LA113: ;
						addson_193819(container, arg);
						LOC119 = 0;
						LOC119 = implicitconv_349761(((NU8) 58), (*formal).typ, container, (&(*m)), c);
						setson_350829((*m).call, (NI)((*formal).position + ((NI) 1)), LOC119);
						LOC120 = 0;
						LOC120 = len_192097(n);
						f = ((f >= (NI)((NI)((NI)(formallen - LOC120) + a) + ((NI) 1))) ? f : (NI)((NI)((NI)(formallen - LOC120) + a) + ((NI) 1)));
					}
					goto LA109;
					LA111: ;
					{
						setson_350829((*m).call, (NI)((*formal).position + ((NI) 1)), arg);
						f += ((NI) 1);
						container = NIM_NIL;
					}
					LA109: ;
				}
				LA61: ;
				{
					if (!!((*formal).constraint == 0)) goto LA124;
					{
						NIM_BOOL LOC128;
						LOC128 = 0;
						LOC128 = matchnodekinds_270284((*formal).constraint, (*n).kindU.S6.sons->data[a]);
						if (!LOC128) goto LA129;
						(*m).genericmatches += ((NI) 100);
					}
					goto LA126;
					LA129: ;
					{
						(*m).state = ((NU8) 2);
						goto BeforeRet;
					}
					LA126: ;
				}
				LA124: ;
				{
					if (!((*(*formal).typ).kind == ((NU8) 23))) goto LA134;
					{
						NIM_BOOL LOC138;
						LOC138 = 0;
						LOC138 = islvalue_270263((*n).kindU.S6.sons->data[a]);
						if (!!(LOC138)) goto LA139;
						(*m).state = ((NU8) 2);
						goto BeforeRet;
					}
					LA139: ;
				}
				LA134: ;
			}
			LA10: ;
			a += ((NI) 1);
		} LA8: ;
	}
	}BeforeRet: ;
}

N_NIMCALL(void, partialmatch_351434)(Tcontext245023* c, Tnode191813* n, Tnode191813* norig, Tcandidate345209* m) {
	Intset188056 marker;
	memset((void*)(&marker), 0, sizeof(marker));
	chckNil((void*)(&marker));
	memset((void*)(&marker), 0, sizeof(marker));
	initintset_188927((&marker));
	matchesaux_351018(c, n, norig, m, (&marker));
}

N_NIMCALL(NIM_BOOL, argsfit_352421)(Tcontext245023* c, Tsym191843* candidate, Tnode191813* n, Tnode191813* norig) {
	NIM_BOOL result;
	result = 0;
	switch ((*candidate).kind) {
	case ((NU8) 12):
	case ((NU8) 13):
	case ((NU8) 14):
	case ((NU8) 15):
	case ((NU8) 16):
	case ((NU8) 6):
	case ((NU8) 18):
	case ((NU8) 17):
	{
		Tcandidate345209 m;
		memset((void*)(&m), 0, sizeof(m));
		initcandidate_345301(c, (&m), candidate, NIM_NIL, ((NI) -1));
		partialmatch_351434(c, n, norig, (&m));
		result = !((m.state == ((NU8) 2)));
	}
	break;
	default:
	{
		result = NIM_FALSE;
	}
	break;
	}
	return result;
}

N_NIMCALL(void, suggestcall_352444)(Tcontext245023* c, Tnode191813* n_352447, Tnode191813* norig, NI* outputs) {
	NIM_BOOL islocal_352452;
	islocal_352452 = NIM_TRUE;
	{
		Tscope191837* scope_352454;
		Tscope191837* HEX3Atmp_353904;
		Tscope191837* current_353907;
		scope_352454 = 0;
		HEX3Atmp_353904 = 0;
		HEX3Atmp_353904 = (*c).currentscope;
		current_353907 = HEX3Atmp_353904;
		{
			while (1) {
				Tsymseq191815* entries_352456;
				Tsymseq191815* result_352475;
				TY352525 LOC11;
				if (!!((current_353907 == NIM_NIL))) goto LA3;
				scope_352454 = current_353907;
				{
					if (!(scope_352454 == (*c).toplevelscope)) goto LA6;
					islocal_352452 = NIM_FALSE;
				}
				LA6: ;
				result_352475 = (Tsymseq191815*) newSeq((&NTI191815), 0);
				{
					Tsym191843* x_352477;
					Tstrtable191817 HEX3Atmp_353892;
					Ttabiter199119 it_353895;
					Tsym191843* s_353897;
					x_352477 = 0;
					memset((void*)(&HEX3Atmp_353892), 0, sizeof(HEX3Atmp_353892));
					HEX3Atmp_353892.counter = (*scope_352454).symbols.counter;
					HEX3Atmp_353892.data = (*scope_352454).symbols.data;
					memset((void*)(&it_353895), 0, sizeof(it_353895));
					s_353897 = inittabiter_199124((&it_353895), HEX3Atmp_353892);
					{
						while (1) {
							if (!!((s_353897 == NIM_NIL))) goto LA10;
							x_352477 = s_353897;
							result_352475 = (Tsymseq191815*) incrSeq(&(result_352475)->Sup, sizeof(Tsym191843*));
							asgnRefNoCycle((void**) (&result_352475->data[result_352475->Sup.len-1]), x_352477);
							s_353897 = nextiter_199132((&it_353895), HEX3Atmp_353892);
						} LA10: ;
					}
				}
				genericSeqAssign((&entries_352456), result_352475, (&NTI191815));
				memset((void*)(&LOC11), 0, sizeof(LOC11));
				LOC11.ClPrc = ((TMP2673) (HEX3Aanonymous_352507)); LOC11.ClEnv = NIM_NIL;
				sort_352518(entries_352456->data, entries_352456->Sup.len, LOC11, ((NU8) 1));
				{
					Tsym191843* item_352462;
					NI i_353901;
					NI L_353903;
					item_352462 = 0;
					i_353901 = ((NI) 0);
					L_353903 = (entries_352456 ? entries_352456->Sup.len : 0);
					{
						while (1) {
							Tsym191843* it;
							if (!(i_353901 < L_353903)) goto LA14;
							item_352462 = entries_352456->data[i_353901];
							it = item_352462;
							{
								NIM_BOOL LOC17;
								NIM_BOOL LOC18;
								NimStringDesc* LOC23;
								LOC17 = 0;
								LOC18 = 0;
								LOC18 = filtersym_352015(it);
								if (!(LOC18)) goto LA19;
								LOC18 = namefits_352392(c, it, n_352447);
								LA19: ;
								LOC17 = LOC18;
								if (!(LOC17)) goto LA20;
								LOC17 = argsfit_352421(c, it, n_352447, norig);
								LA20: ;
								if (!LOC17) goto LA21;
								LOC23 = 0;
								LOC23 = symtostr_352005(it, islocal_352452, ((NimStringDesc*) &TMP2679));
								suggestwriteln_165069(LOC23);
								(*outputs) += ((NI) 1);
							}
							LA21: ;
							i_353901 += ((NI) 1);
						} LA14: ;
					}
				}
				current_353907 = (*current_353907).parent;
			} LA3: ;
		}
	}
}

N_NIMCALL(void, suggestexpr_355070)(Tcontext245023* c, Tnode191813* node) {
	NI outputs;
{	{
		NU8 cp;
		if (!!((((*node).flags &(1<<((((NU8) 13))&15)))!=0))) goto LA3;
		{
			if (!(gtrackpos_165500.line < ((NI16) 0))) goto LA7;
			goto BeforeRet;
		}
		LA7: ;
		cp = incheckpoint_354640((*node).info);
		{
			if (!(cp == ((NU8) 0))) goto LA11;
			goto BeforeRet;
		}
		LA11: ;
	}
	LA3: ;
	outputs = ((NI) 0);
	{
		if (!(((NI) 0) < (*c).incompilescontext)) goto LA15;
		goto BeforeRet;
	}
	LA15: ;
	(*c).incompilescontext += ((NI) 1);
	{
		Tnode191813* n;
		if (!(gidecmd_155115 == ((NU8) 1))) goto LA19;
		{
			if (!(((*node).flags &(1<<((((NU8) 13))&15)))!=0)) goto LA23;
			n = node;
		}
		goto LA21;
		LA23: ;
		{
			n = findclosestdot_354647(node);
		}
		LA21: ;
		{
			if (!(n == NIM_NIL)) goto LA28;
			n = node;
		}
		LA28: ;
		{
			Tnode191813* obj;
			if (!((*n).kind == ((NU8) 45))) goto LA32;
			obj = safesemexpr_355062(c, (*n).kindU.S6.sons->data[((NI) 0)]);
			suggestfieldaccess_354428(c, obj, (&outputs));
			{
				NimStringDesc* LOC38;
				NimStringDesc* LOC39;
				if (!((gglobaloptions_155128 &(1<<((((NU8) 28))&31)))!=0)) goto LA36;
				LOC38 = 0;
				LOC38 = rendertree_213058(obj, 0);
				LOC39 = 0;
				LOC39 = typetostring_221032((*obj).typ, ((NU8) 0));
				printf("%s%s%s%s\012", ((NimStringDesc*) &TMP2671)? (((NimStringDesc*) &TMP2671))->data:"nil", LOC38? (LOC38)->data:"nil", ((NimStringDesc*) &TMP2672)? (((NimStringDesc*) &TMP2672))->data:"nil", LOC39? (LOC39)->data:"nil");
			}
			LA36: ;
		}
		goto LA30;
		LA32: ;
		{
			suggesteverything_354355(c, n, (&outputs));
		}
		LA30: ;
	}
	goto LA17;
	LA19: ;
	{
		Tnode191813* n;
		if (!(gidecmd_155115 == ((NU8) 2))) goto LA42;
		{
			if (!(((*node).flags &(1<<((((NU8) 13))&15)))!=0)) goto LA46;
			n = node;
		}
		goto LA44;
		LA46: ;
		{
			n = findclosestcall_354721(node);
		}
		LA44: ;
		{
			if (!(n == NIM_NIL)) goto LA51;
			n = node;
		}
		LA51: ;
		{
			Tnode191813* a;
			Tnode191813* x_355205;
			if (!((*n).kind == ((NU8) 27) || (*n).kind == ((NU8) 29) || (*n).kind == ((NU8) 30) || (*n).kind == ((NU8) 31) || (*n).kind == ((NU8) 26) || (*n).kind == ((NU8) 28) || (*n).kind == ((NU8) 32))) goto LA55;
			a = copynode_195640(n);
			x_355205 = safesemexpr_355062(c, (*n).kindU.S6.sons->data[((NI) 0)]);
			{
				NIM_BOOL LOC59;
				LOC59 = 0;
				LOC59 = ((*x_355205).kind == ((NU8) 1));
				if (LOC59) goto LA60;
				LOC59 = ((*x_355205).typ == NIM_NIL);
				LA60: ;
				if (!LOC59) goto LA61;
				x_355205 = (*n).kindU.S6.sons->data[((NI) 0)];
			}
			LA61: ;
			addson_193819(a, x_355205);
			{
				NI i_355238;
				NI HEX3Atmp_355282;
				NI LOC64;
				NI res_355285;
				i_355238 = 0;
				HEX3Atmp_355282 = 0;
				LOC64 = 0;
				LOC64 = sonslen_194403(n);
				HEX3Atmp_355282 = (NI)(LOC64 - ((NI) 1));
				res_355285 = ((NI) 1);
				{
					while (1) {
						Tnode191813* x;
						if (!(res_355285 <= HEX3Atmp_355282)) goto LA66;
						i_355238 = res_355285;
						x = safesemexpr_355062(c, (*n).kindU.S6.sons->data[i_355238]);
						{
							NIM_BOOL LOC69;
							LOC69 = 0;
							LOC69 = ((*x).kind == ((NU8) 1));
							if (LOC69) goto LA70;
							LOC69 = ((*x).typ == NIM_NIL);
							LA70: ;
							if (!LOC69) goto LA71;
							goto LA63;
						}
						LA71: ;
						addson_193819(a, x);
						res_355285 += ((NI) 1);
					} LA66: ;
				}
			} LA63: ;
			suggestcall_352444(c, a, n, (&outputs));
		}
		LA55: ;
	}
	goto LA17;
	LA42: ;
	LA17: ;
	(*c).incompilescontext -= ((NI) 1);
	{
		NIM_BOOL LOC75;
		LOC75 = 0;
		LOC75 = (((NI) 0) < outputs);
		if (!(LOC75)) goto LA76;
		LOC75 = !((gidecmd_155115 == ((NU8) 4)));
		LA76: ;
		if (!LOC75) goto LA77;
		suggestquit_165125();
	}
	LA77: ;
	}BeforeRet: ;
}

N_NIMCALL(void, newcandidate_345478)(Tcontext245023* ctx, Ttype191849* callee, Tcandidate345209* Result) {
	initcandidate_345276(ctx, Result, callee);
}

N_NIMCALL(Ttype191849*, arrayconstr_350948)(Tcontext245023* c, Tlineinfo164338 info) {
	Ttype191849* result;
	Ttype191849* LOC1;
	Ttype191849* LOC2;
	Ttype191849* LOC3;
	result = 0;
	result = newtypes_245219(((NU8) 4), c);
	LOC1 = 0;
	LOC1 = getsystype_239030(((NU8) 31));
	LOC2 = 0;
	LOC2 = makerangetype_246182(c, IL64(0), IL64(-1), info, LOC1);
	rawaddson_195478(result, LOC2);
	LOC3 = 0;
	LOC3 = newtypes_245219(((NU8) 3), c);
	rawaddson_195478(result, LOC3);
	return result;
}

N_NIMCALL(void, matches_351449)(Tcontext245023* c, Tnode191813* n, Tnode191813* norig, Tcandidate345209* m) {
	Intset188056 marker;
	NI f;
{	memset((void*)(&marker), 0, sizeof(marker));
	chckNil((void*)(&marker));
	memset((void*)(&marker), 0, sizeof(marker));
	initintset_188927((&marker));
	matchesaux_351018(c, n, norig, m, (&marker));
	{
		if (!((*m).state == ((NU8) 2))) goto LA3;
		goto BeforeRet;
	}
	LA3: ;
	f = ((NI) 1);
	{
		while (1) {
			NI LOC7;
			Tsym191843* formal;
			LOC7 = 0;
			LOC7 = sonslen_194403((*(*m).callee).n);
			if (!(f < LOC7)) goto LA6;
			formal = (*(*(*(*m).callee).n).kindU.S6.sons->data[f]).kindU.S4.sym;
			{
				NIM_BOOL LOC10;
				LOC10 = 0;
				LOC10 = containsorincl_188898((&marker), (*formal).position);
				if (!!(LOC10)) goto LA11;
				{
					if (!((*formal).ast == NIM_NIL)) goto LA15;
					{
						Tnode191813* container;
						Ttype191849* LOC21;
						Tnode191813* LOC22;
						if (!((*(*formal).typ).kind == ((NU8) 48))) goto LA19;
						LOC21 = 0;
						LOC21 = arrayconstr_350948(c, (*n).info);
						container = newnodeit_193807(((NU8) 41), (*n).info, LOC21);
						LOC22 = 0;
						LOC22 = implicitconv_349761(((NU8) 58), (*formal).typ, container, (&(*m)), c);
						addson_193819((*m).call, LOC22);
					}
					goto LA17;
					LA19: ;
					{
						(*m).state = ((NU8) 2);
						goto LA5;
					}
					LA17: ;
				}
				goto LA13;
				LA15: ;
				{
					Tnode191813* LOC25;
					LOC25 = 0;
					LOC25 = copytree_196028((*formal).ast);
					setson_350829((*m).call, (NI)((*formal).position + ((NI) 1)), LOC25);
				}
				LA13: ;
			}
			LA11: ;
			f += ((NI) 1);
		} LA6: ;
	} LA5: ;
	}BeforeRet: ;
}

N_NIMCALL(NimStringDesc*, argtypetostring_345916)(Tnode191813* arg, NU8 prefer) {
	NimStringDesc* result;
	result = 0;
	{
		Tnode191813* LOC5;
		if (!((*arg).kind == ((NU8) 56) || (*arg).kind == ((NU8) 57))) goto LA3;
		LOC5 = 0;
		LOC5 = HEX5BHEX5D_192244(arg, ((NI) 0));
		result = typetostring_221032((*LOC5).typ, prefer);
		{
			NI i_345950;
			NI HEX3Atmp_345952;
			NI LOC7;
			NI res_345955;
			i_345950 = 0;
			HEX3Atmp_345952 = 0;
			LOC7 = 0;
			LOC7 = len_192097(arg);
			HEX3Atmp_345952 = (LOC7 - 1);
			res_345955 = ((NI) 1);
			{
				while (1) {
					Tnode191813* LOC10;
					NimStringDesc* LOC11;
					if (!(res_345955 <= HEX3Atmp_345952)) goto LA9;
					i_345950 = res_345955;
					result = resizeString(result, 3);
appendString(result, ((NimStringDesc*) &TMP3009));
					LOC10 = 0;
					LOC10 = HEX5BHEX5D_192244(arg, i_345950);
					LOC11 = 0;
					LOC11 = typetostring_221032((*LOC10).typ, prefer);
					result = resizeString(result, LOC11->Sup.len + 0);
appendString(result, LOC11);
					res_345955 += ((NI) 1);
				} LA9: ;
			}
		}
	}
	goto LA1;
	LA3: ;
	{
		result = typetostring_221032((*arg).typ, prefer);
	}
	LA1: ;
	return result;
}

N_NIMCALL(NimStringDesc*, describeargs_345974)(Tcontext245023* c, Tnode191813* n, NI startidx, NU8 prefer) {
	NimStringDesc* result;
{	result = 0;
	result = copyString(((NimStringDesc*) &TMP2656));
	{
		NI i_345994;
		NI HEX3Atmp_346042;
		NI LOC2;
		NI res_346045;
		i_345994 = 0;
		HEX3Atmp_346042 = 0;
		LOC2 = 0;
		LOC2 = len_192097(n);
		HEX3Atmp_346042 = (NI)(LOC2 - ((NI) 1));
		res_346045 = startidx;
		{
			while (1) {
				Tnode191813* arg;
				NimStringDesc* LOC23;
				if (!(res_346045 <= HEX3Atmp_346042)) goto LA4;
				i_345994 = res_346045;
				arg = (*n).kindU.S6.sons->data[i_345994];
				{
					NimStringDesc* LOC9;
					if (!((*(*n).kindU.S6.sons->data[i_345994]).kind == ((NU8) 33))) goto LA7;
					LOC9 = 0;
					LOC9 = rendertree_213058((*(*n).kindU.S6.sons->data[i_345994]).kindU.S6.sons->data[((NI) 0)], 0);
					result = resizeString(result, LOC9->Sup.len + 0);
appendString(result, LOC9);
					result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP3008));
					{
						if (!(*arg).typ == 0) goto LA12;
						arg = (*c).semoperand(c, (*(*n).kindU.S6.sons->data[i_345994]).kindU.S6.sons->data[((NI) 1)], 0);
						asgnRefNoCycle((void**) (&(*(*n).kindU.S6.sons->data[i_345994]).typ), (*arg).typ);
						asgnRefNoCycle((void**) (&(*(*n).kindU.S6.sons->data[i_345994]).kindU.S6.sons->data[((NI) 1)]), arg);
					}
					LA12: ;
				}
				goto LA5;
				LA7: ;
				{
					{
						if (!(*arg).typ == 0) goto LA17;
						arg = (*c).semoperand(c, (*n).kindU.S6.sons->data[i_345994], 0);
						asgnRefNoCycle((void**) (&(*n).kindU.S6.sons->data[i_345994]), arg);
					}
					LA17: ;
				}
				LA5: ;
				{
					if (!((*(*arg).typ).kind == ((NU8) 50))) goto LA21;
					goto BeforeRet;
				}
				LA21: ;
				LOC23 = 0;
				LOC23 = argtypetostring_345916(arg, prefer);
				result = resizeString(result, LOC23->Sup.len + 0);
appendString(result, LOC23);
				{
					NI LOC26;
					LOC26 = 0;
					LOC26 = sonslen_194403(n);
					if (!!((i_345994 == (NI)(LOC26 - ((NI) 1))))) goto LA27;
					result = resizeString(result, 2);
appendString(result, ((NimStringDesc*) &TMP3010));
				}
				LA27: ;
				res_346045 += ((NI) 1);
			} LA4: ;
		}
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Tnode191813*, usesym_355055)(Tsym191843* sym) {
	Tnode191813* result;
	result = 0;
	result = newsymnode_193325(sym);
	markused_345251((*result).info, sym);
	return result;
}

N_NIMCALL(void, semfinishoperands_351385)(Tcontext245023* c, Tnode191813* n) {
	{
		NI i_351408;
		NI HEX3Atmp_351412;
		NI LOC2;
		NI res_351415;
		i_351408 = 0;
		HEX3Atmp_351412 = 0;
		LOC2 = 0;
		LOC2 = len_192097(n);
		HEX3Atmp_351412 = (LOC2 - 1);
		res_351415 = ((NI) 1);
		{
			while (1) {
				if (!(res_351415 <= HEX3Atmp_351412)) goto LA4;
				i_351408 = res_351415;
				asgnRefNoCycle((void**) (&(*n).kindU.S6.sons->data[i_351408]), prepareoperand_350893(c, (*n).kindU.S6.sons->data[i_351408]));
				res_351415 += ((NI) 1);
			} LA4: ;
		}
	}
}

N_NIMCALL(NU8, cmptypes_349708)(Tcontext245023* c, Ttype191849* f, Ttype191849* a) {
	NU8 result;
	Tcandidate345209 m;
	result = 0;
	memset((void*)(&m), 0, sizeof(m));
	initcandidate_345276(c, (&m), f);
	result = typerel_346064((&m), f, a, NIM_TRUE);
	return result;
}

N_NIMCALL(void, suggeststmt_355301)(Tcontext245023* c, Tnode191813* n) {
	suggestexpr_355070(c, n);
}

N_NIMCALL(Tsym191843*, insttypeboundop_351551)(Tcontext245023* c, Tsym191843* dc, Ttype191849* t, Tlineinfo164338 info, NU8 op) {
	Tsym191843* result;
	Tcandidate345209 m;
	Ttype191849* f;
	result = 0;
	memset((void*)(&m), 0, sizeof(m));
	initcandidate_345276(c, (&m), (*dc).typ);
	f = (*(*dc).typ).sons->data[((NI) 1)];
	{
		if (!(op == ((NU8) 1))) goto LA3;
		{
			if (!((*f).kind == ((NU8) 22) || (*f).kind == ((NU8) 21))) goto LA7;
			f = lastson_194442(f);
		}
		LA7: ;
	}
	goto LA1;
	LA3: ;
	{
		{
			if (!((*f).kind == ((NU8) 23))) goto LA12;
			f = lastson_194442(f);
		}
		LA12: ;
	}
	LA1: ;
	{
		NU8 LOC16;
		LOC16 = 0;
		LOC16 = typerel_346064((&m), f, t, NIM_TRUE);
		if (!(LOC16 == ((NU8) 0))) goto LA17;
		localerror_166155(info, ((NU16) 4), ((NimStringDesc*) &TMP3481));
	}
	goto LA14;
	LA17: ;
	{
		result = (*c).semgenerateinstance.ClEnv? (*c).semgenerateinstance.ClPrc(c, dc, m.bindings, info, (*c).semgenerateinstance.ClEnv):((TMP3482)((*c).semgenerateinstance.ClPrc))(c, dc, m.bindings, info);
	}
	LA14: ;
	return result;
}
NIM_EXTERNC N_NOINLINE(void, nimsrc_sigmatchInit)(void) {
}

NIM_EXTERNC N_NOINLINE(void, nimsrc_sigmatchDatInit)(void) {
static TNimNode* TMP2666[19];
static TNimNode* TMP2667[3];
NI TMP2669;
static char* NIM_CONST TMP2668[3] = {
"csEmpty", 
"csMatch", 
"csNoMatch"};
static TNimNode TMP874[24];
NTI345209.size = sizeof(Tcandidate345209);
NTI345209.kind = 18;
NTI345209.base = 0;
TMP2666[0] = &TMP874[1];
TMP874[1].kind = 1;
TMP874[1].offset = offsetof(Tcandidate345209, c);
TMP874[1].typ = (&NTI245021);
TMP874[1].name = "c";
TMP2666[1] = &TMP874[2];
TMP874[2].kind = 1;
TMP874[2].offset = offsetof(Tcandidate345209, exactmatches);
TMP874[2].typ = (&NTI108);
TMP874[2].name = "exactMatches";
TMP2666[2] = &TMP874[3];
TMP874[3].kind = 1;
TMP874[3].offset = offsetof(Tcandidate345209, genericmatches);
TMP874[3].typ = (&NTI108);
TMP874[3].name = "genericMatches";
TMP2666[3] = &TMP874[4];
TMP874[4].kind = 1;
TMP874[4].offset = offsetof(Tcandidate345209, subtypematches);
TMP874[4].typ = (&NTI108);
TMP874[4].name = "subtypeMatches";
TMP2666[4] = &TMP874[5];
TMP874[5].kind = 1;
TMP874[5].offset = offsetof(Tcandidate345209, intconvmatches);
TMP874[5].typ = (&NTI108);
TMP874[5].name = "intConvMatches";
TMP2666[5] = &TMP874[6];
TMP874[6].kind = 1;
TMP874[6].offset = offsetof(Tcandidate345209, convmatches);
TMP874[6].typ = (&NTI108);
TMP874[6].name = "convMatches";
TMP2666[6] = &TMP874[7];
NTI345205.size = sizeof(NU8);
NTI345205.kind = 14;
NTI345205.base = 0;
NTI345205.flags = 3;
for (TMP2669 = 0; TMP2669 < 3; TMP2669++) {
TMP874[TMP2669+8].kind = 1;
TMP874[TMP2669+8].offset = TMP2669;
TMP874[TMP2669+8].name = TMP2668[TMP2669];
TMP2667[TMP2669] = &TMP874[TMP2669+8];
}
TMP874[11].len = 3; TMP874[11].kind = 2; TMP874[11].sons = &TMP2667[0];
NTI345205.node = &TMP874[11];
TMP874[7].kind = 1;
TMP874[7].offset = offsetof(Tcandidate345209, state);
TMP874[7].typ = (&NTI345205);
TMP874[7].name = "state";
TMP2666[7] = &TMP874[12];
TMP874[12].kind = 1;
TMP874[12].offset = offsetof(Tcandidate345209, callee);
TMP874[12].typ = (&NTI191809);
TMP874[12].name = "callee";
TMP2666[8] = &TMP874[13];
TMP874[13].kind = 1;
TMP874[13].offset = offsetof(Tcandidate345209, calleesym);
TMP874[13].typ = (&NTI191811);
TMP874[13].name = "calleeSym";
TMP2666[9] = &TMP874[14];
TMP874[14].kind = 1;
TMP874[14].offset = offsetof(Tcandidate345209, calleescope);
TMP874[14].typ = (&NTI108);
TMP874[14].name = "calleeScope";
TMP2666[10] = &TMP874[15];
TMP874[15].kind = 1;
TMP874[15].offset = offsetof(Tcandidate345209, call);
TMP874[15].typ = (&NTI191805);
TMP874[15].name = "call";
TMP2666[11] = &TMP874[16];
TMP874[16].kind = 1;
TMP874[16].offset = offsetof(Tcandidate345209, bindings);
TMP874[16].typ = (&NTI191861);
TMP874[16].name = "bindings";
TMP2666[12] = &TMP874[17];
TMP874[17].kind = 1;
TMP874[17].offset = offsetof(Tcandidate345209, basetypematch);
TMP874[17].typ = (&NTI138);
TMP874[17].name = "baseTypeMatch";
TMP2666[13] = &TMP874[18];
TMP874[18].kind = 1;
TMP874[18].offset = offsetof(Tcandidate345209, fauxmatch);
TMP874[18].typ = (&NTI191260);
TMP874[18].name = "fauxMatch";
TMP2666[14] = &TMP874[19];
TMP874[19].kind = 1;
TMP874[19].offset = offsetof(Tcandidate345209, genericconverter);
TMP874[19].typ = (&NTI138);
TMP874[19].name = "genericConverter";
TMP2666[15] = &TMP874[20];
TMP874[20].kind = 1;
TMP874[20].offset = offsetof(Tcandidate345209, coercedistincts);
TMP874[20].typ = (&NTI138);
TMP874[20].name = "coerceDistincts";
TMP2666[16] = &TMP874[21];
TMP874[21].kind = 1;
TMP874[21].offset = offsetof(Tcandidate345209, typedescmatched);
TMP874[21].typ = (&NTI138);
TMP874[21].name = "typedescMatched";
TMP2666[17] = &TMP874[22];
TMP874[22].kind = 1;
TMP874[22].offset = offsetof(Tcandidate345209, inheritancepenalty);
TMP874[22].typ = (&NTI108);
TMP874[22].name = "inheritancePenalty";
TMP2666[18] = &TMP874[23];
TMP874[23].kind = 1;
TMP874[23].offset = offsetof(Tcandidate345209, errors);
TMP874[23].typ = (&NTI191815);
TMP874[23].name = "errors";
TMP874[0].len = 19; TMP874[0].kind = 2; TMP874[0].sons = &TMP2666[0];
NTI345209.node = &TMP874[0];
}

