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

#include "nimbase.h"
#undef linux
typedef struct IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw;
typedef struct Tident_4umxGerWTHGPwUms7Yqu3g Tident_4umxGerWTHGPwUms7Yqu3g;
typedef struct TNimType TNimType;
typedef struct TNimNode TNimNode;
typedef struct Tidobj_raN9cHVgzmvaXisezY9aGg9cg Tidobj_raN9cHVgzmvaXisezY9aGg9cg;
typedef struct TNimObject TNimObject;
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct Cell_1zcF9cV8XIAtbN8h5HRUB8g Cell_1zcF9cV8XIAtbN8h5HRUB8g;
typedef struct Cellseq_Axo1XVm9aaQueTOldv8le5w Cellseq_Axo1XVm9aaQueTOldv8le5w;
typedef struct Gcheap_1TRH1TZMaVZTnLNcIHuNFQ Gcheap_1TRH1TZMaVZTnLNcIHuNFQ;
typedef struct Gcstack_7fytPA5bBsob6See21YMRA Gcstack_7fytPA5bBsob6See21YMRA;
typedef struct Memregion_x81NhDv59b8ercDZ9bi85jyg Memregion_x81NhDv59b8ercDZ9bi85jyg;
typedef struct Smallchunk_tXn60W2f8h3jgAYdEmy5NQ Smallchunk_tXn60W2f8h3jgAYdEmy5NQ;
typedef struct Llchunk_XsENErzHIZV9bhvyJx56wGw Llchunk_XsENErzHIZV9bhvyJx56wGw;
typedef struct Bigchunk_Rv9c70Uhp2TytkX7eH78qEg Bigchunk_Rv9c70Uhp2TytkX7eH78qEg;
typedef struct Intset_EZObFrE3NC9bIb3YMkY9crZA Intset_EZObFrE3NC9bIb3YMkY9crZA;
typedef struct Trunk_W0r8S0Y3UGke6T9bIUWnnuw Trunk_W0r8S0Y3UGke6T9bIUWnnuw;
typedef struct Avlnode_IaqjtwKhxLEpvDS9bct9blEw Avlnode_IaqjtwKhxLEpvDS9bct9blEw;
typedef struct Gcstat_0RwLoVBHZPfUAcLczmfQAg Gcstat_0RwLoVBHZPfUAcLczmfQAg;
typedef struct Cellset_jG87P0AI9aZtss9ccTYBIISQ Cellset_jG87P0AI9aZtss9ccTYBIISQ;
typedef struct Pagedesc_fublkgIY4LG3mT51LU2WHg Pagedesc_fublkgIY4LG3mT51LU2WHg;
typedef struct Basechunk_Sdq7WpT6qAH858F5ZEdG3w Basechunk_Sdq7WpT6qAH858F5ZEdG3w;
typedef struct Freecell_u6M5LHprqzkn9axr04yg9bGQ Freecell_u6M5LHprqzkn9axr04yg9bGQ;
typedef Tident_4umxGerWTHGPwUms7Yqu3g* TY_CBfZt49asUfAsBVM7a3Rc9cw[8192];
struct  IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw  {
TY_CBfZt49asUfAsBVM7a3Rc9cw buckets;
NI wordcounter;
Tident_4umxGerWTHGPwUms7Yqu3g* idanon;
Tident_4umxGerWTHGPwUms7Yqu3g* iddelegator;
Tident_4umxGerWTHGPwUms7Yqu3g* emptyident;
};
typedef NU8 Tnimkind_jIBKr1ejBgsfM33Kxw4j7A;
typedef NU8 Tnimtypeflag_v8QUszD1sWlSIWZz7mC4bQ_Set;
typedef N_NIMCALL_PTR(void, TY_ojoeKfW4VYIm36I9cpDTQIg) (void* p0, NI op0);
typedef N_NIMCALL_PTR(void*, TY_WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p0);
struct  TNimType  {
NI size;
Tnimkind_jIBKr1ejBgsfM33Kxw4j7A kind;
Tnimtypeflag_v8QUszD1sWlSIWZz7mC4bQ_Set flags;
TNimType* base;
TNimNode* node;
void* finalizer;
TY_ojoeKfW4VYIm36I9cpDTQIg marker;
TY_WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
};
typedef NU8 Tnimnodekind_unfNsxrcATrufDZmpBq4HQ;
struct  TNimNode  {
Tnimnodekind_unfNsxrcATrufDZmpBq4HQ kind;
NI offset;
TNimType* typ;
NCSTRING name;
NI len;
TNimNode** sons;
};
struct  TNimObject  {
TNimType* m_type;
};
struct  Tidobj_raN9cHVgzmvaXisezY9aGg9cg  {
  TNimObject Sup;
NI id;
};
struct  TGenericSeq  {
NI len;
NI reserved;
};
struct  NimStringDesc  {
  TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
struct  Tident_4umxGerWTHGPwUms7Yqu3g  {
  Tidobj_raN9cHVgzmvaXisezY9aGg9cg Sup;
NimStringDesc* s;
Tident_4umxGerWTHGPwUms7Yqu3g* next;
NI h;
};
typedef N_NIMCALL_PTR(void, TY_T4eqaYlFJYZUv9aG9b1TV0bQ) (void);
struct  Cell_1zcF9cV8XIAtbN8h5HRUB8g  {
NI refcount;
TNimType* typ;
};
struct  Cellseq_Axo1XVm9aaQueTOldv8le5w  {
NI len;
NI cap;
Cell_1zcF9cV8XIAtbN8h5HRUB8g** d;
};
typedef Smallchunk_tXn60W2f8h3jgAYdEmy5NQ* TY_SiRwrEKZdLgxqz9a9aoVBglg[512];
typedef Trunk_W0r8S0Y3UGke6T9bIUWnnuw* TY_lh2A89ahMmYg9bCmpVaplLbA[256];
struct  Intset_EZObFrE3NC9bIb3YMkY9crZA  {
TY_lh2A89ahMmYg9bCmpVaplLbA data;
};
struct  Memregion_x81NhDv59b8ercDZ9bi85jyg  {
NI minlargeobj;
NI maxlargeobj;
TY_SiRwrEKZdLgxqz9a9aoVBglg freesmallchunks;
Llchunk_XsENErzHIZV9bhvyJx56wGw* llmem;
NI currmem;
NI maxmem;
NI freemem;
NI lastsize;
Bigchunk_Rv9c70Uhp2TytkX7eH78qEg* freechunkslist;
Intset_EZObFrE3NC9bIb3YMkY9crZA chunkstarts;
Avlnode_IaqjtwKhxLEpvDS9bct9blEw* root;
Avlnode_IaqjtwKhxLEpvDS9bct9blEw* deleted;
Avlnode_IaqjtwKhxLEpvDS9bct9blEw* last;
Avlnode_IaqjtwKhxLEpvDS9bct9blEw* freeavlnodes;
NIM_BOOL locked;
NIM_BOOL blockchunksizeincrease;
NI nextchunksize;
};
struct  Gcstat_0RwLoVBHZPfUAcLczmfQAg  {
NI stackscans;
NI cyclecollections;
NI maxthreshold;
NI maxstacksize;
NI maxstackcells;
NI cycletablesize;
NI64 maxpause;
};
struct  Cellset_jG87P0AI9aZtss9ccTYBIISQ  {
NI counter;
NI max;
Pagedesc_fublkgIY4LG3mT51LU2WHg* head;
Pagedesc_fublkgIY4LG3mT51LU2WHg** data;
};
struct  Gcheap_1TRH1TZMaVZTnLNcIHuNFQ  {
Gcstack_7fytPA5bBsob6See21YMRA* stack;
void* stackbottom;
NI cyclethreshold;
Cellseq_Axo1XVm9aaQueTOldv8le5w zct;
Cellseq_Axo1XVm9aaQueTOldv8le5w decstack;
Cellseq_Axo1XVm9aaQueTOldv8le5w tempstack;
NI recgclock;
Memregion_x81NhDv59b8ercDZ9bi85jyg region;
Gcstat_0RwLoVBHZPfUAcLczmfQAg stat;
Cellset_jG87P0AI9aZtss9ccTYBIISQ marked;
Cellseq_Axo1XVm9aaQueTOldv8le5w additionalroots;
};
typedef NU16 Tspecialword_Rthr3K8pFyGXVzi3GvdIZA;
typedef NimStringDesc* TY_P8Cd4JyxAQgoTKxTI9bscQw[265];
typedef NU16 Tspecialword_ycbpMCRV6Cd2eBh3X9biEiw;
struct  Gcstack_7fytPA5bBsob6See21YMRA  {
Gcstack_7fytPA5bBsob6See21YMRA* prev;
Gcstack_7fytPA5bBsob6See21YMRA* next;
void* starts;
void* pos;
NI maxstacksize;
};
struct  Basechunk_Sdq7WpT6qAH858F5ZEdG3w  {
NI prevsize;
NI size;
NIM_BOOL used;
};
struct  Smallchunk_tXn60W2f8h3jgAYdEmy5NQ  {
  Basechunk_Sdq7WpT6qAH858F5ZEdG3w Sup;
Smallchunk_tXn60W2f8h3jgAYdEmy5NQ* next;
Smallchunk_tXn60W2f8h3jgAYdEmy5NQ* prev;
Freecell_u6M5LHprqzkn9axr04yg9bGQ* freelist;
NI free;
NI acc;
NF data;
};
struct  Llchunk_XsENErzHIZV9bhvyJx56wGw  {
NI size;
NI acc;
Llchunk_XsENErzHIZV9bhvyJx56wGw* next;
};
struct  Bigchunk_Rv9c70Uhp2TytkX7eH78qEg  {
  Basechunk_Sdq7WpT6qAH858F5ZEdG3w Sup;
Bigchunk_Rv9c70Uhp2TytkX7eH78qEg* next;
Bigchunk_Rv9c70Uhp2TytkX7eH78qEg* prev;
NI align;
NF data;
};
typedef NI TY_9agrCtWKhCnWWMJpKKugJag[16];
struct  Trunk_W0r8S0Y3UGke6T9bIUWnnuw  {
Trunk_W0r8S0Y3UGke6T9bIUWnnuw* next;
NI key;
TY_9agrCtWKhCnWWMJpKKugJag bits;
};
typedef Avlnode_IaqjtwKhxLEpvDS9bct9blEw* TY_0aOLqZchNi8nWtMTi8ND8w[2];
struct  Avlnode_IaqjtwKhxLEpvDS9bct9blEw  {
TY_0aOLqZchNi8nWtMTi8ND8w link;
NI key;
NI upperbound;
NI level;
};
struct  Pagedesc_fublkgIY4LG3mT51LU2WHg  {
Pagedesc_fublkgIY4LG3mT51LU2WHg* next;
NI key;
TY_9agrCtWKhCnWWMJpKKugJag bits;
};
struct  Freecell_u6M5LHprqzkn9axr04yg9bGQ  {
Freecell_u6M5LHprqzkn9axr04yg9bGQ* next;
NI zerofield;
};
N_NIMCALL(void, nimGCvisit)(void* d0, NI op0);
static N_NIMCALL(void, Marker_TY_1nh2T19a2BrGbBBQRS39bxRw)(void* p, NI op);
static N_NIMCALL(void, Marker_TY_lnkYNZP9asc88UfiEGjLrbA)(void* p, NI op);
static N_NIMCALL(void, T_L3r6bVdeFMiI9cwmLpWIeKw_4)(void);
N_NIMCALL(void, nimRegisterGlobalMarker)(TY_T4eqaYlFJYZUv9aG9b1TV0bQ markerproc0);
static N_NIMCALL(void, Marker_TY_GFuL0q6Yj4iJze0S9cdD9avg)(void* p, NI op);
N_NIMCALL(IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw*, newidentcache_9basvGvZH4FwEO4MVbYyP9aA)(void);
N_NIMCALL(void*, newObj)(TNimType* typ0, NI size0);
N_NIMCALL(Tident_4umxGerWTHGPwUms7Yqu3g*, getident_Y4Yr5rKoaxkzPcN8rPP9bWA)(IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw* self0, NimStringDesc* identifier0);
N_NIMCALL(Tident_4umxGerWTHGPwUms7Yqu3g*, getident_62GxCdwHvMBvMwCLnw1wyg)(IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw* self0, NCSTRING identifier0, NI length0, NI h0);
N_NIMCALL(NI, cmpexact_119akYztO9b7SG3fyF8j9bFgQ)(NCSTRING a0, NCSTRING b0, NI blen0);
static N_INLINE(void, asgnRefNoCycle)(void** dest0, void* src0);
static N_INLINE(Cell_1zcF9cV8XIAtbN8h5HRUB8g*, usrtocell_yB9aH5WIlwd0xkYrcdPeXrQsystem)(void* usr0);
static N_INLINE(void, rtladdzct_MV4BBk6J1qu70IbBxwEn4w_2system)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* c0);
N_NOINLINE(void, addzct_fCDI7oO1NNVXXURtxSzsRw)(Cellseq_Axo1XVm9aaQueTOldv8le5w* s0, Cell_1zcF9cV8XIAtbN8h5HRUB8g* c0);
N_NIMCALL(NI, cmpignorestyle_119akYztO9b7SG3fyF8j9bFgQ_2)(NCSTRING a0, NCSTRING b0, NI blen0);
static N_INLINE(NIM_BOOL, ismagicidentseparatorrune_jEsY0iAEfTnaxdnZAwGvIwidents)(NCSTRING cs0, NI i0);
N_NIMCALL(NimStringDesc*, mnewString)(NI len0);
N_NIMCALL(NimStringDesc*, mnewString)(NI len0);
N_NIMCALL(NI, hashignorestyle_uBstFm5SYVQeOL3j9c9bc58A_2)(NimStringDesc* x0);
N_NIMCALL(Tident_4umxGerWTHGPwUms7Yqu3g*, getident_BlDQd0MZ58qhFoyY3ZHQIA)(IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw* self0, NimStringDesc* identifier0, NI h0);
IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw* legacy_AHP7NxhjlnSC9cf2jfY1fFg;
TNimType NTI_TzLHS09bRH9a0TYLs39cqcNaw;
extern TNimType NTI_13RNkKqUOX1TtorOUlKtqA;
TNimType NTI_raN9cHVgzmvaXisezY9aGg9cg;
extern TNimType NTI_rR5Bzr1D5krxoo1NcNyeMA;
TNimType NTI_4umxGerWTHGPwUms7Yqu3g;
extern TNimType NTI_77mFvmsOLKik79ci2hXkHEg;
TNimType NTI_1nh2T19a2BrGbBBQRS39bxRw;
TNimType NTI_CBfZt49asUfAsBVM7a3Rc9cw;
TNimType NTI_lnkYNZP9asc88UfiEGjLrbA;
TNimType NTI_GFuL0q6Yj4iJze0S9cdD9avg;
extern Gcheap_1TRH1TZMaVZTnLNcIHuNFQ gch_IcYaEuuWivYAS86vFMTS3Q;
STRING_LITERAL(T_L3r6bVdeFMiI9cwmLpWIeKw_5, ":anonymous", 10);
STRING_LITERAL(T_L3r6bVdeFMiI9cwmLpWIeKw_6, ":delegator", 10);
STRING_LITERAL(T_L3r6bVdeFMiI9cwmLpWIeKw_7, "", 0);
extern NIM_CONST TY_P8Cd4JyxAQgoTKxTI9bscQw specialwords_jS3I1dUcvbZAEuApBSUHng;
static N_NIMCALL(void, Marker_TY_1nh2T19a2BrGbBBQRS39bxRw)(void* p, NI op) {
	Tident_4umxGerWTHGPwUms7Yqu3g* a;
	a = (Tident_4umxGerWTHGPwUms7Yqu3g*)p;
	nimGCvisit((void*)(*a).s, op);
	nimGCvisit((void*)(*a).next, op);
}
static N_NIMCALL(void, Marker_TY_lnkYNZP9asc88UfiEGjLrbA)(void* p, NI op) {
	IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw* a;
	NI LOC1;
	a = (IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw*)p;
	LOC1 = (NI)0;
	for (LOC1 = 0; LOC1 < 8192; LOC1++) {
	nimGCvisit((void*)(*a).buckets[LOC1], op);
	}
	nimGCvisit((void*)(*a).idanon, op);
	nimGCvisit((void*)(*a).iddelegator, op);
	nimGCvisit((void*)(*a).emptyident, op);
}
static N_NIMCALL(void, T_L3r6bVdeFMiI9cwmLpWIeKw_4)(void) {
	nimGCvisit((void*)legacy_AHP7NxhjlnSC9cf2jfY1fFg, 0);
}
static N_NIMCALL(void, Marker_TY_GFuL0q6Yj4iJze0S9cdD9avg)(void* p, NI op) {
	Tidobj_raN9cHVgzmvaXisezY9aGg9cg* a;
	a = (Tidobj_raN9cHVgzmvaXisezY9aGg9cg*)p;
}

N_NIMCALL(NI, cmpexact_119akYztO9b7SG3fyF8j9bFgQ)(NCSTRING a0, NCSTRING b0, NI blen0) {
	NI result0;
	NI i0;
	NI j0;
	result0 = (NI)0;
	i0 = ((NI) 0);
	j0 = ((NI) 0);
	result0 = ((NI) 1);
	{
		while (1) {
			NIM_CHAR aa0;
			NIM_CHAR bb0;
			if (!(j0 < blen0)) goto LA2;
			aa0 = a0[i0];
			bb0 = b0[j0];
			result0 = (NI)(((NI) (((NU8)(aa0)))) - ((NI) (((NU8)(bb0)))));
			{
				NIM_BOOL LOC5;
				LOC5 = (NIM_BOOL)0;
				LOC5 = !((result0 == ((NI) 0)));
				if (LOC5) goto LA6;
				LOC5 = ((NU8)(aa0) == (NU8)(0));
				LA6: ;
				if (!LOC5) goto LA7;
				goto LA1;
			}
			LA7: ;
			i0 += ((NI) 1);
			j0 += ((NI) 1);
		} LA2: ;
	} LA1: ;
	{
		if (!(result0 == ((NI) 0))) goto LA11;
		{
			if (!!(((NU8)(a0[i0]) == (NU8)(0)))) goto LA15;
			result0 = ((NI) 1);
		}
		LA15: ;
	}
	LA11: ;
	return result0;
}

static N_INLINE(Cell_1zcF9cV8XIAtbN8h5HRUB8g*, usrtocell_yB9aH5WIlwd0xkYrcdPeXrQsystem)(void* usr0) {
	Cell_1zcF9cV8XIAtbN8h5HRUB8g* result0;
	result0 = (Cell_1zcF9cV8XIAtbN8h5HRUB8g*)0;
	result0 = ((Cell_1zcF9cV8XIAtbN8h5HRUB8g*) ((NI)((NU32)(((NI) (usr0))) - (NU32)(((NI)sizeof(Cell_1zcF9cV8XIAtbN8h5HRUB8g))))));
	return result0;
}

static N_INLINE(void, rtladdzct_MV4BBk6J1qu70IbBxwEn4w_2system)(Cell_1zcF9cV8XIAtbN8h5HRUB8g* c0) {
	addzct_fCDI7oO1NNVXXURtxSzsRw((&gch_IcYaEuuWivYAS86vFMTS3Q.zct), c0);
}

static N_INLINE(void, asgnRefNoCycle)(void** dest0, void* src0) {
	{
		Cell_1zcF9cV8XIAtbN8h5HRUB8g* c0;
		if (!!((src0 == NIM_NIL))) goto LA3;
		c0 = usrtocell_yB9aH5WIlwd0xkYrcdPeXrQsystem(src0);
		(*c0).refcount += ((NI) 8);
	}
	LA3: ;
	{
		Cell_1zcF9cV8XIAtbN8h5HRUB8g* c0;
		if (!!(((*dest0) == NIM_NIL))) goto LA7;
		c0 = usrtocell_yB9aH5WIlwd0xkYrcdPeXrQsystem((*dest0));
		{
			(*c0).refcount -= ((NI) 8);
			if (!((NU32)((*c0).refcount) < (NU32)(((NI) 8)))) goto LA11;
			rtladdzct_MV4BBk6J1qu70IbBxwEn4w_2system(c0);
		}
		LA11: ;
	}
	LA7: ;
	(*dest0) = src0;
}

static N_INLINE(NIM_BOOL, ismagicidentseparatorrune_jEsY0iAEfTnaxdnZAwGvIwidents)(NCSTRING cs0, NI i0) {
	NIM_BOOL result0;
	NIM_BOOL LOC1;
	NIM_BOOL LOC2;
	result0 = (NIM_BOOL)0;
	LOC1 = (NIM_BOOL)0;
	LOC2 = (NIM_BOOL)0;
	LOC2 = ((NU8)(cs0[i0]) == (NU8)(226));
	if (!(LOC2)) goto LA3;
	LOC2 = ((NU8)(cs0[(NI)(i0 + ((NI) 1))]) == (NU8)(128));
	LA3: ;
	LOC1 = LOC2;
	if (!(LOC1)) goto LA4;
	LOC1 = ((NU8)(cs0[(NI)(i0 + ((NI) 2))]) == (NU8)(147));
	LA4: ;
	result0 = LOC1;
	return result0;
}

N_NIMCALL(NI, cmpignorestyle_119akYztO9b7SG3fyF8j9bFgQ_2)(NCSTRING a0, NCSTRING b0, NI blen0) {
	NI result0;
	NI i0;
	NI j0;
{	result0 = (NI)0;
	{
		if (!!(((NU8)(a0[((NI) 0)]) == (NU8)(b0[((NI) 0)])))) goto LA3;
		result0 = ((NI) 1);
		goto BeforeRet;
	}
	LA3: ;
	i0 = ((NI) 0);
	j0 = ((NI) 0);
	result0 = ((NI) 1);
	{
		while (1) {
			NIM_CHAR aa0;
			NIM_CHAR bb0;
			if (!(j0 < blen0)) goto LA6;
			{
				while (1) {
					if (!((NU8)(a0[i0]) == (NU8)(95))) goto LA8;
					i0 += ((NI) 1);
				} LA8: ;
			}
			{
				while (1) {
					if (!((NU8)(b0[j0]) == (NU8)(95))) goto LA10;
					j0 += ((NI) 1);
				} LA10: ;
			}
			{
				while (1) {
					NIM_BOOL LOC13;
					LOC13 = (NIM_BOOL)0;
					LOC13 = ismagicidentseparatorrune_jEsY0iAEfTnaxdnZAwGvIwidents(a0, i0);
					if (!LOC13) goto LA12;
					i0 += ((NI) 3);
				} LA12: ;
			}
			{
				while (1) {
					NIM_BOOL LOC16;
					LOC16 = (NIM_BOOL)0;
					LOC16 = ismagicidentseparatorrune_jEsY0iAEfTnaxdnZAwGvIwidents(b0, j0);
					if (!LOC16) goto LA15;
					j0 += ((NI) 3);
				} LA15: ;
			}
			aa0 = a0[i0];
			bb0 = b0[j0];
			{
				NIM_BOOL LOC19;
				LOC19 = (NIM_BOOL)0;
				LOC19 = ((NU8)(65) <= (NU8)(aa0));
				if (!(LOC19)) goto LA20;
				LOC19 = ((NU8)(aa0) <= (NU8)(90));
				LA20: ;
				if (!LOC19) goto LA21;
				aa0 = ((NIM_CHAR) (((NI) ((NI)(((NI) (((NU8)(aa0)))) + ((NI) 32))))));
			}
			LA21: ;
			{
				NIM_BOOL LOC25;
				LOC25 = (NIM_BOOL)0;
				LOC25 = ((NU8)(65) <= (NU8)(bb0));
				if (!(LOC25)) goto LA26;
				LOC25 = ((NU8)(bb0) <= (NU8)(90));
				LA26: ;
				if (!LOC25) goto LA27;
				bb0 = ((NIM_CHAR) (((NI) ((NI)(((NI) (((NU8)(bb0)))) + ((NI) 32))))));
			}
			LA27: ;
			result0 = (NI)(((NI) (((NU8)(aa0)))) - ((NI) (((NU8)(bb0)))));
			{
				NIM_BOOL LOC31;
				LOC31 = (NIM_BOOL)0;
				LOC31 = !((result0 == ((NI) 0)));
				if (LOC31) goto LA32;
				LOC31 = ((NU8)(aa0) == (NU8)(0));
				LA32: ;
				if (!LOC31) goto LA33;
				goto LA5;
			}
			LA33: ;
			i0 += ((NI) 1);
			j0 += ((NI) 1);
		} LA6: ;
	} LA5: ;
	{
		if (!(result0 == ((NI) 0))) goto LA37;
		{
			if (!!(((NU8)(a0[i0]) == (NU8)(0)))) goto LA41;
			result0 = ((NI) 1);
		}
		LA41: ;
	}
	LA37: ;
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(Tident_4umxGerWTHGPwUms7Yqu3g*, getident_62GxCdwHvMBvMwCLnw1wyg)(IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw* self0, NCSTRING identifier0, NI length0, NI h0) {
	Tident_4umxGerWTHGPwUms7Yqu3g* result0;
	NI idx0;
	Tident_4umxGerWTHGPwUms7Yqu3g* last0;
	NI id0;
{	result0 = (Tident_4umxGerWTHGPwUms7Yqu3g*)0;
	idx0 = (NI)(h0 & ((NI) 8191));
	result0 = (*self0).buckets[(idx0)- 0];
	last0 = NIM_NIL;
	id0 = ((NI) 0);
	{
		while (1) {
			if (!!((result0 == NIM_NIL))) goto LA2;
			{
				NI LOC5;
				LOC5 = (NI)0;
				LOC5 = cmpexact_119akYztO9b7SG3fyF8j9bFgQ((*result0).s->data, identifier0, length0);
				if (!(LOC5 == ((NI) 0))) goto LA6;
				{
					if (!!((last0 == NIM_NIL))) goto LA10;
					asgnRefNoCycle((void**) (&(*last0).next), (*result0).next);
					asgnRefNoCycle((void**) (&(*result0).next), (*self0).buckets[(idx0)- 0]);
					asgnRefNoCycle((void**) (&(*self0).buckets[(idx0)- 0]), result0);
				}
				LA10: ;
				goto BeforeRet;
			}
			goto LA3;
			LA6: ;
			{
				NI LOC13;
				LOC13 = (NI)0;
				LOC13 = cmpignorestyle_119akYztO9b7SG3fyF8j9bFgQ_2((*result0).s->data, identifier0, length0);
				if (!(LOC13 == ((NI) 0))) goto LA14;
				id0 = (*result0).Sup.id;
			}
			goto LA3;
			LA14: ;
			LA3: ;
			last0 = result0;
			result0 = (*result0).next;
		} LA2: ;
	}
	result0 = (Tident_4umxGerWTHGPwUms7Yqu3g*) newObj((&NTI_1nh2T19a2BrGbBBQRS39bxRw), sizeof(Tident_4umxGerWTHGPwUms7Yqu3g));
	(*result0).Sup.Sup.m_type = (&NTI_4umxGerWTHGPwUms7Yqu3g);
	(*result0).h = h0;
	asgnRefNoCycle((void**) (&(*result0).s), mnewString(((NI) (length0))));
	{
		NI i_yLK0qWeSfXTJHMxV3Pw2kw;
		NI HEX3Atmp_6vu0tHH2HyLyTrLOiTwGMg;
		NI res_qrJ1psGNQBBXzQMviMk7NA;
		i_yLK0qWeSfXTJHMxV3Pw2kw = (NI)0;
		HEX3Atmp_6vu0tHH2HyLyTrLOiTwGMg = (NI)0;
		HEX3Atmp_6vu0tHH2HyLyTrLOiTwGMg = (NI)(length0 - ((NI) 1));
		res_qrJ1psGNQBBXzQMviMk7NA = ((NI) 0);
		{
			while (1) {
				if (!(res_qrJ1psGNQBBXzQMviMk7NA <= HEX3Atmp_6vu0tHH2HyLyTrLOiTwGMg)) goto LA18;
				i_yLK0qWeSfXTJHMxV3Pw2kw = res_qrJ1psGNQBBXzQMviMk7NA;
				(*result0).s->data[i_yLK0qWeSfXTJHMxV3Pw2kw] = identifier0[i_yLK0qWeSfXTJHMxV3Pw2kw];
				res_qrJ1psGNQBBXzQMviMk7NA += ((NI) 1);
			} LA18: ;
		}
	}
	asgnRefNoCycle((void**) (&(*result0).next), (*self0).buckets[(idx0)- 0]);
	asgnRefNoCycle((void**) (&(*self0).buckets[(idx0)- 0]), result0);
	{
		if (!(id0 == ((NI) 0))) goto LA21;
		(*self0).wordcounter += ((NI) 1);
		(*result0).Sup.id = ((NI32)-((*self0).wordcounter));
	}
	goto LA19;
	LA21: ;
	{
		(*result0).Sup.id = id0;
	}
	LA19: ;
	}BeforeRet: ;
	return result0;
}

N_NIMCALL(Tident_4umxGerWTHGPwUms7Yqu3g*, getident_Y4Yr5rKoaxkzPcN8rPP9bWA)(IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw* self0, NimStringDesc* identifier0) {
	Tident_4umxGerWTHGPwUms7Yqu3g* result0;
	NI LOC1;
	result0 = (Tident_4umxGerWTHGPwUms7Yqu3g*)0;
	LOC1 = (NI)0;
	LOC1 = hashignorestyle_uBstFm5SYVQeOL3j9c9bc58A_2(identifier0);
	result0 = getident_62GxCdwHvMBvMwCLnw1wyg(self0, identifier0->data, (identifier0 ? identifier0->Sup.len : 0), LOC1);
	return result0;
}

N_NIMCALL(Tident_4umxGerWTHGPwUms7Yqu3g*, getident_BlDQd0MZ58qhFoyY3ZHQIA)(IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw* self0, NimStringDesc* identifier0, NI h0) {
	Tident_4umxGerWTHGPwUms7Yqu3g* result0;
	result0 = (Tident_4umxGerWTHGPwUms7Yqu3g*)0;
	result0 = getident_62GxCdwHvMBvMwCLnw1wyg(self0, identifier0->data, (identifier0 ? identifier0->Sup.len : 0), h0);
	return result0;
}

N_NIMCALL(IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw*, newidentcache_9basvGvZH4FwEO4MVbYyP9aA)(void) {
	IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw* result0;
	result0 = (IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw*)0;
	{
		IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw* LOC5;
		if (!(legacy_AHP7NxhjlnSC9cf2jfY1fFg == 0)) goto LA3;
		LOC5 = (IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw*)0;
		LOC5 = (IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw*) newObj((&NTI_lnkYNZP9asc88UfiEGjLrbA), sizeof(IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw));
		result0 = LOC5;
		asgnRefNoCycle((void**) (&(*result0).idanon), getident_Y4Yr5rKoaxkzPcN8rPP9bWA(result0, ((NimStringDesc*) &T_L3r6bVdeFMiI9cwmLpWIeKw_5)));
		(*result0).wordcounter = ((NI) 1);
		asgnRefNoCycle((void**) (&(*result0).iddelegator), getident_Y4Yr5rKoaxkzPcN8rPP9bWA(result0, ((NimStringDesc*) &T_L3r6bVdeFMiI9cwmLpWIeKw_6)));
		asgnRefNoCycle((void**) (&(*result0).emptyident), getident_Y4Yr5rKoaxkzPcN8rPP9bWA(result0, ((NimStringDesc*) &T_L3r6bVdeFMiI9cwmLpWIeKw_7)));
		{
			Tspecialword_Rthr3K8pFyGXVzi3GvdIZA s_SjTZPEyhvCL9cCjHC3Rmoyg;
			NI res_sFqAsVdLrMnuljqVbi9adOg;
			s_SjTZPEyhvCL9cCjHC3Rmoyg = (Tspecialword_Rthr3K8pFyGXVzi3GvdIZA)0;
			res_sFqAsVdLrMnuljqVbi9adOg = ((NI) 1);
			{
				while (1) {
					NI LOC9;
					Tident_4umxGerWTHGPwUms7Yqu3g* LOC10;
					if (!(res_sFqAsVdLrMnuljqVbi9adOg <= ((NI) 264))) goto LA8;
					s_SjTZPEyhvCL9cCjHC3Rmoyg = ((Tspecialword_Rthr3K8pFyGXVzi3GvdIZA) (res_sFqAsVdLrMnuljqVbi9adOg));
					LOC9 = (NI)0;
					LOC9 = hashignorestyle_uBstFm5SYVQeOL3j9c9bc58A_2(specialwords_jS3I1dUcvbZAEuApBSUHng[(s_SjTZPEyhvCL9cCjHC3Rmoyg)- 0]);
					LOC10 = (Tident_4umxGerWTHGPwUms7Yqu3g*)0;
					LOC10 = getident_BlDQd0MZ58qhFoyY3ZHQIA(result0, specialwords_jS3I1dUcvbZAEuApBSUHng[(s_SjTZPEyhvCL9cCjHC3Rmoyg)- 0], LOC9);
					(*LOC10).Sup.id = ((NI) (s_SjTZPEyhvCL9cCjHC3Rmoyg));
					res_sFqAsVdLrMnuljqVbi9adOg += ((NI) 1);
				} LA8: ;
			}
		}
		asgnRefNoCycle((void**) (&legacy_AHP7NxhjlnSC9cf2jfY1fFg), result0);
	}
	goto LA1;
	LA3: ;
	{
		result0 = legacy_AHP7NxhjlnSC9cf2jfY1fFg;
	}
	LA1: ;
	return result0;
}

N_NIMCALL(Tident_4umxGerWTHGPwUms7Yqu3g*, getident_oH8GBf4tG3b1F5BIuNPwtA)(NimStringDesc* identifier0) {
	Tident_4umxGerWTHGPwUms7Yqu3g* result0;
	result0 = (Tident_4umxGerWTHGPwUms7Yqu3g*)0;
	{
		IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw* LOC5;
		if (!(legacy_AHP7NxhjlnSC9cf2jfY1fFg == 0)) goto LA3;
		LOC5 = (IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw*)0;
		LOC5 = newidentcache_9basvGvZH4FwEO4MVbYyP9aA();
	}
	LA3: ;
	result0 = getident_Y4Yr5rKoaxkzPcN8rPP9bWA(legacy_AHP7NxhjlnSC9cf2jfY1fFg, identifier0);
	return result0;
}

N_NIMCALL(Tspecialword_ycbpMCRV6Cd2eBh3X9biEiw, whichkeyword_WhYAAh6vF1PoyH6Hsspu4Q)(Tident_4umxGerWTHGPwUms7Yqu3g* id0) {
	Tspecialword_ycbpMCRV6Cd2eBh3X9biEiw result0;
	result0 = (Tspecialword_ycbpMCRV6Cd2eBh3X9biEiw)0;
	{
		if (!((*id0).Sup.id < ((NI) 0))) goto LA3;
		result0 = ((Tspecialword_ycbpMCRV6Cd2eBh3X9biEiw) 0);
	}
	goto LA1;
	LA3: ;
	{
		result0 = ((Tspecialword_ycbpMCRV6Cd2eBh3X9biEiw) ((*id0).Sup.id));
	}
	LA1: ;
	return result0;
}
NIM_EXTERNC N_NOINLINE(void, compiler_identsInit000)(void) {
nimRegisterGlobalMarker(T_L3r6bVdeFMiI9cwmLpWIeKw_4);
}

NIM_EXTERNC N_NOINLINE(void, compiler_identsDatInit000)(void) {
static TNimNode* T_L3r6bVdeFMiI9cwmLpWIeKw_2[5];
static TNimNode* T_L3r6bVdeFMiI9cwmLpWIeKw_3[3];
static TNimNode T_L3r6bVdeFMiI9cwmLpWIeKw_0[11];
NTI_TzLHS09bRH9a0TYLs39cqcNaw.size = sizeof(IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw);
NTI_TzLHS09bRH9a0TYLs39cqcNaw.kind = 18;
NTI_TzLHS09bRH9a0TYLs39cqcNaw.base = 0;
NTI_TzLHS09bRH9a0TYLs39cqcNaw.flags = 2;
T_L3r6bVdeFMiI9cwmLpWIeKw_2[0] = &T_L3r6bVdeFMiI9cwmLpWIeKw_0[1];
NTI_raN9cHVgzmvaXisezY9aGg9cg.size = sizeof(Tidobj_raN9cHVgzmvaXisezY9aGg9cg);
NTI_raN9cHVgzmvaXisezY9aGg9cg.kind = 17;
NTI_raN9cHVgzmvaXisezY9aGg9cg.base = (&NTI_13RNkKqUOX1TtorOUlKtqA);
NTI_raN9cHVgzmvaXisezY9aGg9cg.flags = 1;
T_L3r6bVdeFMiI9cwmLpWIeKw_0[2].kind = 1;
T_L3r6bVdeFMiI9cwmLpWIeKw_0[2].offset = offsetof(Tidobj_raN9cHVgzmvaXisezY9aGg9cg, id);
T_L3r6bVdeFMiI9cwmLpWIeKw_0[2].typ = (&NTI_rR5Bzr1D5krxoo1NcNyeMA);
T_L3r6bVdeFMiI9cwmLpWIeKw_0[2].name = "id";
NTI_raN9cHVgzmvaXisezY9aGg9cg.node = &T_L3r6bVdeFMiI9cwmLpWIeKw_0[2];
NTI_4umxGerWTHGPwUms7Yqu3g.size = sizeof(Tident_4umxGerWTHGPwUms7Yqu3g);
NTI_4umxGerWTHGPwUms7Yqu3g.kind = 17;
NTI_4umxGerWTHGPwUms7Yqu3g.base = (&NTI_raN9cHVgzmvaXisezY9aGg9cg);
NTI_4umxGerWTHGPwUms7Yqu3g.flags = 2;
T_L3r6bVdeFMiI9cwmLpWIeKw_3[0] = &T_L3r6bVdeFMiI9cwmLpWIeKw_0[4];
T_L3r6bVdeFMiI9cwmLpWIeKw_0[4].kind = 1;
T_L3r6bVdeFMiI9cwmLpWIeKw_0[4].offset = offsetof(Tident_4umxGerWTHGPwUms7Yqu3g, s);
T_L3r6bVdeFMiI9cwmLpWIeKw_0[4].typ = (&NTI_77mFvmsOLKik79ci2hXkHEg);
T_L3r6bVdeFMiI9cwmLpWIeKw_0[4].name = "s";
T_L3r6bVdeFMiI9cwmLpWIeKw_3[1] = &T_L3r6bVdeFMiI9cwmLpWIeKw_0[5];
T_L3r6bVdeFMiI9cwmLpWIeKw_0[5].kind = 1;
T_L3r6bVdeFMiI9cwmLpWIeKw_0[5].offset = offsetof(Tident_4umxGerWTHGPwUms7Yqu3g, next);
T_L3r6bVdeFMiI9cwmLpWIeKw_0[5].typ = (&NTI_1nh2T19a2BrGbBBQRS39bxRw);
T_L3r6bVdeFMiI9cwmLpWIeKw_0[5].name = "next";
T_L3r6bVdeFMiI9cwmLpWIeKw_3[2] = &T_L3r6bVdeFMiI9cwmLpWIeKw_0[6];
T_L3r6bVdeFMiI9cwmLpWIeKw_0[6].kind = 1;
T_L3r6bVdeFMiI9cwmLpWIeKw_0[6].offset = offsetof(Tident_4umxGerWTHGPwUms7Yqu3g, h);
T_L3r6bVdeFMiI9cwmLpWIeKw_0[6].typ = (&NTI_rR5Bzr1D5krxoo1NcNyeMA);
T_L3r6bVdeFMiI9cwmLpWIeKw_0[6].name = "h";
T_L3r6bVdeFMiI9cwmLpWIeKw_0[3].len = 3; T_L3r6bVdeFMiI9cwmLpWIeKw_0[3].kind = 2; T_L3r6bVdeFMiI9cwmLpWIeKw_0[3].sons = &T_L3r6bVdeFMiI9cwmLpWIeKw_3[0];
NTI_4umxGerWTHGPwUms7Yqu3g.node = &T_L3r6bVdeFMiI9cwmLpWIeKw_0[3];
NTI_1nh2T19a2BrGbBBQRS39bxRw.size = sizeof(Tident_4umxGerWTHGPwUms7Yqu3g*);
NTI_1nh2T19a2BrGbBBQRS39bxRw.kind = 22;
NTI_1nh2T19a2BrGbBBQRS39bxRw.base = (&NTI_4umxGerWTHGPwUms7Yqu3g);
NTI_1nh2T19a2BrGbBBQRS39bxRw.flags = 2;
NTI_1nh2T19a2BrGbBBQRS39bxRw.marker = Marker_TY_1nh2T19a2BrGbBBQRS39bxRw;
NTI_CBfZt49asUfAsBVM7a3Rc9cw.size = sizeof(TY_CBfZt49asUfAsBVM7a3Rc9cw);
NTI_CBfZt49asUfAsBVM7a3Rc9cw.kind = 16;
NTI_CBfZt49asUfAsBVM7a3Rc9cw.base = (&NTI_1nh2T19a2BrGbBBQRS39bxRw);
NTI_CBfZt49asUfAsBVM7a3Rc9cw.flags = 2;
T_L3r6bVdeFMiI9cwmLpWIeKw_0[1].kind = 1;
T_L3r6bVdeFMiI9cwmLpWIeKw_0[1].offset = offsetof(IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw, buckets);
T_L3r6bVdeFMiI9cwmLpWIeKw_0[1].typ = (&NTI_CBfZt49asUfAsBVM7a3Rc9cw);
T_L3r6bVdeFMiI9cwmLpWIeKw_0[1].name = "buckets";
T_L3r6bVdeFMiI9cwmLpWIeKw_2[1] = &T_L3r6bVdeFMiI9cwmLpWIeKw_0[7];
T_L3r6bVdeFMiI9cwmLpWIeKw_0[7].kind = 1;
T_L3r6bVdeFMiI9cwmLpWIeKw_0[7].offset = offsetof(IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw, wordcounter);
T_L3r6bVdeFMiI9cwmLpWIeKw_0[7].typ = (&NTI_rR5Bzr1D5krxoo1NcNyeMA);
T_L3r6bVdeFMiI9cwmLpWIeKw_0[7].name = "wordCounter";
T_L3r6bVdeFMiI9cwmLpWIeKw_2[2] = &T_L3r6bVdeFMiI9cwmLpWIeKw_0[8];
T_L3r6bVdeFMiI9cwmLpWIeKw_0[8].kind = 1;
T_L3r6bVdeFMiI9cwmLpWIeKw_0[8].offset = offsetof(IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw, idanon);
T_L3r6bVdeFMiI9cwmLpWIeKw_0[8].typ = (&NTI_1nh2T19a2BrGbBBQRS39bxRw);
T_L3r6bVdeFMiI9cwmLpWIeKw_0[8].name = "idAnon";
T_L3r6bVdeFMiI9cwmLpWIeKw_2[3] = &T_L3r6bVdeFMiI9cwmLpWIeKw_0[9];
T_L3r6bVdeFMiI9cwmLpWIeKw_0[9].kind = 1;
T_L3r6bVdeFMiI9cwmLpWIeKw_0[9].offset = offsetof(IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw, iddelegator);
T_L3r6bVdeFMiI9cwmLpWIeKw_0[9].typ = (&NTI_1nh2T19a2BrGbBBQRS39bxRw);
T_L3r6bVdeFMiI9cwmLpWIeKw_0[9].name = "idDelegator";
T_L3r6bVdeFMiI9cwmLpWIeKw_2[4] = &T_L3r6bVdeFMiI9cwmLpWIeKw_0[10];
T_L3r6bVdeFMiI9cwmLpWIeKw_0[10].kind = 1;
T_L3r6bVdeFMiI9cwmLpWIeKw_0[10].offset = offsetof(IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw, emptyident);
T_L3r6bVdeFMiI9cwmLpWIeKw_0[10].typ = (&NTI_1nh2T19a2BrGbBBQRS39bxRw);
T_L3r6bVdeFMiI9cwmLpWIeKw_0[10].name = "emptyIdent";
T_L3r6bVdeFMiI9cwmLpWIeKw_0[0].len = 5; T_L3r6bVdeFMiI9cwmLpWIeKw_0[0].kind = 2; T_L3r6bVdeFMiI9cwmLpWIeKw_0[0].sons = &T_L3r6bVdeFMiI9cwmLpWIeKw_2[0];
NTI_TzLHS09bRH9a0TYLs39cqcNaw.node = &T_L3r6bVdeFMiI9cwmLpWIeKw_0[0];
NTI_lnkYNZP9asc88UfiEGjLrbA.size = sizeof(IdentcacheHEX3Aobjecttype_TzLHS09bRH9a0TYLs39cqcNaw*);
NTI_lnkYNZP9asc88UfiEGjLrbA.kind = 22;
NTI_lnkYNZP9asc88UfiEGjLrbA.base = (&NTI_TzLHS09bRH9a0TYLs39cqcNaw);
NTI_lnkYNZP9asc88UfiEGjLrbA.flags = 2;
NTI_lnkYNZP9asc88UfiEGjLrbA.marker = Marker_TY_lnkYNZP9asc88UfiEGjLrbA;
NTI_GFuL0q6Yj4iJze0S9cdD9avg.size = sizeof(Tidobj_raN9cHVgzmvaXisezY9aGg9cg*);
NTI_GFuL0q6Yj4iJze0S9cdD9avg.kind = 22;
NTI_GFuL0q6Yj4iJze0S9cdD9avg.base = (&NTI_raN9cHVgzmvaXisezY9aGg9cg);
NTI_GFuL0q6Yj4iJze0S9cdD9avg.marker = Marker_TY_GFuL0q6Yj4iJze0S9cdD9avg;
}

