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

#include "nimbase.h"
#include <string.h>
typedef struct Tsym213822 Tsym213822;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct Cell47705 Cell47705;
typedef struct TNimType TNimType;
typedef struct Cellseq47721 Cellseq47721;
typedef struct Gcheap50018 Gcheap50018;
typedef struct Gcstack50016 Gcstack50016;
typedef struct Cellset47717 Cellset47717;
typedef struct Pagedesc47713 Pagedesc47713;
typedef struct Memregion29887 Memregion29887;
typedef struct Smallchunk29839 Smallchunk29839;
typedef struct Llchunk29881 Llchunk29881;
typedef struct Bigchunk29841 Bigchunk29841;
typedef struct Intset29814 Intset29814;
typedef struct Trunk29810 Trunk29810;
typedef struct Avlnode29885 Avlnode29885;
typedef struct Gcstat50014 Gcstat50014;
typedef struct Tnode213790 Tnode213790;
typedef struct Analysisctx418008 Analysisctx418008;
typedef struct TY418018 TY418018;
typedef struct TY418020 TY418020;
typedef struct Tnodeseq213784 Tnodeseq213784;
typedef struct Tsymseq213792 Tsymseq213792;
typedef struct Monotonicvar418006 Monotonicvar418006;
typedef struct TNimNode TNimNode;
typedef struct TY418021 TY418021;
typedef struct Ttype213828 Ttype213828;
typedef struct Tlineinfo181337 Tlineinfo181337;
typedef struct Tident188012 Tident188012;
typedef struct Tidobj188006 Tidobj188006;
typedef struct TNimObject TNimObject;
typedef struct Ttypeseq213824 Ttypeseq213824;
typedef struct Tscope213816 Tscope213816;
typedef struct TY213925 TY213925;
typedef struct Tstrtable213794 Tstrtable213794;
typedef struct Tloc213804 Tloc213804;
typedef struct Ropeobj168006 Ropeobj168006;
typedef struct Tlib213808 Tlib213808;
typedef struct Basechunk29837 Basechunk29837;
typedef struct Freecell29829 Freecell29829;
typedef struct Tinstantiation213812 Tinstantiation213812;
typedef struct Tlistentry135010 Tlistentry135010;
typedef struct TY213913 TY213913;
struct  TGenericSeq  {
NI len;
NI reserved;
};
struct  NimStringDesc  {
  TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct  Cell47705  {
NI refcount;
TNimType* typ;
};
struct  Cellseq47721  {
NI len;
NI cap;
Cell47705** d;
};
struct  Cellset47717  {
NI counter;
NI max;
Pagedesc47713* head;
Pagedesc47713** data;
};
typedef Smallchunk29839* TY29902[512];
typedef Trunk29810* Trunkbuckets29812[256];
struct  Intset29814  {
Trunkbuckets29812 data;
};
struct  Memregion29887  {
NI minlargeobj;
NI maxlargeobj;
TY29902 freesmallchunks;
Llchunk29881* llmem;
NI currmem;
NI maxmem;
NI freemem;
NI lastsize;
Bigchunk29841* freechunkslist;
Intset29814 chunkstarts;
Avlnode29885* root;
Avlnode29885* deleted;
Avlnode29885* last;
Avlnode29885* freeavlnodes;
};
struct  Gcstat50014  {
NI stackscans;
NI cyclecollections;
NI maxthreshold;
NI maxstacksize;
NI maxstackcells;
NI cycletablesize;
NI64 maxpause;
};
struct  Gcheap50018  {
Gcstack50016* stack;
void* stackbottom;
NI cyclethreshold;
Cellseq47721 zct;
Cellseq47721 decstack;
Cellset47717 cycleroots;
Cellseq47721 tempstack;
NI recgclock;
Memregion29887 region;
Gcstat50014 stat;
};
struct  Analysisctx418008  {
TY418018* locals;
TY418020* slices;
Tnodeseq213784* guards;
Tsymseq213792* args;
NI spawns;
NI currentspawnid;
NI inloop;
};
struct  Monotonicvar418006  {
Tsym213822* v;
Tsym213822* alias;
Tnode213790* lower;
Tnode213790* upper;
Tnode213790* stride;
NU8 dir;
NIM_BOOL blacklisted;
};
typedef N_NIMCALL_PTR(void, TY3489) (void* p, NI op);
typedef N_NIMCALL_PTR(void*, TY3494) (void* p);
struct  TNimType  {
NI size;
NU8 kind;
NU8 flags;
TNimType* base;
TNimNode* node;
void* finalizer;
TY3489 marker;
TY3494 deepcopy;
};
struct  TNimNode  {
NU8 kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
struct TY418021 {
Tnode213790* Field0;
Tnode213790* Field1;
Tnode213790* Field2;
NI Field3;
NIM_BOOL Field4;
};
struct  Tlineinfo181337  {
NI16 line;
NI16 col;
NI32 fileindex;
};
struct  Tnode213790  {
Ttype213828* typ;
Tlineinfo181337 info;
NU16 flags;
NU8 kind;
union{
struct {NI64 intval;
} S1;
struct {NF floatval;
} S2;
struct {NimStringDesc* strval;
} S3;
struct {Tsym213822* sym;
} S4;
struct {Tident188012* ident;
} S5;
struct {Tnodeseq213784* sons;
} S6;
} kindU;
NimStringDesc* comment;
};
struct  TNimObject  {
TNimType* m_type;
};
struct  Tidobj188006  {
  TNimObject Sup;
NI id;
};
struct  Tstrtable213794  {
NI counter;
Tsymseq213792* data;
};
struct  Tloc213804  {
NU8 k;
NU8 s;
NU16 flags;
Ttype213828* t;
Ropeobj168006* r;
Ropeobj168006* heaproot;
};
struct  Tsym213822  {
  Tidobj188006 Sup;
NU8 kind;
union{
struct {Ttypeseq213824* typeinstcache;
Tscope213816* typscope;
} S1;
struct {TY213925* procinstcache;
Tsym213822* gcunsafetyreason;
} S2;
struct {TY213925* usedgenerics;
Tstrtable213794 tab;
} S3;
struct {Tsym213822* guard;
NI bitsize;
} S4;
} kindU;
NU8 magic;
Ttype213828* typ;
Tident188012* name;
Tlineinfo181337 info;
Tsym213822* owner;
NU32 flags;
Tnode213790* ast;
NU32 options;
NI position;
NI offset;
Tloc213804 loc;
Tlib213808* annex;
Tnode213790* constraint;
};
struct  Tident188012  {
  Tidobj188006 Sup;
NimStringDesc* s;
Tident188012* next;
NI h;
};
typedef NimStringDesc* TY418660[6];
typedef NimStringDesc* TY184781[4];
struct  Ttype213828  {
  Tidobj188006 Sup;
NU8 kind;
NU8 callconv;
NU32 flags;
Ttypeseq213824* sons;
Tnode213790* n;
Tsym213822* owner;
Tsym213822* sym;
Tsym213822* destructor;
Tsym213822* deepcopy;
Tsym213822* assignment;
NI64 size;
NI16 align;
NI16 locklevel;
Tloc213804 loc;
};
struct  Gcstack50016  {
Gcstack50016* prev;
Gcstack50016* next;
void* starts;
void* pos;
NI maxstacksize;
};
typedef NI TY29818[16];
struct  Pagedesc47713  {
Pagedesc47713* next;
NI key;
TY29818 bits;
};
struct  Basechunk29837  {
NI prevsize;
NI size;
NIM_BOOL used;
};
struct  Smallchunk29839  {
  Basechunk29837 Sup;
Smallchunk29839* next;
Smallchunk29839* prev;
Freecell29829* freelist;
NI free;
NI acc;
NF data;
};
struct  Llchunk29881  {
NI size;
NI acc;
Llchunk29881* next;
};
struct  Bigchunk29841  {
  Basechunk29837 Sup;
Bigchunk29841* next;
Bigchunk29841* prev;
NI align;
NF data;
};
struct  Trunk29810  {
Trunk29810* next;
NI key;
TY29818 bits;
};
typedef Avlnode29885* TY29892[2];
struct  Avlnode29885  {
TY29892 link;
NI key;
NI upperbound;
NI level;
};
struct  Tscope213816  {
NI depthlevel;
Tstrtable213794 symbols;
Tnodeseq213784* usingsyms;
Tscope213816* parent;
};
struct  Ropeobj168006  {
  TNimObject Sup;
Ropeobj168006* left;
Ropeobj168006* right;
NI length;
NimStringDesc* data;
};
struct  Tlistentry135010  {
  TNimObject Sup;
Tlistentry135010* prev;
Tlistentry135010* next;
};
struct  Tlib213808  {
  Tlistentry135010 Sup;
NU8 kind;
NIM_BOOL generated;
NIM_BOOL isoverriden;
Ropeobj168006* name;
Tnode213790* path;
};
struct  Freecell29829  {
Freecell29829* next;
NI zerofield;
};
struct  Tinstantiation213812  {
Tsym213822* sym;
Ttypeseq213824* concretetypes;
TY213913* usedby;
NI compilesid;
};
struct TY418018 {
  TGenericSeq Sup;
  Monotonicvar418006 data[SEQ_DECL_SIZE];
};
struct TY418020 {
  TGenericSeq Sup;
  TY418021 data[SEQ_DECL_SIZE];
};
struct Tsymseq213792 {
  TGenericSeq Sup;
  Tsym213822* data[SEQ_DECL_SIZE];
};
struct Tnodeseq213784 {
  TGenericSeq Sup;
  Tnode213790* data[SEQ_DECL_SIZE];
};
struct Ttypeseq213824 {
  TGenericSeq Sup;
  Ttype213828* data[SEQ_DECL_SIZE];
};
struct TY213925 {
  TGenericSeq Sup;
  Tinstantiation213812* data[SEQ_DECL_SIZE];
};
struct TY213913 {
  TGenericSeq Sup;
  NI32 data[SEQ_DECL_SIZE];
};
N_NIMCALL(Tsym213822*, createmagic_218600)(NimStringDesc* name, NU8 m);
static N_INLINE(void, asgnRefNoCycle)(void** dest, void* src);
static N_INLINE(Cell47705*, usrtocell_51640)(void* usr);
static N_INLINE(void, rtladdzct_53201)(Cell47705* c);
N_NOINLINE(void, addzct_51617)(Cellseq47721* s, Cell47705* c);
N_NIMCALL(void, initanalysisctx_418035)(Analysisctx418008* Result);
N_NIMCALL(void, nimGCvisit)(void* d, NI op);
N_NIMCALL(void, TMP4268)(void* p, NI op);
N_NIMCALL(void*, newSeq)(TNimType* typ, NI len);
N_NIMCALL(void, unsureAsgnRef)(void** dest, void* src);
N_NIMCALL(void, TMP4270)(void* p, NI op);
N_NOINLINE(void, chckNil)(void* p);
N_NIMCALL(Tnode213790*, lastson_216364)(Tnode213790* n);
N_NIMCALL(void, analyse_419072)(Analysisctx418008* c, Tnode213790* n);
N_NIMCALL(Tnode213790*, skipconv_248082)(Tnode213790* n);
static N_INLINE(Tnode213790*, HEX5BHEX5D_214238)(Tnode213790* n, NI i);
N_NIMCALL(NIM_BOOL, issingleassignable_418275)(Tnode213790* n);
N_NIMCALL(NIM_BOOL, islocal_418329)(Tnode213790* n);
N_NIMCALL(Monotonicvar418006*, getslot_418163)(Analysisctx418008* c, Tsym213822* v);
N_NIMCALL(NI, lookupslot_418102)(Analysisctx418008* c, Tsym213822* s);
N_NIMCALL(TGenericSeq*, setLengthSeq)(TGenericSeq* seq, NI elemsize, NI newlen);
N_NIMCALL(void, invalidatefacts_335410)(Tnodeseq213784** m, Tnode213790* n);
N_NIMCALL(NU8, getmagic_238323)(Tnode213790* op);
N_NIMCALL(void, gatherargs_418192)(Analysisctx418008* c, Tnode213790* n);
static N_INLINE(NI, safelen_214081)(Tnode213790* n);
N_NIMCALL(Tsym213822*, getroot_377330)(Tnode213790* n);
N_NIMCALL(TGenericSeq*, incrSeqV2)(TGenericSeq* seq, NI elemsize);
N_NIMCALL(void, analysesons_419077)(Analysisctx418008* c, Tnode213790* n);
N_NIMCALL(void, addasgnfact_337655)(Tnodeseq213784** m, Tnode213790* key, Tnode213790* value);
N_NIMCALL(void, analysecall_419144)(Analysisctx418008* c, Tnode213790* n, Tsym213822* op);
static N_INLINE(NIM_BOOL, eqStrings)(NimStringDesc* a, NimStringDesc* b);
N_NIMCALL(NIM_BOOL, fromsystem_419124)(Tsym213822* op);
N_NIMCALL(Tsym213822*, getmodule_220144)(Tsym213822* s);
N_NIMCALL(Tnode213790*, min_419108)(Tnode213790* a, Tnode213790* b);
N_NIMCALL(Tnode213790*, skipstmtlist_218554)(Tnode213790* n);
N_NIMCALL(void, addslice_418611)(Analysisctx418008* c, Tnode213790* n, Tnode213790* x, Tnode213790* le_418617, Tnode213790* ri_418618);
N_NIMCALL(void, checklocal_418383)(Analysisctx418008* c, Tnode213790* n);
N_NIMCALL(void, localerror_186085)(Tlineinfo181337 info, NimStringDesc* arg);
N_NIMCALL(Tnode213790*, canon_334675)(Tnode213790* n);
N_NIMCALL(void, addlowerboundasfacts_418449)(Analysisctx418008* c);
N_NIMCALL(void, addfactle_337402)(Tnodeseq213784** m, Tnode213790* a, Tnode213790* b);
N_NIMCALL(Tnode213790*, newsymnode_215234)(Tsym213822* sym);
N_NIMCALL(void, checkbounds_418442)(Analysisctx418008* c, Tnode213790* arr, Tnode213790* idx);
N_NIMCALL(void, checkle_418433)(Analysisctx418008* c, Tnode213790* a, Tnode213790* b);
N_NIMCALL(NU8, provele_337382)(Tnodeseq213784* m, Tnode213790* a, Tnode213790* b);
static N_INLINE(void, appendString)(NimStringDesc* dest, NimStringDesc* src);
N_NIMCALL(NimStringDesc*, rendertree_232044)(Tnode213790* n, NU8 renderflags);
N_NIMCALL(NimStringDesc*, rawNewString)(NI space);
N_NIMCALL(Tnode213790*, lowbound_334558)(Tnode213790* x);
N_NIMCALL(Tnode213790*, highbound_334562)(Tnode213790* x);
N_NIMCALL(void, genericAssign)(void* dest, void* src, TNimType* mt);
static N_INLINE(NI, len_214059)(Tnode213790* n);
N_NIMCALL(void, internalerror_186100)(Tlineinfo181337 info, NimStringDesc* errmsg);
N_NIMCALL(void, analysecase_419211)(Analysisctx418008* c, Tnode213790* n);
N_NIMCALL(void, addcasebranchfacts_337694)(Tnodeseq213784** m, Tnode213790* n, NI i);
N_NIMCALL(void, analyseif_419304)(Analysisctx418008* c, Tnode213790* n);
N_NIMCALL(void, addfact_335193)(Tnodeseq213784** m, Tnode213790* nn);
N_NIMCALL(void, addfactneg_335221)(Tnodeseq213784** m, Tnode213790* n_335225);
N_NIMCALL(NIM_BOOL, istrue_344867)(Tnode213790* n);
N_NIMCALL(NIM_BOOL, hassubnodewith_218175)(Tnode213790* n, NU8 kind);
N_NIMCALL(void, checkslicesaredisjoint_418791)(Analysisctx418008* c);
N_NIMCALL(void, overlap_418653)(Tnodeseq213784* m, Tnode213790* x, Tnode213790* y, Tnode213790* c, Tnode213790* d);
N_NIMCALL(NimStringDesc*, nsuFormatOpenArray)(NimStringDesc* formatstr, NimStringDesc** a, NI aLen0);
N_NIMCALL(Tnode213790*, substride_418741)(Analysisctx418008* c, Tnode213790* n);
N_NIMCALL(Tnode213790*, HEX2BHEX40_334976)(Tnode213790* a, NI64 b);
N_NIMCALL(Tnode213790*, shallowcopy_217611)(Tnode213790* src);
N_NIMCALL(NIM_BOOL, sametree_335245)(Tnode213790* a, Tnode213790* b);
N_NIMCALL(NI64, simpleslice_336042)(Tnode213790* a, Tnode213790* b);
N_NIMCALL(NI64, stride_418684)(Analysisctx418008* c, Tnode213790* n);
N_NIMCALL(void, checkargs_419812)(Analysisctx418008* a, Tnode213790* n);
N_NIMCALL(Tnode213790*, newnodei_215248)(NU8 kind, Tlineinfo181337 info);
N_NIMCALL(Tsym213822*, newsym_214684)(NU8 symkind, Tident188012* name, Tsym213822* owner, Tlineinfo181337 info);
N_NIMCALL(Tident188012*, getident_188441)(NimStringDesc* identifier);
N_NIMCALL(Tsym213822*, getcompilerproc_257746)(NimStringDesc* name);
N_NIMCALL(void, addvar_375017)(Tnode213790* father, Tnode213790* v);
N_NIMCALL(Tnode213790*, genaddrof_376840)(Tnode213790* n);
N_NIMCALL(void, generatealiaschecks_419817)(Analysisctx418008* a, Tnode213790* result);
N_NIMCALL(void, add_214114)(Tnode213790* father, Tnode213790* son);
N_NIMCALL(Tnode213790*, callcodegenproc_376850)(NimStringDesc* name, Tnode213790* arg1, Tnode213790* arg2, Tnode213790* arg3, Tnode213790* optionalargs);
N_NIMCALL(Tnode213790*, transformspawn_419676)(Tsym213822* owner, Tnode213790* n, Tnode213790* barrier);
N_NIMCALL(Tnode213790*, transformslices_419612)(Tnode213790* n);
N_NIMCALL(Tnode213790*, copynode_217542)(Tnode213790* src);
N_NIMCALL(NU8, spawnresult_376947)(Ttype213828* t, NIM_BOOL inparallel);
N_NIMCALL(Tnode213790*, wrapprocforspawn_377500)(Tsym213822* owner, Tnode213790* spawnexpr, Ttype213828* rettype, Tnode213790* barrier, Tnode213790* dest);
N_NIMCALL(Tnode213790*, transformspawnsons_419681)(Tsym213822* owner, Tnode213790* n, Tnode213790* barrier);
STRING_LITERAL(TMP1035, "slice", 5);
STRING_LITERAL(TMP4271, "+=", 2);
STRING_LITERAL(TMP4272, "[]", 2);
STRING_LITERAL(TMP4273, "invalid usage of counter after increment", 40);
STRING_LITERAL(TMP4279, "cannot prove: ", 14);
STRING_LITERAL(TMP4280, " <= ", 4);
STRING_LITERAL(TMP4281, " (bounds check)", 15);
STRING_LITERAL(TMP4282, "can prove: ", 11);
STRING_LITERAL(TMP4283, " > ", 3);
STRING_LITERAL(TMP4284, "[]=", 3);
STRING_LITERAL(TMP4285, "invalid control flow for \'parallel\'", 35);
STRING_LITERAL(TMP4286, "slot already has a lower bound", 30);
STRING_LITERAL(TMP4287, "\'parallel\' section without \'spawn\'", 34);
STRING_LITERAL(TMP4288, "cannot prove: $# > $#; required for ($#)..($#) disjoint from ($"
"#)..($#)", 71);
STRING_LITERAL(TMP4289, "($#)..($#) not disjoint from ($#)..($#)", 39);
STRING_LITERAL(TMP4290, "cannot prove ($#)..($#) disjoint from ($#)..($#)", 48);
STRING_LITERAL(TMP4291, "barrier", 7);
STRING_LITERAL(TMP4292, "Barrier", 7);
STRING_LITERAL(TMP4293, "openBarrier", 11);
STRING_LITERAL(TMP4294, "invalid context for \'spawn\'", 27);
STRING_LITERAL(TMP4295, "closeBarrier", 12);
Tsym213822* opslice_418034;
extern Gcheap50018 gch_50059;
TNimType NTI418006; /* MonotonicVar */
extern TNimType NTI213788; /* PSym */
extern TNimType NTI213782; /* PNode */
TNimType NTI418004; /* TDirection */
extern TNimType NTI130; /* bool */
TNimType NTI418018; /* seq[MonotonicVar] */
TNimType NTI418021; /* tuple[x: PNode, a: PNode, b: PNode, spawnId: int, inLoop: bool] */
extern TNimType NTI104; /* int */
TNimType NTI418020; /* seq[tuple[x: PNode, a: PNode, b: PNode, spawnId: int, inLoop: bool]] */
extern TNimType NTI213792; /* TSymSeq */
extern TNimType NTI213784; /* TNodeSeq */
extern Tnode213790* emptynode_214801;

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

static N_INLINE(void, rtladdzct_53201)(Cell47705* c) {
	addzct_51617((&gch_50059.zct), c);
}

static N_INLINE(void, asgnRefNoCycle)(void** dest, void* src) {
	{
		Cell47705* c;
		if (!!((src == NIM_NIL))) goto LA3;
		c = usrtocell_51640(src);
		(*c).refcount += ((NI) 8);
	}
	LA3: ;
	{
		Cell47705* c;
		if (!!(((*dest) == NIM_NIL))) goto LA7;
		c = usrtocell_51640((*dest));
		{
			(*c).refcount -= ((NI) 8);
			if (!((NU32)((*c).refcount) < (NU32)(((NI) 8)))) goto LA11;
			rtladdzct_53201(c);
		}
		LA11: ;
	}
	LA7: ;
	(*dest) = src;
}
N_NIMCALL(void, TMP4268)(void* p, NI op) {
	TY418018* a;
	NI LOC1;
	a = (TY418018*)p;
	LOC1 = 0;
	for (LOC1 = 0; LOC1 < a->Sup.len; LOC1++) {
	nimGCvisit((void*)a->data[LOC1].v, op);
	nimGCvisit((void*)a->data[LOC1].alias, op);
	nimGCvisit((void*)a->data[LOC1].lower, op);
	nimGCvisit((void*)a->data[LOC1].upper, op);
	nimGCvisit((void*)a->data[LOC1].stride, op);
	}
}
N_NIMCALL(void, TMP4270)(void* p, NI op) {
	TY418020* a;
	NI LOC1;
	a = (TY418020*)p;
	LOC1 = 0;
	for (LOC1 = 0; LOC1 < a->Sup.len; LOC1++) {
	nimGCvisit((void*)a->data[LOC1].Field0, op);
	nimGCvisit((void*)a->data[LOC1].Field1, op);
	nimGCvisit((void*)a->data[LOC1].Field2, op);
	}
}

N_NIMCALL(void, initanalysisctx_418035)(Analysisctx418008* Result) {
	unsureAsgnRef((void**) (&(*Result).locals), (TY418018*) newSeq((&NTI418018), 0));
	unsureAsgnRef((void**) (&(*Result).slices), (TY418020*) newSeq((&NTI418020), 0));
	unsureAsgnRef((void**) (&(*Result).args), (Tsymseq213792*) newSeq((&NTI213792), 0));
	unsureAsgnRef((void**) (&(*Result).guards), (Tnodeseq213784*) newSeq((&NTI213784), 0));
}

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

N_NIMCALL(NIM_BOOL, issingleassignable_418275)(Tnode213790* n) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	Tsym213822* s;
	NIM_BOOL LOC3;
	result = 0;
	LOC1 = 0;
	LOC1 = ((*n).kind == ((NU8) 3));
	if (!(LOC1)) goto LA2;
	s = (*n).kindU.S4.sym;
	LOC3 = 0;
	LOC3 = ((1049120 &(1U<<((NU)((*s).kind)&31U)))!=0);
	if (!(LOC3)) goto LA4;
	LOC3 = ((32776 & (*s).flags) == 0);
	LA4: ;
	LOC1 = LOC3;
	LA2: ;
	result = LOC1;
	return result;
}

N_NIMCALL(NIM_BOOL, islocal_418329)(Tnode213790* n) {
	NIM_BOOL result;
	NIM_BOOL LOC1;
	Tsym213822* s;
	NIM_BOOL LOC3;
	result = 0;
	LOC1 = 0;
	LOC1 = ((*n).kind == ((NU8) 3));
	if (!(LOC1)) goto LA2;
	s = (*n).kindU.S4.sym;
	LOC3 = 0;
	LOC3 = ((1051424 &(1U<<((NU)((*s).kind)&31U)))!=0);
	if (!(LOC3)) goto LA4;
	LOC3 = ((32776 & (*s).flags) == 0);
	LA4: ;
	LOC1 = LOC3;
	LA2: ;
	result = LOC1;
	return result;
}

N_NIMCALL(NI, lookupslot_418102)(Analysisctx418008* c, Tsym213822* s) {
	NI result;
{	result = 0;
	{
		NI i_418132;
		NI HEX3Atmp_418156;
		NI res_418159;
		i_418132 = 0;
		HEX3Atmp_418156 = 0;
		HEX3Atmp_418156 = (((*c).locals ? (*c).locals->Sup.len : 0) - 1);
		res_418159 = ((NI) 0);
		{
			while (1) {
				if (!(res_418159 <= HEX3Atmp_418156)) goto LA3;
				i_418132 = res_418159;
				{
					NIM_BOOL LOC6;
					LOC6 = 0;
					LOC6 = ((*c).locals->data[i_418132].v == s);
					if (LOC6) goto LA7;
					LOC6 = ((*c).locals->data[i_418132].alias == s);
					LA7: ;
					if (!LOC6) goto LA8;
					result = i_418132;
					goto BeforeRet;
				}
				LA8: ;
				res_418159 += ((NI) 1);
			} LA3: ;
		}
	}
	result = ((NI) -1);
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Monotonicvar418006*, getslot_418163)(Analysisctx418008* c, Tsym213822* v) {
	Monotonicvar418006* result;
	NI s;
	NI L;
{	result = 0;
	s = lookupslot_418102((&(*c)), v);
	{
		if (!(((NI) 0) <= s)) goto LA3;
		result = (&(*c).locals->data[s]);
		goto BeforeRet;
	}
	LA3: ;
	L = ((*c).locals ? (*c).locals->Sup.len : 0);
	(*c).locals = (TY418018*) setLengthSeq(&((*c).locals)->Sup, sizeof(Monotonicvar418006), ((NI) ((NI)(L + ((NI) 1)))));
	asgnRefNoCycle((void**) (&(*c).locals->data[L].v), v);
	result = (&(*c).locals->data[L]);
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}

static N_INLINE(NI, safelen_214081)(Tnode213790* 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(void, gatherargs_418192)(Analysisctx418008* c, Tnode213790* n) {
	{
		NI i_418215;
		NI HEX3Atmp_418268;
		NI LOC2;
		NI res_418271;
		i_418215 = 0;
		HEX3Atmp_418268 = 0;
		LOC2 = 0;
		LOC2 = safelen_214081(n);
		HEX3Atmp_418268 = (LOC2 - 1);
		res_418271 = ((NI) 0);
		{
			while (1) {
				Tsym213822* root;
				Tnode213790* LOC5;
				Tnode213790* LOC18;
				if (!(res_418271 <= HEX3Atmp_418268)) goto LA4;
				i_418215 = res_418271;
				LOC5 = 0;
				LOC5 = HEX5BHEX5D_214238(n, i_418215);
				root = getroot_377330(LOC5);
				{
					if (!!((root == NIM_NIL))) goto LA8;
					{
						{
							Tsym213822* r_418238;
							Tsymseq213792* HEX3Atmp_418262;
							NI i_418265;
							NI L_418267;
							r_418238 = 0;
							HEX3Atmp_418262 = 0;
							HEX3Atmp_418262 = (*c).args;
							i_418265 = ((NI) 0);
							L_418267 = (HEX3Atmp_418262 ? HEX3Atmp_418262->Sup.len : 0);
							{
								while (1) {
									if (!(i_418265 < L_418267)) goto LA13;
									r_418238 = HEX3Atmp_418262->data[i_418265];
									{
										if (!(r_418238 == root)) goto LA16;
										goto LA10;
									}
									LA16: ;
									i_418265 += ((NI) 1);
								} LA13: ;
							}
						}
						(*c).args = (Tsymseq213792*) incrSeqV2(&((*c).args)->Sup, sizeof(Tsym213822*));
						asgnRefNoCycle((void**) (&(*c).args->data[(*c).args->Sup.len]), root);
						++(*c).args->Sup.len;
					} LA10: ;
				}
				LA8: ;
				LOC18 = 0;
				LOC18 = HEX5BHEX5D_214238(n, i_418215);
				gatherargs_418192(c, LOC18);
				res_418271 += ((NI) 1);
			} LA4: ;
		}
	}
}

N_NIMCALL(void, analysesons_419077)(Analysisctx418008* c, Tnode213790* n) {
	{
		NI i_419099;
		NI HEX3Atmp_419101;
		NI LOC2;
		NI res_419104;
		i_419099 = 0;
		HEX3Atmp_419101 = 0;
		LOC2 = 0;
		LOC2 = safelen_214081(n);
		HEX3Atmp_419101 = (LOC2 - 1);
		res_419104 = ((NI) 0);
		{
			while (1) {
				Tnode213790* LOC5;
				if (!(res_419104 <= HEX3Atmp_419101)) goto LA4;
				i_419099 = res_419104;
				LOC5 = 0;
				LOC5 = HEX5BHEX5D_214238(n, i_419099);
				analyse_419072(c, LOC5);
				res_419104 += ((NI) 1);
			} LA4: ;
		}
	}
}

static N_INLINE(NIM_BOOL, eqStrings)(NimStringDesc* a, NimStringDesc* b) {
	NIM_BOOL result;
	NIM_BOOL LOC11;
	int LOC13;
{	result = 0;
	{
		if (!(a == b)) goto LA3;
		result = NIM_TRUE;
		goto BeforeRet;
	}
	LA3: ;
	{
		NIM_BOOL LOC7;
		LOC7 = 0;
		LOC7 = (a == NIM_NIL);
		if (LOC7) goto LA8;
		LOC7 = (b == NIM_NIL);
		LA8: ;
		if (!LOC7) goto LA9;
		result = NIM_FALSE;
		goto BeforeRet;
	}
	LA9: ;
	LOC11 = 0;
	LOC11 = ((*a).Sup.len == (*b).Sup.len);
	if (!(LOC11)) goto LA12;
	LOC13 = 0;
	LOC13 = memcmp(((NCSTRING) ((*a).data)), ((NCSTRING) ((*b).data)), (*a).Sup.len);
	LOC11 = (LOC13 == ((NI32) 0));
	LA12: ;
	result = LOC11;
	goto BeforeRet;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(NIM_BOOL, fromsystem_419124)(Tsym213822* op) {
	NIM_BOOL result;
	Tsym213822* LOC1;
	result = 0;
	LOC1 = 0;
	LOC1 = getmodule_220144(op);
	result = (((*LOC1).flags &(1U<<((NU)(((NU8) 13))&31U)))!=0);
	return result;
}

N_NIMCALL(Tnode213790*, min_419108)(Tnode213790* a, Tnode213790* b) {
	Tnode213790* result;
	result = 0;
	{
		if (!a == 0) goto LA3;
		result = b;
	}
	goto LA1;
	LA3: ;
	{
		if (!((*a).kindU.S1.intval < (*b).kindU.S1.intval)) goto LA6;
		result = a;
	}
	goto LA1;
	LA6: ;
	{
		result = b;
	}
	LA1: ;
	return result;
}

N_NIMCALL(void, checklocal_418383)(Analysisctx418008* c, Tnode213790* n) {
	{
		NIM_BOOL LOC3;
		NI s;
		LOC3 = 0;
		LOC3 = islocal_418329(n);
		if (!LOC3) goto LA4;
		s = lookupslot_418102(c, (*n).kindU.S4.sym);
		{
			NIM_BOOL LOC8;
			LOC8 = 0;
			LOC8 = (((NI) 0) <= s);
			if (!(LOC8)) goto LA9;
			LOC8 = !(((*c).locals->data[s].stride == NIM_NIL));
			LA9: ;
			if (!LOC8) goto LA10;
			localerror_186085((*n).info, ((NimStringDesc*) &TMP4273));
		}
		LA10: ;
	}
	goto LA1;
	LA4: ;
	{
		{
			NI i_418419;
			NI HEX3Atmp_418422;
			NI LOC14;
			NI res_418425;
			i_418419 = 0;
			HEX3Atmp_418422 = 0;
			LOC14 = 0;
			LOC14 = safelen_214081(n);
			HEX3Atmp_418422 = (LOC14 - 1);
			res_418425 = ((NI) 0);
			{
				while (1) {
					if (!(res_418425 <= HEX3Atmp_418422)) goto LA16;
					i_418419 = res_418425;
					checklocal_418383(c, (*n).kindU.S6.sons->data[i_418419]);
					res_418425 += ((NI) 1);
				} LA16: ;
			}
		}
	}
	LA1: ;
}

N_NIMCALL(void, addlowerboundasfacts_418449)(Analysisctx418008* c) {
	{
		Monotonicvar418006 v_418602;
		TY418018* HEX3Atmp_418605;
		NI i_418608;
		NI L_418610;
		memset((void*)(&v_418602), 0, sizeof(v_418602));
		HEX3Atmp_418605 = 0;
		HEX3Atmp_418605 = (*c).locals;
		i_418608 = ((NI) 0);
		L_418610 = (HEX3Atmp_418605 ? HEX3Atmp_418605->Sup.len : 0);
		{
			while (1) {
				if (!(i_418608 < L_418610)) goto LA3;
				memcpy((void*)(&v_418602), (NIM_CONST void*)(&HEX3Atmp_418605->data[i_418608]), sizeof(v_418602));
				{
					Tnode213790* LOC8;
					if (!!(v_418602.blacklisted)) goto LA6;
					LOC8 = 0;
					LOC8 = newsymnode_215234(v_418602.v);
					addfactle_337402((&(*c).guards), v_418602.lower, LOC8);
				}
				LA6: ;
				i_418608 += ((NI) 1);
			} LA3: ;
		}
	}
}

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;
}

N_NIMCALL(void, checkle_418433)(Analysisctx418008* c, Tnode213790* a, Tnode213790* b) {
	NU8 LOC1;
	LOC1 = 0;
	LOC1 = provele_337382((*c).guards, a, b);
	switch (LOC1) {
	case ((NU8) 0):
	{
		NimStringDesc* LOC3;
		NimStringDesc* LOC4;
		NimStringDesc* LOC5;
		LOC3 = 0;
		LOC4 = 0;
		LOC4 = rendertree_232044(a, 0);
		LOC5 = 0;
		LOC5 = rendertree_232044(b, 0);
		LOC3 = rawNewString(LOC4->Sup.len + LOC5->Sup.len + 33);
appendString(LOC3, ((NimStringDesc*) &TMP4279));
appendString(LOC3, LOC4);
appendString(LOC3, ((NimStringDesc*) &TMP4280));
appendString(LOC3, LOC5);
appendString(LOC3, ((NimStringDesc*) &TMP4281));
		localerror_186085((*a).info, LOC3);
	}
	break;
	case ((NU8) 2):
	{
	}
	break;
	case ((NU8) 1):
	{
		NimStringDesc* LOC8;
		NimStringDesc* LOC9;
		NimStringDesc* LOC10;
		LOC8 = 0;
		LOC9 = 0;
		LOC9 = rendertree_232044(a, 0);
		LOC10 = 0;
		LOC10 = rendertree_232044(b, 0);
		LOC8 = rawNewString(LOC9->Sup.len + LOC10->Sup.len + 29);
appendString(LOC8, ((NimStringDesc*) &TMP4282));
appendString(LOC8, LOC9);
appendString(LOC8, ((NimStringDesc*) &TMP4283));
appendString(LOC8, LOC10);
appendString(LOC8, ((NimStringDesc*) &TMP4281));
		localerror_186085((*a).info, LOC8);
	}
	break;
	}
}

N_NIMCALL(void, checkbounds_418442)(Analysisctx418008* c, Tnode213790* arr, Tnode213790* idx) {
	Tnode213790* LOC1;
	Tnode213790* LOC2;
	LOC1 = 0;
	LOC1 = lowbound_334558(arr);
	checkle_418433(c, LOC1, idx);
	LOC2 = 0;
	LOC2 = highbound_334562(arr);
	checkle_418433(c, idx, LOC2);
}

N_NIMCALL(void, addslice_418611)(Analysisctx418008* c, Tnode213790* n, Tnode213790* x, Tnode213790* le_418617, Tnode213790* ri_418618) {
	Tnode213790* le;
	Tnode213790* ri;
	NI oldstate;
	TY418021 LOC1;
	checklocal_418383((&(*c)), n);
	le = canon_334675(le_418617);
	ri = canon_334675(ri_418618);
	oldstate = ((*c).guards ? (*c).guards->Sup.len : 0);
	addlowerboundasfacts_418449(c);
	checkbounds_418442((&(*c)), x, le);
	checkbounds_418442((&(*c)), x, ri);
	(*c).guards = (Tnodeseq213784*) setLengthSeq(&((*c).guards)->Sup, sizeof(Tnode213790*), ((NI) (oldstate)));
	memset((void*)(&LOC1), 0, sizeof(LOC1));
	LOC1.Field0 = x;
	LOC1.Field1 = le;
	LOC1.Field2 = ri;
	LOC1.Field3 = (*c).currentspawnid;
	LOC1.Field4 = (((NI) 0) < (*c).inloop);
	(*c).slices = (TY418020*) incrSeqV2(&((*c).slices)->Sup, sizeof(TY418021));
	genericAssign((void*)(&(*c).slices->data[(*c).slices->Sup.len]), (void*)(&LOC1), (&NTI418021));
	++(*c).slices->Sup.len;
}

N_NIMCALL(void, analysecall_419144)(Analysisctx418008* c, Tnode213790* n, Tsym213822* op) {
	{
		NI oldspawnid;
		Tnode213790* LOC5;
		if (!((*op).magic == ((NU8) 201))) goto LA3;
		(*c).spawns += ((NI) 1);
		oldspawnid = (*c).currentspawnid;
		(*c).currentspawnid = (*c).spawns;
		LOC5 = 0;
		LOC5 = HEX5BHEX5D_214238(n, ((NI) 1));
		gatherargs_418192(c, LOC5);
		analysesons_419077(c, n);
		(*c).currentspawnid = oldspawnid;
	}
	goto LA1;
	LA3: ;
	{
		NIM_BOOL LOC7;
		NIM_BOOL LOC9;
		LOC7 = 0;
		LOC7 = ((*op).magic == ((NU8) 26));
		if (LOC7) goto LA8;
		LOC9 = 0;
		LOC9 = eqStrings((*(*op).name).s, ((NimStringDesc*) &TMP4271));
		if (!(LOC9)) goto LA10;
		LOC9 = fromsystem_419124(op);
		LA10: ;
		LOC7 = LOC9;
		LA8: ;
		if (!LOC7) goto LA11;
		{
			Tnode213790* LOC15;
			NIM_BOOL LOC16;
			Tnode213790* incr;
			Tnode213790* LOC19;
			LOC15 = 0;
			LOC15 = HEX5BHEX5D_214238(n, ((NI) 1));
			LOC16 = 0;
			LOC16 = islocal_418329(LOC15);
			if (!LOC16) goto LA17;
			LOC19 = 0;
			LOC19 = HEX5BHEX5D_214238(n, ((NI) 2));
			incr = skipconv_248082(LOC19);
			{
				NIM_BOOL LOC22;
				Monotonicvar418006* slot;
				Tnode213790* LOC26;
				LOC22 = 0;
				LOC22 = ((*incr).kind >= ((NU8) 5) && (*incr).kind <= ((NU8) 14));
				if (!(LOC22)) goto LA23;
				LOC22 = (IL64(0) < (*incr).kindU.S1.intval);
				LA23: ;
				if (!LOC22) goto LA24;
				LOC26 = 0;
				LOC26 = HEX5BHEX5D_214238(n, ((NI) 1));
				slot = getslot_418163(c, (*LOC26).kindU.S4.sym);
				unsureAsgnRef((void**) (&(*slot).stride), min_419108((*slot).stride, incr));
			}
			LA24: ;
		}
		LA17: ;
		analysesons_419077(c, n);
	}
	goto LA1;
	LA11: ;
	{
		NIM_BOOL LOC28;
		Tnode213790* slice;
		Tnode213790* LOC32;
		Tnode213790* LOC33;
		Tnode213790* LOC34;
		Tnode213790* LOC35;
		LOC28 = 0;
		LOC28 = eqStrings((*(*op).name).s, ((NimStringDesc*) &TMP4272));
		if (!(LOC28)) goto LA29;
		LOC28 = fromsystem_419124(op);
		LA29: ;
		if (!LOC28) goto LA30;
		LOC32 = 0;
		LOC32 = HEX5BHEX5D_214238(n, ((NI) 2));
		slice = skipstmtlist_218554(LOC32);
		LOC33 = 0;
		LOC33 = HEX5BHEX5D_214238(n, ((NI) 1));
		LOC34 = 0;
		LOC34 = HEX5BHEX5D_214238(slice, ((NI) 1));
		LOC35 = 0;
		LOC35 = HEX5BHEX5D_214238(slice, ((NI) 2));
		addslice_418611(c, n, LOC33, LOC34, LOC35);
		analysesons_419077(c, n);
	}
	goto LA1;
	LA30: ;
	{
		NIM_BOOL LOC37;
		Tnode213790* slice;
		Tnode213790* LOC41;
		Tnode213790* LOC42;
		Tnode213790* LOC43;
		Tnode213790* LOC44;
		LOC37 = 0;
		LOC37 = eqStrings((*(*op).name).s, ((NimStringDesc*) &TMP4284));
		if (!(LOC37)) goto LA38;
		LOC37 = fromsystem_419124(op);
		LA38: ;
		if (!LOC37) goto LA39;
		LOC41 = 0;
		LOC41 = HEX5BHEX5D_214238(n, ((NI) 2));
		slice = skipstmtlist_218554(LOC41);
		LOC42 = 0;
		LOC42 = HEX5BHEX5D_214238(n, ((NI) 1));
		LOC43 = 0;
		LOC43 = HEX5BHEX5D_214238(slice, ((NI) 1));
		LOC44 = 0;
		LOC44 = HEX5BHEX5D_214238(slice, ((NI) 2));
		addslice_418611(c, n, LOC42, LOC43, LOC44);
		analysesons_419077(c, n);
	}
	goto LA1;
	LA39: ;
	{
		analysesons_419077(c, n);
	}
	LA1: ;
}

static N_INLINE(NI, len_214059)(Tnode213790* 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(void, analysecase_419211)(Analysisctx418008* c, Tnode213790* n) {
	NI oldfacts;
	analyse_419072(c, (*n).kindU.S6.sons->data[((NI) 0)]);
	oldfacts = ((*c).guards ? (*c).guards->Sup.len : 0);
	{
		NI i_419244;
		NI HEX3Atmp_419297;
		NI LOC2;
		NI res_419300;
		i_419244 = 0;
		HEX3Atmp_419297 = 0;
		LOC2 = 0;
		LOC2 = len_214059(n);
		HEX3Atmp_419297 = (LOC2 - 1);
		res_419300 = ((NI) 1);
		{
			while (1) {
				Tnode213790* branch;
				if (!(res_419300 <= HEX3Atmp_419297)) goto LA4;
				i_419244 = res_419300;
				branch = (*n).kindU.S6.sons->data[i_419244];
				(*c).guards = (Tnodeseq213784*) setLengthSeq(&((*c).guards)->Sup, sizeof(Tnode213790*), ((NI) (oldfacts)));
				addcasebranchfacts_337694((&(*c).guards), n, i_419244);
				{
					NI i_419276;
					NI HEX3Atmp_419290;
					NI LOC6;
					NI res_419293;
					i_419276 = 0;
					HEX3Atmp_419290 = 0;
					LOC6 = 0;
					LOC6 = len_214059(branch);
					HEX3Atmp_419290 = (LOC6 - 1);
					res_419293 = ((NI) 0);
					{
						while (1) {
							if (!(res_419293 <= HEX3Atmp_419290)) goto LA8;
							i_419276 = res_419293;
							analyse_419072(c, (*branch).kindU.S6.sons->data[i_419276]);
							res_419293 += ((NI) 1);
						} LA8: ;
					}
				}
				res_419300 += ((NI) 1);
			} LA4: ;
		}
	}
	(*c).guards = (Tnodeseq213784*) setLengthSeq(&((*c).guards)->Sup, sizeof(Tnode213790*), ((NI) (oldfacts)));
}

N_NIMCALL(void, analyseif_419304)(Analysisctx418008* c, Tnode213790* n) {
	NI oldfacts;
	Tnode213790* LOC1;
	analyse_419072(c, (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S6.sons->data[((NI) 0)]);
	oldfacts = ((*c).guards ? (*c).guards->Sup.len : 0);
	LOC1 = 0;
	LOC1 = canon_334675((*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S6.sons->data[((NI) 0)]);
	addfact_335193((&(*c).guards), LOC1);
	analyse_419072(c, (*(*n).kindU.S6.sons->data[((NI) 0)]).kindU.S6.sons->data[((NI) 1)]);
	{
		NI i_419343;
		NI HEX3Atmp_419419;
		NI LOC3;
		NI res_419422;
		i_419343 = 0;
		HEX3Atmp_419419 = 0;
		LOC3 = 0;
		LOC3 = len_214059(n);
		HEX3Atmp_419419 = (LOC3 - 1);
		res_419422 = ((NI) 1);
		{
			while (1) {
				Tnode213790* branch;
				if (!(res_419422 <= HEX3Atmp_419419)) goto LA5;
				i_419343 = res_419422;
				branch = (*n).kindU.S6.sons->data[i_419343];
				(*c).guards = (Tnodeseq213784*) setLengthSeq(&((*c).guards)->Sup, sizeof(Tnode213790*), ((NI) (oldfacts)));
				{
					NI j_419365;
					NI HEX3Atmp_419404;
					NI res_419407;
					j_419365 = 0;
					HEX3Atmp_419404 = 0;
					HEX3Atmp_419404 = (NI)(i_419343 - ((NI) 1));
					res_419407 = ((NI) 0);
					{
						while (1) {
							Tnode213790* LOC9;
							if (!(res_419407 <= HEX3Atmp_419404)) goto LA8;
							j_419365 = res_419407;
							LOC9 = 0;
							LOC9 = canon_334675((*(*n).kindU.S6.sons->data[j_419365]).kindU.S6.sons->data[((NI) 0)]);
							addfactneg_335221((&(*c).guards), LOC9);
							res_419407 += ((NI) 1);
						} LA8: ;
					}
				}
				{
					NI LOC12;
					Tnode213790* LOC15;
					LOC12 = 0;
					LOC12 = len_214059(branch);
					if (!(((NI) 1) < LOC12)) goto LA13;
					LOC15 = 0;
					LOC15 = canon_334675((*branch).kindU.S6.sons->data[((NI) 0)]);
					addfact_335193((&(*c).guards), LOC15);
				}
				LA13: ;
				{
					NI i_419390;
					NI HEX3Atmp_419412;
					NI LOC17;
					NI res_419415;
					i_419390 = 0;
					HEX3Atmp_419412 = 0;
					LOC17 = 0;
					LOC17 = len_214059(branch);
					HEX3Atmp_419412 = (LOC17 - 1);
					res_419415 = ((NI) 0);
					{
						while (1) {
							if (!(res_419415 <= HEX3Atmp_419412)) goto LA19;
							i_419390 = res_419415;
							analyse_419072(c, (*branch).kindU.S6.sons->data[i_419390]);
							res_419415 += ((NI) 1);
						} LA19: ;
					}
				}
				res_419422 += ((NI) 1);
			} LA5: ;
		}
	}
	(*c).guards = (Tnodeseq213784*) setLengthSeq(&((*c).guards)->Sup, sizeof(Tnode213790*), ((NI) (oldfacts)));
}

N_NIMCALL(void, analyse_419072)(Analysisctx418008* c, Tnode213790* n) {
	switch ((*n).kind) {
	case ((NU8) 73):
	case ((NU8) 74):
	{
		Tnode213790* y;
		Tnode213790* LOC2;
		Tnode213790* LOC17;
		Tnode213790* value;
		Tnode213790* LOC27;
		LOC2 = 0;
		LOC2 = HEX5BHEX5D_214238(n, ((NI) 1));
		y = skipconv_248082(LOC2);
		{
			NIM_BOOL LOC5;
			Tnode213790* LOC6;
			Monotonicvar418006* slot;
			Tnode213790* LOC10;
			LOC5 = 0;
			LOC6 = 0;
			LOC6 = HEX5BHEX5D_214238(n, ((NI) 0));
			LOC5 = issingleassignable_418275(LOC6);
			if (!(LOC5)) goto LA7;
			LOC5 = islocal_418329(y);
			LA7: ;
			if (!LOC5) goto LA8;
			slot = getslot_418163(c, (*y).kindU.S4.sym);
			LOC10 = 0;
			LOC10 = HEX5BHEX5D_214238(n, ((NI) 0));
			unsureAsgnRef((void**) (&(*slot).alias), (*LOC10).kindU.S4.sym);
		}
		goto LA3;
		LA8: ;
		{
			Tnode213790* LOC12;
			NIM_BOOL LOC13;
			Monotonicvar418006* slot;
			Tnode213790* LOC16;
			LOC12 = 0;
			LOC12 = HEX5BHEX5D_214238(n, ((NI) 0));
			LOC13 = 0;
			LOC13 = islocal_418329(LOC12);
			if (!LOC13) goto LA14;
			LOC16 = 0;
			LOC16 = HEX5BHEX5D_214238(n, ((NI) 0));
			slot = getslot_418163(c, (*LOC16).kindU.S4.sym);
			(*slot).blacklisted = NIM_TRUE;
		}
		goto LA3;
		LA14: ;
		LA3: ;
		LOC17 = 0;
		LOC17 = HEX5BHEX5D_214238(n, ((NI) 0));
		invalidatefacts_335410((&(*c).guards), LOC17);
		value = HEX5BHEX5D_214238(n, ((NI) 1));
		{
			NU8 LOC20;
			NI oldspawnid;
			Tnode213790* LOC23;
			Tnode213790* LOC24;
			Tnode213790* LOC25;
			LOC20 = 0;
			LOC20 = getmagic_238323(value);
			if (!(LOC20 == ((NU8) 201))) goto LA21;
			(*c).spawns += ((NI) 1);
			oldspawnid = (*c).currentspawnid;
			(*c).currentspawnid = (*c).spawns;
			LOC23 = 0;
			LOC23 = HEX5BHEX5D_214238(value, ((NI) 1));
			gatherargs_418192(c, LOC23);
			LOC24 = 0;
			LOC24 = HEX5BHEX5D_214238(value, ((NI) 1));
			analysesons_419077(c, LOC24);
			LOC25 = 0;
			LOC25 = HEX5BHEX5D_214238(n, ((NI) 0));
			analyse_419072(c, LOC25);
			(*c).currentspawnid = oldspawnid;
		}
		goto LA18;
		LA21: ;
		{
			analysesons_419077(c, n);
		}
		LA18: ;
		LOC27 = 0;
		LOC27 = HEX5BHEX5D_214238(n, ((NI) 0));
		addasgnfact_337655((&(*c).guards), LOC27, y);
	}
	break;
	case ((NU8) 27):
	case ((NU8) 29):
	case ((NU8) 30):
	case ((NU8) 31):
	case ((NU8) 26):
	case ((NU8) 28):
	case ((NU8) 32):
	{
		{
			Tnode213790* LOC31;
			Tnode213790* LOC34;
			LOC31 = 0;
			LOC31 = HEX5BHEX5D_214238(n, ((NI) 0));
			if (!((*LOC31).kind == ((NU8) 3))) goto LA32;
			LOC34 = 0;
			LOC34 = HEX5BHEX5D_214238(n, ((NI) 0));
			analysecall_419144(c, n, (*LOC34).kindU.S4.sym);
		}
		goto LA29;
		LA32: ;
		{
			analysesons_419077(c, n);
		}
		LA29: ;
	}
	break;
	case ((NU8) 42):
	{
		Tnode213790* LOC37;
		Tnode213790* LOC38;
		Tnode213790* LOC39;
		LOC37 = 0;
		LOC37 = HEX5BHEX5D_214238(n, ((NI) 0));
		LOC38 = 0;
		LOC38 = HEX5BHEX5D_214238(n, ((NI) 1));
		LOC39 = 0;
		LOC39 = HEX5BHEX5D_214238(n, ((NI) 1));
		addslice_418611(c, n, LOC37, LOC38, LOC39);
		analysesons_419077(c, n);
	}
	break;
	case ((NU8) 109):
	case ((NU8) 108):
	case ((NU8) 106):
	{
		localerror_186085((*n).info, ((NimStringDesc*) &TMP4285));
	}
	break;
	case ((NU8) 99):
	case ((NU8) 100):
	{
		{
			Tnode213790* it_419473;
			it_419473 = 0;
			{
				NI i_419605;
				NI HEX3Atmp_419607;
				NI LOC44;
				NI res_419609;
				i_419605 = 0;
				HEX3Atmp_419607 = 0;
				LOC44 = 0;
				LOC44 = len_214059(n);
				HEX3Atmp_419607 = (LOC44 - 1);
				res_419609 = ((NI) 0);
				{
					while (1) {
						Tnode213790* value;
						NIM_BOOL isspawned;
						NU8 LOC47;
						if (!(res_419609 <= HEX3Atmp_419607)) goto LA46;
						i_419605 = res_419609;
						it_419473 = (*n).kindU.S6.sons->data[i_419605];
						value = lastson_216364(it_419473);
						LOC47 = 0;
						LOC47 = getmagic_238323(value);
						isspawned = (LOC47 == ((NU8) 201));
						{
							NI oldspawnid;
							Tnode213790* LOC52;
							Tnode213790* LOC53;
							if (!isspawned) goto LA50;
							(*c).spawns += ((NI) 1);
							oldspawnid = (*c).currentspawnid;
							(*c).currentspawnid = (*c).spawns;
							LOC52 = 0;
							LOC52 = HEX5BHEX5D_214238(value, ((NI) 1));
							gatherargs_418192(c, LOC52);
							LOC53 = 0;
							LOC53 = HEX5BHEX5D_214238(value, ((NI) 1));
							analysesons_419077(c, LOC53);
							(*c).currentspawnid = oldspawnid;
						}
						LA50: ;
						{
							if (!!(((*value).kind == ((NU8) 1)))) goto LA56;
							{
								NI j_419515;
								NI HEX3Atmp_419595;
								NI LOC59;
								NI res_419598;
								j_419515 = 0;
								HEX3Atmp_419595 = 0;
								LOC59 = 0;
								LOC59 = len_214059(it_419473);
								HEX3Atmp_419595 = (NI)(LOC59 - ((NI) 3));
								res_419598 = ((NI) 0);
								{
									while (1) {
										if (!(res_419598 <= HEX3Atmp_419595)) goto LA61;
										j_419515 = res_419598;
										{
											Tnode213790* LOC64;
											NIM_BOOL LOC65;
											Monotonicvar418006* slot;
											Tnode213790* LOC68;
											LOC64 = 0;
											LOC64 = HEX5BHEX5D_214238(it_419473, j_419515);
											LOC65 = 0;
											LOC65 = islocal_418329(LOC64);
											if (!LOC65) goto LA66;
											LOC68 = 0;
											LOC68 = HEX5BHEX5D_214238(it_419473, j_419515);
											slot = getslot_418163(c, (*LOC68).kindU.S4.sym);
											{
												if (!(*slot).lower == 0) goto LA71;
												unsureAsgnRef((void**) (&(*slot).lower), value);
											}
											goto LA69;
											LA71: ;
											{
												internalerror_186100((*it_419473).info, ((NimStringDesc*) &TMP4286));
											}
											LA69: ;
										}
										LA66: ;
										res_419598 += ((NI) 1);
									} LA61: ;
								}
							}
							{
								if (!!(isspawned)) goto LA76;
								analyse_419072(c, value);
							}
							LA76: ;
						}
						LA56: ;
						res_419609 += ((NI) 1);
					} LA46: ;
				}
			}
		}
	}
	break;
	case ((NU8) 97):
	{
		analysecase_419211(c, n);
	}
	break;
	case ((NU8) 93):
	case ((NU8) 92):
	case ((NU8) 48):
	{
		analyseif_419304(c, n);
	}
	break;
	case ((NU8) 96):
	{
		analyse_419072(c, (*n).kindU.S6.sons->data[((NI) 0)]);
		(*c).inloop += ((NI) 1);
		{
			NIM_BOOL LOC83;
			LOC83 = 0;
			LOC83 = istrue_344867((*n).kindU.S6.sons->data[((NI) 0)]);
			if (!LOC83) goto LA84;
			analysesons_419077(c, (*n).kindU.S6.sons->data[((NI) 1)]);
		}
		goto LA81;
		LA84: ;
		{
			NI oldstate;
			NI oldfacts;
			Tnode213790* LOC87;
			oldstate = ((*c).locals ? (*c).locals->Sup.len : 0);
			oldfacts = ((*c).guards ? (*c).guards->Sup.len : 0);
			LOC87 = 0;
			LOC87 = canon_334675((*n).kindU.S6.sons->data[((NI) 0)]);
			addfact_335193((&(*c).guards), LOC87);
			analyse_419072(c, (*n).kindU.S6.sons->data[((NI) 1)]);
			(*c).locals = (TY418018*) setLengthSeq(&((*c).locals)->Sup, sizeof(Monotonicvar418006), ((NI) (oldstate)));
			(*c).guards = (Tnodeseq213784*) setLengthSeq(&((*c).guards)->Sup, sizeof(Tnode213790*), ((NI) (oldfacts)));
			{
				NIM_BOOL LOC90;
				Tnode213790* LOC93;
				LOC90 = 0;
				LOC90 = hassubnodewith_218175((*n).kindU.S6.sons->data[((NI) 1)], ((NU8) 110));
				if (!!(LOC90)) goto LA91;
				LOC93 = 0;
				LOC93 = canon_334675((*n).kindU.S6.sons->data[((NI) 0)]);
				addfactneg_335221((&(*c).guards), LOC93);
			}
			LA91: ;
		}
		LA81: ;
		(*c).inloop -= ((NI) 1);
	}
	break;
	case ((NU8) 98):
	case ((NU8) 79):
	case ((NU8) 81):
	case ((NU8) 80):
	case ((NU8) 84):
	case ((NU8) 82):
	case ((NU8) 83):
	case ((NU8) 101):
	case ((NU8) 90):
	{
	}
	break;
	default:
	{
		analysesons_419077(c, n);
	}
	break;
	}
}

N_NIMCALL(void, overlap_418653)(Tnodeseq213784* m, Tnode213790* x, Tnode213790* y, Tnode213790* c, Tnode213790* d) {
	NU8 LOC1;
	LOC1 = 0;
	LOC1 = provele_337382(m, c, y);
	switch (LOC1) {
	case ((NU8) 0):
	{
		NU8 LOC3;
		LOC3 = 0;
		LOC3 = provele_337382(m, x, d);
		switch (LOC3) {
		case ((NU8) 1):
		{
		}
		break;
		case ((NU8) 0):
		case ((NU8) 2):
		{
			TY418660 LOC6;
			NimStringDesc* LOC7;
			memset((void*)LOC6, 0, sizeof(LOC6));
			LOC6[0] = rendertree_232044(c, 0);
			LOC6[1] = rendertree_232044(y, 0);
			LOC6[2] = rendertree_232044(x, 0);
			LOC6[3] = rendertree_232044(y, 0);
			LOC6[4] = rendertree_232044(c, 0);
			LOC6[5] = rendertree_232044(d, 0);
			LOC7 = 0;
			LOC7 = nsuFormatOpenArray(((NimStringDesc*) &TMP4288), LOC6, 6);
			localerror_186085((*x).info, LOC7);
		}
		break;
		}
	}
	break;
	case ((NU8) 2):
	{
		NU8 LOC9;
		LOC9 = 0;
		LOC9 = provele_337382(m, x, d);
		switch (LOC9) {
		case ((NU8) 0):
		{
			TY418660 LOC11;
			NimStringDesc* LOC12;
			memset((void*)LOC11, 0, sizeof(LOC11));
			LOC11[0] = rendertree_232044(x, 0);
			LOC11[1] = rendertree_232044(d, 0);
			LOC11[2] = rendertree_232044(x, 0);
			LOC11[3] = rendertree_232044(y, 0);
			LOC11[4] = rendertree_232044(c, 0);
			LOC11[5] = rendertree_232044(d, 0);
			LOC12 = 0;
			LOC12 = nsuFormatOpenArray(((NimStringDesc*) &TMP4288), LOC11, 6);
			localerror_186085((*x).info, LOC12);
		}
		break;
		case ((NU8) 2):
		{
			TY418660 LOC14;
			NimStringDesc* LOC15;
			memset((void*)LOC14, 0, sizeof(LOC14));
			LOC14[0] = rendertree_232044(c, 0);
			LOC14[1] = rendertree_232044(y, 0);
			LOC14[2] = rendertree_232044(x, 0);
			LOC14[3] = rendertree_232044(y, 0);
			LOC14[4] = rendertree_232044(c, 0);
			LOC14[5] = rendertree_232044(d, 0);
			LOC15 = 0;
			LOC15 = nsuFormatOpenArray(((NimStringDesc*) &TMP4289), LOC14, 6);
			localerror_186085((*x).info, LOC15);
		}
		break;
		case ((NU8) 1):
		{
		}
		break;
		}
	}
	break;
	case ((NU8) 1):
	{
	}
	break;
	}
}

N_NIMCALL(Tnode213790*, substride_418741)(Analysisctx418008* c, Tnode213790* n) {
	Tnode213790* result;
	result = 0;
	{
		NIM_BOOL LOC3;
		NI s;
		LOC3 = 0;
		LOC3 = islocal_418329(n);
		if (!LOC3) goto LA4;
		s = lookupslot_418102(c, (*n).kindU.S4.sym);
		{
			NIM_BOOL LOC8;
			LOC8 = 0;
			LOC8 = (((NI) 0) <= s);
			if (!(LOC8)) goto LA9;
			LOC8 = !(((*c).locals->data[s].stride == NIM_NIL));
			LA9: ;
			if (!LOC8) goto LA10;
			result = HEX2BHEX40_334976(n, (*(*c).locals->data[s].stride).kindU.S1.intval);
		}
		goto LA6;
		LA10: ;
		{
			result = n;
		}
		LA6: ;
	}
	goto LA1;
	LA4: ;
	{
		NI LOC14;
		LOC14 = 0;
		LOC14 = safelen_214081(n);
		if (!(((NI) 0) < LOC14)) goto LA15;
		result = shallowcopy_217611(n);
		{
			NI i_418780;
			NI HEX3Atmp_418784;
			NI LOC18;
			NI res_418787;
			i_418780 = 0;
			HEX3Atmp_418784 = 0;
			LOC18 = 0;
			LOC18 = len_214059(n);
			HEX3Atmp_418784 = (LOC18 - 1);
			res_418787 = ((NI) 0);
			{
				while (1) {
					if (!(res_418787 <= HEX3Atmp_418784)) goto LA20;
					i_418780 = res_418787;
					asgnRefNoCycle((void**) (&(*result).kindU.S6.sons->data[i_418780]), substride_418741(c, (*n).kindU.S6.sons->data[i_418780]));
					res_418787 += ((NI) 1);
				} LA20: ;
			}
		}
	}
	goto LA1;
	LA15: ;
	{
		result = n;
	}
	LA1: ;
	return result;
}

N_NIMCALL(NI64, stride_418684)(Analysisctx418008* c, Tnode213790* n) {
	NI64 result;
	result = 0;
	{
		NIM_BOOL LOC3;
		NI s;
		LOC3 = 0;
		LOC3 = islocal_418329(n);
		if (!LOC3) goto LA4;
		s = lookupslot_418102(c, (*n).kindU.S4.sym);
		{
			NIM_BOOL LOC8;
			LOC8 = 0;
			LOC8 = (((NI) 0) <= s);
			if (!(LOC8)) goto LA9;
			LOC8 = !(((*c).locals->data[s].stride == NIM_NIL));
			LA9: ;
			if (!LOC8) goto LA10;
			result = (*(*c).locals->data[s].stride).kindU.S1.intval;
		}
		LA10: ;
	}
	goto LA1;
	LA4: ;
	{
		{
			NI i_418722;
			NI HEX3Atmp_418734;
			NI LOC14;
			NI res_418737;
			i_418722 = 0;
			HEX3Atmp_418734 = 0;
			LOC14 = 0;
			LOC14 = safelen_214081(n);
			HEX3Atmp_418734 = (LOC14 - 1);
			res_418737 = ((NI) 0);
			{
				while (1) {
					NI64 LOC17;
					if (!(res_418737 <= HEX3Atmp_418734)) goto LA16;
					i_418722 = res_418737;
					LOC17 = 0;
					LOC17 = stride_418684(c, (*n).kindU.S6.sons->data[i_418722]);
					result += LOC17;
					res_418737 += ((NI) 1);
				} LA16: ;
			}
		}
	}
	LA1: ;
	return result;
}

N_NIMCALL(void, checkslicesaredisjoint_418791)(Analysisctx418008* c) {
	addlowerboundasfacts_418449(c);
	{
		Tnode213790* x_419002;
		Tnode213790* a_419003;
		Tnode213790* b_419004;
		NI id_419005;
		NIM_BOOL inloop_419006;
		TY418020* HEX3Atmp_419049;
		NI i_419052;
		NI L_419054;
		x_419002 = 0;
		a_419003 = 0;
		b_419004 = 0;
		id_419005 = 0;
		inloop_419006 = 0;
		HEX3Atmp_419049 = 0;
		HEX3Atmp_419049 = (*c).slices;
		i_419052 = ((NI) 0);
		L_419054 = (HEX3Atmp_419049 ? HEX3Atmp_419049->Sup.len : 0);
		{
			while (1) {
				if (!(i_419052 < L_419054)) goto LA3;
				x_419002 = HEX3Atmp_419049->data[i_419052].Field0;
				a_419003 = HEX3Atmp_419049->data[i_419052].Field1;
				b_419004 = HEX3Atmp_419049->data[i_419052].Field2;
				id_419005 = HEX3Atmp_419049->data[i_419052].Field3;
				inloop_419006 = HEX3Atmp_419049->data[i_419052].Field4;
				{
					Tnode213790* LOC8;
					Tnode213790* LOC9;
					if (!inloop_419006) goto LA6;
					LOC8 = 0;
					LOC8 = substride_418741((&(*c)), a_419003);
					LOC9 = 0;
					LOC9 = substride_418741((&(*c)), b_419004);
					overlap_418653((*c).guards, a_419003, b_419004, LOC8, LOC9);
				}
				LA6: ;
				i_419052 += ((NI) 1);
			} LA3: ;
		}
	}
	{
		NI i_419016;
		NI HEX3Atmp_419065;
		NI res_419068;
		i_419016 = 0;
		HEX3Atmp_419065 = 0;
		HEX3Atmp_419065 = ((*c).slices ? ((*c).slices->Sup.len-1) : -1);
		res_419068 = ((NI) 0);
		{
			while (1) {
				if (!(res_419068 <= HEX3Atmp_419065)) goto LA12;
				i_419016 = res_419068;
				{
					NI j_419026;
					NI HEX3Atmp_419057;
					NI HEX3Atmp_419058;
					NI res_419061;
					j_419026 = 0;
					HEX3Atmp_419057 = 0;
					HEX3Atmp_419058 = 0;
					HEX3Atmp_419057 = (NI)(i_419016 + ((NI) 1));
					HEX3Atmp_419058 = ((*c).slices ? ((*c).slices->Sup.len-1) : -1);
					res_419061 = HEX3Atmp_419057;
					{
						while (1) {
							TY418021 x;
							TY418021 y;
							if (!(res_419061 <= HEX3Atmp_419058)) goto LA15;
							j_419026 = res_419061;
							memset((void*)(&x), 0, sizeof(x));
							memcpy((void*)(&x), (NIM_CONST void*)(&(*c).slices->data[i_419016]), sizeof(x));
							memset((void*)(&y), 0, sizeof(y));
							memcpy((void*)(&y), (NIM_CONST void*)(&(*c).slices->data[j_419026]), sizeof(y));
							{
								NIM_BOOL LOC18;
								LOC18 = 0;
								LOC18 = !((x.Field3 == y.Field3));
								if (!(LOC18)) goto LA19;
								LOC18 = sametree_335245(x.Field0, y.Field0);
								LA19: ;
								if (!LOC18) goto LA20;
								{
									NIM_BOOL LOC24;
									LOC24 = 0;
									LOC24 = !(x.Field4);
									if (LOC24) goto LA25;
									LOC24 = !(y.Field4);
									LA25: ;
									if (!LOC24) goto LA26;
									overlap_418653((*c).guards, x.Field1, x.Field2, y.Field1, y.Field2);
								}
								goto LA22;
								LA26: ;
								{
									NI64 k;
									NI64 m;
									NIM_BOOL LOC29;
									NI64 stride;
									NI64 LOC33;
									NI64 LOC34;
									k = simpleslice_336042(x.Field1, x.Field2);
									m = simpleslice_336042(y.Field1, y.Field2);
									LOC29 = 0;
									LOC29 = (IL64(0) <= k);
									if (!(LOC29)) goto LA30;
									LOC29 = (IL64(0) <= m);
									LA30: ;
									if (!LOC29) goto LA31;
									overlap_418653((*c).guards, x.Field1, x.Field2, y.Field1, y.Field2);
									LOC33 = 0;
									LOC33 = stride_418684((&(*c)), x.Field1);
									LOC34 = 0;
									LOC34 = stride_418684((&(*c)), y.Field1);
									stride = ((LOC33 <= LOC34) ? LOC33 : LOC34);
									{
										NIM_BOOL LOC37;
										LOC37 = 0;
										LOC37 = (k < stride);
										if (!(LOC37)) goto LA38;
										LOC37 = (m < stride);
										LA38: ;
										if (!LOC37) goto LA39;
									}
									goto LA35;
									LA39: ;
									{
										TY184781 LOC42;
										NimStringDesc* LOC43;
										memset((void*)LOC42, 0, sizeof(LOC42));
										LOC42[0] = rendertree_232044(x.Field1, 0);
										LOC42[1] = rendertree_232044(x.Field2, 0);
										LOC42[2] = rendertree_232044(y.Field1, 0);
										LOC42[3] = rendertree_232044(y.Field2, 0);
										LOC43 = 0;
										LOC43 = nsuFormatOpenArray(((NimStringDesc*) &TMP4290), LOC42, 4);
										localerror_186085((*x.Field0).info, LOC43);
									}
									LA35: ;
								}
								goto LA22;
								LA31: ;
								{
									TY184781 LOC45;
									NimStringDesc* LOC46;
									memset((void*)LOC45, 0, sizeof(LOC45));
									LOC45[0] = rendertree_232044(x.Field1, 0);
									LOC45[1] = rendertree_232044(x.Field2, 0);
									LOC45[2] = rendertree_232044(y.Field1, 0);
									LOC45[3] = rendertree_232044(y.Field2, 0);
									LOC46 = 0;
									LOC46 = nsuFormatOpenArray(((NimStringDesc*) &TMP4290), LOC45, 4);
									localerror_186085((*x.Field0).info, LOC46);
								}
								LA22: ;
							}
							LA20: ;
							res_419061 += ((NI) 1);
						} LA15: ;
					}
				}
				res_419068 += ((NI) 1);
			} LA12: ;
		}
	}
}

N_NIMCALL(void, checkargs_419812)(Analysisctx418008* a, Tnode213790* n) {
}

N_NIMCALL(void, generatealiaschecks_419817)(Analysisctx418008* a, Tnode213790* result) {
}

N_NIMCALL(Tnode213790*, transformslices_419612)(Tnode213790* n) {
	Tnode213790* result;
{	result = 0;
	{
		NIM_BOOL LOC3;
		Tnode213790* LOC5;
		Tsym213822* op;
		Tnode213790* LOC8;
		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 = HEX5BHEX5D_214238(n, ((NI) 0));
		LOC3 = ((*LOC5).kind == ((NU8) 3));
		LA4: ;
		if (!LOC3) goto LA6;
		LOC8 = 0;
		LOC8 = HEX5BHEX5D_214238(n, ((NI) 0));
		op = (*LOC8).kindU.S4.sym;
		{
			NIM_BOOL LOC11;
			Tnode213790* LOC15;
			Tnode213790* LOC16;
			Tnode213790* slice;
			Tnode213790* LOC17;
			Tnode213790* LOC18;
			Tnode213790* LOC19;
			LOC11 = 0;
			LOC11 = eqStrings((*(*op).name).s, ((NimStringDesc*) &TMP4272));
			if (!(LOC11)) goto LA12;
			LOC11 = fromsystem_419124(op);
			LA12: ;
			if (!LOC11) goto LA13;
			result = copynode_217542(n);
			LOC15 = 0;
			LOC15 = newsymnode_215234(opslice_418034);
			add_214114(result, LOC15);
			LOC16 = 0;
			LOC16 = HEX5BHEX5D_214238(n, ((NI) 1));
			add_214114(result, LOC16);
			LOC17 = 0;
			LOC17 = HEX5BHEX5D_214238(n, ((NI) 2));
			slice = skipstmtlist_218554(LOC17);
			LOC18 = 0;
			LOC18 = HEX5BHEX5D_214238(slice, ((NI) 1));
			add_214114(result, LOC18);
			LOC19 = 0;
			LOC19 = HEX5BHEX5D_214238(slice, ((NI) 2));
			add_214114(result, LOC19);
			goto BeforeRet;
		}
		LA13: ;
	}
	LA6: ;
	{
		NI LOC22;
		LOC22 = 0;
		LOC22 = safelen_214081(n);
		if (!(((NI) 0) < LOC22)) goto LA23;
		result = shallowcopy_217611(n);
		{
			NI i_419665;
			NI HEX3Atmp_419669;
			NI LOC26;
			NI res_419672;
			i_419665 = 0;
			HEX3Atmp_419669 = 0;
			LOC26 = 0;
			LOC26 = len_214059(n);
			HEX3Atmp_419669 = (LOC26 - 1);
			res_419672 = ((NI) 0);
			{
				while (1) {
					if (!(res_419672 <= HEX3Atmp_419669)) goto LA28;
					i_419665 = res_419672;
					asgnRefNoCycle((void**) (&(*result).kindU.S6.sons->data[i_419665]), transformslices_419612((*n).kindU.S6.sons->data[i_419665]));
					res_419672 += ((NI) 1);
				} LA28: ;
			}
		}
	}
	goto LA20;
	LA23: ;
	{
		result = n;
	}
	LA20: ;
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Tnode213790*, transformspawnsons_419681)(Tsym213822* owner, Tnode213790* n, Tnode213790* barrier) {
	Tnode213790* result;
	result = 0;
	result = shallowcopy_217611(n);
	{
		NI i_419705;
		NI HEX3Atmp_419709;
		NI LOC2;
		NI res_419712;
		i_419705 = 0;
		HEX3Atmp_419709 = 0;
		LOC2 = 0;
		LOC2 = len_214059(n);
		HEX3Atmp_419709 = (LOC2 - 1);
		res_419712 = ((NI) 0);
		{
			while (1) {
				if (!(res_419712 <= HEX3Atmp_419709)) goto LA4;
				i_419705 = res_419712;
				asgnRefNoCycle((void**) (&(*result).kindU.S6.sons->data[i_419705]), transformspawn_419676(owner, (*n).kindU.S6.sons->data[i_419705], barrier));
				res_419712 += ((NI) 1);
			} LA4: ;
		}
	}
	return result;
}

N_NIMCALL(Tnode213790*, transformspawn_419676)(Tsym213822* owner, Tnode213790* n, Tnode213790* barrier) {
	Tnode213790* result;
{	result = 0;
	switch ((*n).kind) {
	case ((NU8) 99):
	case ((NU8) 100):
	{
		result = NIM_NIL;
		{
			Tnode213790* it_419722;
			it_419722 = 0;
			{
				NI i_419805;
				NI HEX3Atmp_419807;
				NI LOC4;
				NI res_419809;
				i_419805 = 0;
				HEX3Atmp_419807 = 0;
				LOC4 = 0;
				LOC4 = len_214059(n);
				HEX3Atmp_419807 = (LOC4 - 1);
				res_419809 = ((NI) 0);
				{
					while (1) {
						Tnode213790* b;
						if (!(res_419809 <= HEX3Atmp_419807)) goto LA6;
						i_419805 = res_419809;
						it_419722 = (*n).kindU.S6.sons->data[i_419805];
						b = lastson_216364(it_419722);
						{
							NU8 LOC9;
							Tnode213790* m;
							Ttype213828* t;
							Tnode213790* LOC21;
							Tnode213790* LOC22;
							LOC9 = 0;
							LOC9 = getmagic_238323(b);
							if (!(LOC9 == ((NU8) 201))) goto LA10;
							{
								NI LOC14;
								LOC14 = 0;
								LOC14 = len_214059(it_419722);
								if (!!((LOC14 == ((NI) 3)))) goto LA15;
								localerror_186085((*it_419722).info, ((NimStringDesc*) &TMP4294));
							}
							LA15: ;
							m = transformslices_419612(b);
							{
								if (!result == 0) goto LA19;
								result = newnodei_215248(((NU8) 115), (*n).info);
								add_214114(result, n);
							}
							LA19: ;
							LOC21 = 0;
							LOC21 = HEX5BHEX5D_214238(b, ((NI) 1));
							LOC22 = 0;
							LOC22 = HEX5BHEX5D_214238(LOC21, ((NI) 0));
							t = (*(*LOC22).typ).sons->data[((NI) 0)];
							{
								NU8 LOC25;
								Tnode213790* LOC28;
								Tnode213790* LOC29;
								NI LOC30;
								LOC25 = 0;
								LOC25 = spawnresult_376947(t, NIM_TRUE);
								if (!(LOC25 == ((NU8) 2))) goto LA26;
								LOC28 = 0;
								LOC28 = HEX5BHEX5D_214238(it_419722, ((NI) 0));
								LOC29 = 0;
								LOC29 = wrapprocforspawn_377500(owner, m, (*b).typ, barrier, LOC28);
								add_214114(result, LOC29);
								LOC30 = 0;
								LOC30 = len_214059(it_419722);
								asgnRefNoCycle((void**) (&(*it_419722).kindU.S6.sons->data[(NI)(LOC30 - ((NI) 1))]), emptynode_214801);
							}
							goto LA23;
							LA26: ;
							{
								NI LOC32;
								LOC32 = 0;
								LOC32 = len_214059(it_419722);
								asgnRefNoCycle((void**) (&(*it_419722).kindU.S6.sons->data[(NI)(LOC32 - ((NI) 1))]), wrapprocforspawn_377500(owner, m, (*b).typ, barrier, NIM_NIL));
							}
							LA23: ;
						}
						LA10: ;
						res_419809 += ((NI) 1);
					} LA6: ;
				}
			}
		}
		{
			if (!result == 0) goto LA35;
			result = n;
		}
		LA35: ;
	}
	break;
	case ((NU8) 73):
	case ((NU8) 74):
	{
		Tnode213790* b;
		b = HEX5BHEX5D_214238(n, ((NI) 1));
		{
			NIM_BOOL LOC40;
			NU8 LOC41;
			Ttype213828* t;
			Tnode213790* LOC43;
			Tnode213790* LOC44;
			NU8 LOC45;
			Tnode213790* m;
			Tnode213790* LOC48;
			LOC40 = 0;
			LOC41 = 0;
			LOC41 = getmagic_238323(b);
			LOC40 = (LOC41 == ((NU8) 201));
			if (!(LOC40)) goto LA42;
			LOC43 = 0;
			LOC43 = HEX5BHEX5D_214238(b, ((NI) 1));
			LOC44 = 0;
			LOC44 = HEX5BHEX5D_214238(LOC43, ((NI) 0));
			t = (*(*LOC44).typ).sons->data[((NI) 0)];
			LOC45 = 0;
			LOC45 = spawnresult_376947(t, NIM_TRUE);
			LOC40 = (LOC45 == ((NU8) 2));
			LA42: ;
			if (!LOC40) goto LA46;
			m = transformslices_419612(b);
			LOC48 = 0;
			LOC48 = HEX5BHEX5D_214238(n, ((NI) 0));
			result = wrapprocforspawn_377500(owner, m, (*b).typ, barrier, LOC48);
			goto BeforeRet;
		}
		LA46: ;
		result = transformspawnsons_419681(owner, n, barrier);
	}
	break;
	case ((NU8) 27):
	case ((NU8) 29):
	case ((NU8) 30):
	case ((NU8) 31):
	case ((NU8) 26):
	case ((NU8) 28):
	case ((NU8) 32):
	{
		{
			NU8 LOC52;
			LOC52 = 0;
			LOC52 = getmagic_238323(n);
			if (!(LOC52 == ((NU8) 201))) goto LA53;
			result = transformslices_419612(n);
			result = wrapprocforspawn_377500(owner, result, (*n).typ, barrier, NIM_NIL);
			goto BeforeRet;
		}
		LA53: ;
		result = transformspawnsons_419681(owner, n, barrier);
	}
	break;
	default:
	{
		{
			NI LOC58;
			LOC58 = 0;
			LOC58 = safelen_214081(n);
			if (!(((NI) 0) < LOC58)) goto LA59;
			result = transformspawnsons_419681(owner, n, barrier);
		}
		goto LA56;
		LA59: ;
		{
			result = n;
		}
		LA56: ;
	}
	break;
	}
	}BeforeRet: ;
	return result;
}

N_NIMCALL(Tnode213790*, liftparallel_419821)(Tsym213822* owner, Tnode213790* n) {
	Tnode213790* result;
	Analysisctx418008 a;
	Tnode213790* body;
	Tnode213790* varsection;
	Tsym213822* temp;
	Tident188012* LOC5;
	Tsym213822* LOC6;
	Tnode213790* tempnode;
	Tnode213790* barrier;
	Tnode213790* LOC7;
	Tnode213790* LOC8;
	Tnode213790* LOC9;
	result = 0;
	memset((void*)(&a), 0, sizeof(a));
	chckNil((void*)(&a));
	memset((void*)(&a), 0, sizeof(a));
	initanalysisctx_418035((&a));
	body = lastson_216364(n);
	analyse_419072((&a), body);
	{
		if (!(a.spawns == ((NI) 0))) goto LA3;
		localerror_186085((*n).info, ((NimStringDesc*) &TMP4287));
	}
	LA3: ;
	checkslicesaredisjoint_418791((&a));
	checkargs_419812((&a), body);
	varsection = newnodei_215248(((NU8) 99), (*n).info);
	LOC5 = 0;
	LOC5 = getident_188441(((NimStringDesc*) &TMP4291));
	temp = newsym_214684(((NU8) 5), LOC5, owner, (*n).info);
	LOC6 = 0;
	LOC6 = getcompilerproc_257746(((NimStringDesc*) &TMP4292));
	asgnRefNoCycle((void**) (&(*temp).typ), (*LOC6).typ);
	(*temp).flags |= ((NU32)1)<<((((NU8) 2))%(sizeof(NU32)*8));
	tempnode = newsymnode_215234(temp);
	addvar_375017(varsection, tempnode);
	barrier = genaddrof_376840(tempnode);
	result = newnodei_215248(((NU8) 115), (*n).info);
	generatealiaschecks_419817((&a), result);
	add_214114(result, varsection);
	LOC7 = 0;
	LOC7 = callcodegenproc_376850(((NimStringDesc*) &TMP4293), barrier, NIM_NIL, NIM_NIL, NIM_NIL);
	add_214114(result, LOC7);
	LOC8 = 0;
	LOC8 = transformspawn_419676(owner, body, barrier);
	add_214114(result, LOC8);
	LOC9 = 0;
	LOC9 = callcodegenproc_376850(((NimStringDesc*) &TMP4295), barrier, NIM_NIL, NIM_NIL, NIM_NIL);
	add_214114(result, LOC9);
	return result;
}
NIM_EXTERNC N_NOINLINE(void, compiler_semparallelInit000)(void) {
	asgnRefNoCycle((void**) (&opslice_418034), createmagic_218600(((NimStringDesc*) &TMP1035), ((NU8) 138)));
}

NIM_EXTERNC N_NOINLINE(void, compiler_semparallelDatInit000)(void) {
static TNimNode* TMP4264[7];
static TNimNode* TMP4265[2];
NI TMP4267;
static char* NIM_CONST TMP4266[2] = {
"ascending", 
"descending"};
static TNimNode* TMP4269[5];
static TNimNode TMP1033[17];
NTI418006.size = sizeof(Monotonicvar418006);
NTI418006.kind = 18;
NTI418006.base = 0;
NTI418006.flags = 2;
TMP4264[0] = &TMP1033[1];
TMP1033[1].kind = 1;
TMP1033[1].offset = offsetof(Monotonicvar418006, v);
TMP1033[1].typ = (&NTI213788);
TMP1033[1].name = "v";
TMP4264[1] = &TMP1033[2];
TMP1033[2].kind = 1;
TMP1033[2].offset = offsetof(Monotonicvar418006, alias);
TMP1033[2].typ = (&NTI213788);
TMP1033[2].name = "alias";
TMP4264[2] = &TMP1033[3];
TMP1033[3].kind = 1;
TMP1033[3].offset = offsetof(Monotonicvar418006, lower);
TMP1033[3].typ = (&NTI213782);
TMP1033[3].name = "lower";
TMP4264[3] = &TMP1033[4];
TMP1033[4].kind = 1;
TMP1033[4].offset = offsetof(Monotonicvar418006, upper);
TMP1033[4].typ = (&NTI213782);
TMP1033[4].name = "upper";
TMP4264[4] = &TMP1033[5];
TMP1033[5].kind = 1;
TMP1033[5].offset = offsetof(Monotonicvar418006, stride);
TMP1033[5].typ = (&NTI213782);
TMP1033[5].name = "stride";
TMP4264[5] = &TMP1033[6];
NTI418004.size = sizeof(NU8);
NTI418004.kind = 14;
NTI418004.base = 0;
NTI418004.flags = 3;
for (TMP4267 = 0; TMP4267 < 2; TMP4267++) {
TMP1033[TMP4267+7].kind = 1;
TMP1033[TMP4267+7].offset = TMP4267;
TMP1033[TMP4267+7].name = TMP4266[TMP4267];
TMP4265[TMP4267] = &TMP1033[TMP4267+7];
}
TMP1033[9].len = 2; TMP1033[9].kind = 2; TMP1033[9].sons = &TMP4265[0];
NTI418004.node = &TMP1033[9];
TMP1033[6].kind = 1;
TMP1033[6].offset = offsetof(Monotonicvar418006, dir);
TMP1033[6].typ = (&NTI418004);
TMP1033[6].name = "dir";
TMP4264[6] = &TMP1033[10];
TMP1033[10].kind = 1;
TMP1033[10].offset = offsetof(Monotonicvar418006, blacklisted);
TMP1033[10].typ = (&NTI130);
TMP1033[10].name = "blacklisted";
TMP1033[0].len = 7; TMP1033[0].kind = 2; TMP1033[0].sons = &TMP4264[0];
NTI418006.node = &TMP1033[0];
NTI418018.size = sizeof(TY418018*);
NTI418018.kind = 24;
NTI418018.base = (&NTI418006);
NTI418018.flags = 2;
NTI418018.marker = TMP4268;
NTI418021.size = sizeof(TY418021);
NTI418021.kind = 18;
NTI418021.base = 0;
NTI418021.flags = 2;
TMP4269[0] = &TMP1033[12];
TMP1033[12].kind = 1;
TMP1033[12].offset = offsetof(TY418021, Field0);
TMP1033[12].typ = (&NTI213782);
TMP1033[12].name = "Field0";
TMP4269[1] = &TMP1033[13];
TMP1033[13].kind = 1;
TMP1033[13].offset = offsetof(TY418021, Field1);
TMP1033[13].typ = (&NTI213782);
TMP1033[13].name = "Field1";
TMP4269[2] = &TMP1033[14];
TMP1033[14].kind = 1;
TMP1033[14].offset = offsetof(TY418021, Field2);
TMP1033[14].typ = (&NTI213782);
TMP1033[14].name = "Field2";
TMP4269[3] = &TMP1033[15];
TMP1033[15].kind = 1;
TMP1033[15].offset = offsetof(TY418021, Field3);
TMP1033[15].typ = (&NTI104);
TMP1033[15].name = "Field3";
TMP4269[4] = &TMP1033[16];
TMP1033[16].kind = 1;
TMP1033[16].offset = offsetof(TY418021, Field4);
TMP1033[16].typ = (&NTI130);
TMP1033[16].name = "Field4";
TMP1033[11].len = 5; TMP1033[11].kind = 2; TMP1033[11].sons = &TMP4269[0];
NTI418021.node = &TMP1033[11];
NTI418020.size = sizeof(TY418020*);
NTI418020.kind = 24;
NTI418020.base = (&NTI418021);
NTI418020.flags = 2;
NTI418020.marker = TMP4270;
}

