

#include "BUILTIN.h"
extern OBJ _AIde_14(OBJ,OBJ);extern OBJ __AIde_14;
extern OBJ __AIdeSet_2;
extern OBJ __AIdeMap_3;
extern OBJ _AIdeMap_13(OBJ);extern OBJ __AIdeMap_13;
extern OBJ __ASeq_6;

#include "Nat.h"

#include "Char.h"

#include "Int.h"
extern OBJ _ASeqOfSeq_2(OBJ);extern OBJ __ASeqOfSeq_2;
extern OBJ _ASeqReduce_4(OBJ,OBJ,OBJ);extern OBJ __ASeqReduce_4;
extern OBJ _ABSTree_57(OBJ,OBJ,OBJ);extern OBJ __ABSTree_57;
extern OBJ _ABSTree_61(OBJ,OBJ,OBJ);extern OBJ __ABSTree_61;
extern OBJ _ABSTreeConv_7(OBJ,OBJ);extern OBJ __ABSTreeConv_7;
extern OBJ _AMap_16(OBJ,OBJ,OBJ);extern OBJ __AMap_16;
extern OBJ _AMap_31(OBJ,OBJ,OBJ,OBJ);extern OBJ __AMap_31;
extern OBJ _AMap_33(OBJ,OBJ,OBJ);extern OBJ __AMap_33;
extern OBJ _AIdeMSC_1(OBJ);OBJ __AIdeMSC_1; /* ideMSC */
extern OBJ _AIdeMSC_3(OBJ,OBJ);OBJ __AIdeMSC_3; /* state */
extern OBJ _AIdeMSC_4(OBJ);OBJ __AIdeMSC_4; /* state? */
extern OBJ _AIdeMSC_5(OBJ);OBJ __AIdeMSC_5; /* forests */
extern OBJ _AIdeMSC_6(OBJ);OBJ __AIdeMSC_6; /* visited */
extern OBJ _AIdeMSC_7(OBJ,OBJ,OBJ);OBJ __AIdeMSC_7; /* dfs */
extern OBJ _AIdeMSC_8(OBJ,OBJ,OBJ);OBJ __AIdeMSC_8; /* dfsVisit */
extern OBJ _AIdeMSC_9(OBJ);OBJ __AIdeMSC_9; /* invert */
extern OBJ _AIdeMSC_10(OBJ,OBJ,OBJ);OBJ __AIdeMSC_10; /* inv */
extern OBJ _AIdeMSC_11(OBJ,OBJ,OBJ);OBJ __AIdeMSC_11; /* inv1 */
OBJ __AIdeMSC_12; /* ideMSC'12 */

extern OBJ _AIdeMSC_1(OBJ x1) /* ideMSC */
{OBJ r;
 CPCLS(__AIdeMSC_7,2);
 CPPRD(__AIdeMSC_12,1);
 COPY(x1,2);
 {OBJ x2;OBJ x3;OBJ x4;OBJ x5;OBJ x6;
  x2=(*(OBJ(*)(OBJ,OBJ))METHOD(__AIdeMSC_7,1))(__AIdeMSC_7,x1);
  x3=_AIdeMap_13(x1);
  x4=_AIdeMSC_9(x1);
  x5=_ASeqReduce_4(x2,__AIdeMSC_12,x3);
  x6=(*(OBJ(*)(OBJ,OBJ))METHOD(__AIdeMSC_7,1))(__AIdeMSC_7,x4);
  {OBJ x8=FLD1(x5,2);
   if(EXPRD(x5,1)){
    FREE(FLD1(x5,1),1);DSPRDF(x5);
   }else{
    COPY(x8,1);
    FRPRD(x5,1);}
   CPPRD(__AIdeMSC_12,1);
   {OBJ x9;OBJ x10;OBJ x11;
    x9=x8;
    x10=_ASeqOfSeq_2(x9);
    x11=_ASeqReduce_4(x6,__AIdeMSC_12,x10);
    {OBJ x13=FLD1(x11,2);
     if(EXPRD(x11,1)){
      r=x13;
      FREE(FLD1(x11,1),1);DSPRDF(x11);
     }else{
      COPY(x13,1);
      r=x13;
      FRPRD(x11,1);}}}}}
 return r;}

extern OBJ _AIdeMSC_3(OBJ x1,OBJ x2) /* state */
{OBJ r;
 PRD1(2,r);FLD1(r,1)=x1;FLD1(r,2)=x2;
 return r;}

extern OBJ _AIdeMSC_4(OBJ x1) /* state? */
{OBJ r;
 FRPRD(x1,1);
 r=__ABUILTIN_5;
 return r;}

extern OBJ _AIdeMSC_5(OBJ x1) /* forests */
{OBJ r;
 {OBJ x3=FLD1(x1,2);
  if(EXPRD(x1,1)){
   r=x3;
   FREE(FLD1(x1,1),1);DSPRDF(x1);
  }else{
   COPY(x3,1);
   r=x3;
   FRPRD(x1,1);}}
 return r;}

extern OBJ _AIdeMSC_6(OBJ x1) /* visited */
{OBJ r;
 {OBJ x2=FLD1(x1,1);
  if(EXPRD(x1,1)){
   r=x2;
   FREE(FLD1(x1,2),1);DSPRDF(x1);
  }else{
   COPY(x2,1);
   r=x2;
   FRPRD(x1,1);}}
 return r;}

extern OBJ _AIdeMSC_7(OBJ x1,OBJ x2,OBJ x3) /* dfs */
{OBJ r;
 {OBJ x13=FLD1(x3,1);OBJ x14=FLD1(x3,2);
  COPY(x13,2);COPY(x14,1);
  CPPRD(x2,1);
  CPCLS(__AIde_14,1);
  {OBJ x15;
   x15=_ABSTree_61(__AIde_14,x2,x13);
   if(ISTGPRM(x15,1)){
    FREE(x1,1);
    FRPRD(x2,1);
    FREE(x13,1);
    FREE(x14,1);
    r=x3;
   }else{
    if(EXPRD(x3,1)){
     DSPRD(x3);
    }else{
     DCPRD(x3,1);}
    {OBJ x16;OBJ x17;
     PRD1(2,x16);FLD1(x16,1)=__ASeq_6;FLD1(x16,2)=x14;
     PRD1(2,x17);FLD1(x17,1)=x13;FLD1(x17,2)=x16;
     r=_AIdeMSC_8(x1,x2,x17);}}}}
 return r;}

extern OBJ _AIdeMSC_8(OBJ x1,OBJ x2,OBJ x3) /* dfsVisit */
{OBJ r;
 {OBJ x91=FLD1(x3,1);OBJ x92=FLD1(x3,2);
  COPY(x91,2);COPY(x92,1);
  CPPRD(x2,1);
  CPCLS(__AIde_14,1);
  {OBJ x93;
   x93=_ABSTree_61(__AIde_14,x2,x91);
   if(ISTGPRM(x93,1)){
    FREE(x1,1);
    FRPRD(x2,1);
    FREE(x91,1);
    FREE(x92,1);
    r=x3;
   }else{
    if(EXPRD(x3,1)){
     DSPRD(x3);
    }else{
     DCPRD(x3,1);}
    COPY(x1,1);
    CPPRD(x2,2);
    CPCLS(__AIde_14,2);
    {OBJ x94;OBJ x95;
     x94=_AMap_33(__AIde_14,x1,x2);
     x95=_ABSTree_57(__AIde_14,x2,x91);
     if(ISPRM(x94)){
      FREE(x1,1);
      if(ISPRM(x92)){
       HLT("Seq at <unknown> : undefined selection rt\'Seq:seq->seq");
      }else{
       {OBJ x108=FLD1(x92,1);OBJ x109=FLD1(x92,2);FLAG x_x92=EXPRD(x92,1);
	if(x_x92){
	}else{
	 COPY(x108,1);COPY(x109,1);}
	{OBJ x111;OBJ x112;
	 if(x_x92){
	  RSOME(x92,x111);FLD1(x111,1)=x2;FLD1(x111,2)=x108;
	 }else{
	  FRPRD(x92,1);PRD1(2,x111);FLD1(x111,1)=x2;FLD1(x111,2)=x108;}
	 PRD1(2,x112);FLD1(x112,1)=x111;FLD1(x112,2)=x109;
	 PRD1(2,r);FLD1(r,1)=x95;FLD1(r,2)=x112;}}}
     }else{
      {OBJ x96=FLD1(x94,1);
       if(EXPRD(x94,1)){
	DSPRDF(x94);
       }else{
	COPY(x96,1);
	FRPRD(x94,1);}
       CPCLS(__AIdeMSC_8,1);
       CPCLS(__AIde_14,1);
       {OBJ x97;OBJ x98;OBJ x99;OBJ x100;
	x97=(*(OBJ(*)(OBJ,OBJ))METHOD(__AIdeMSC_8,1))(__AIdeMSC_8,x1);
	PRD1(2,x98);FLD1(x98,1)=x95;FLD1(x98,2)=x92;
	x99=_ABSTreeConv_7(__AIde_14,x96);
	x100=_ASeqReduce_4(x97,x98,x99);
	{OBJ x101=FLD1(x100,1);OBJ x102=FLD1(x100,2);FLAG x_x100=EXPRD(x100,1);
	 if(x_x100){
	 }else{
	  COPY(x101,1);COPY(x102,1);}
	 if(ISPRM(x102)){
	  HLT("Seq at <unknown> : undefined selection rt\'Seq:seq->seq");
	 }else{
	  {OBJ x103=FLD1(x102,1);OBJ x104=FLD1(x102,2);FLAG x_x102=EXPRD(x102,1);
	   if(x_x102){
	   }else{
	    COPY(x103,1);COPY(x104,1);}
	   {OBJ x106;OBJ x107;
	    if(x_x102){
	     RSOME(x102,x106);FLD1(x106,1)=x2;FLD1(x106,2)=x103;
	    }else{
	     FRPRD(x102,1);PRD1(2,x106);FLD1(x106,1)=x2;FLD1(x106,2)=x103;}
	    if(x_x100){
	     RSOME(x100,x107);FLD1(x107,1)=x106;FLD1(x107,2)=x104;
	    }else{
	     FRPRD(x100,1);PRD1(2,x107);FLD1(x107,1)=x106;FLD1(x107,2)=x104;}
	    PRD1(2,r);FLD1(r,1)=x101;FLD1(r,2)=x107;}}}}}}}}}}}
 return r;}

extern OBJ _AIdeMSC_9(OBJ x1) /* invert */
{OBJ r;
 CPCLS(__AIdeMSC_10,1);
 COPY(__AIdeMap_3,1);
 COPY(x1,1);
 {OBJ x2;OBJ x3;
  x2=(*(OBJ(*)(OBJ,OBJ))METHOD(__AIdeMSC_10,1))(__AIdeMSC_10,x1);
  x3=_AIdeMap_13(x1);
  r=_ASeqReduce_4(x2,__AIdeMap_3,x3);}
 return r;}

extern OBJ _AIdeMSC_10(OBJ x1,OBJ x2,OBJ x3) /* inv */
{OBJ r;
 CPCLS(__AIdeMSC_11,1);
 CPCLS(__AIde_14,2);
 CPPRD(x2,1);
 {OBJ x4;OBJ x5;OBJ x6;
  x4=(*(OBJ(*)(OBJ,OBJ))METHOD(__AIdeMSC_11,1))(__AIdeMSC_11,x2);
  x5=_AMap_16(__AIde_14,x1,x2);
  x6=_ABSTreeConv_7(__AIde_14,x5);
  r=_ASeqReduce_4(x4,x3,x6);}
 return r;}

extern OBJ _AIdeMSC_11(OBJ x1,OBJ x2,OBJ x3) /* inv1 */
{OBJ r;
 CPCLS(__AIde_14,1);
 CPPRD(x2,1);
 COPY(x3,1);
 {OBJ x4;
  x4=_AMap_33(__AIde_14,x3,x2);
  if(ISPRM(x4)){
   CPCLS(__AIde_14,2);
   COPY(__AIdeSet_2,1);
   {OBJ x13;
    x13=_ABSTree_57(__AIde_14,x1,__AIdeSet_2);
    r=_AMap_31(__AIde_14,x2,x13,x3);}
  }else{
   {OBJ x11=FLD1(x4,1);
    if(EXPRD(x4,1)){
     DSPRDF(x4);
    }else{
     COPY(x11,1);
     FRPRD(x4,1);}
    CPCLS(__AIde_14,2);
    {OBJ x12;
     x12=_ABSTree_57(__AIde_14,x1,x11);
     r=_AMap_31(__AIde_14,x2,x12,x3);}}}}
 return r;}


init_AIdeMSC()
{
 static int visited=0; if(visited) return; visited=1;
 init_AIde();
 init_AIdeSet();
 init_AIdeMap();
 init_ASeq();
 init_ANat();
 init_AOption();
 init_APair();
 init_AFormat();
 init_AString();
 init_ACom();
 init_AStream();
 init_AVoid();
 init_AFmt();
 init_AChar();
 init_AFile();
 init_AInt();
 init_ASeqOfSeq();
 init_ASeqReduce();
 init_ASetByBST();
 init_ASetByBSTFilter();
 init_ASetByBSTConv();
 init_ABSTree();
 init_ATree();
 init_ABSTreeConv();
 init_AMap();
 init_AMapConv();
 CLS(3,_AIdeMSC_11,__AIdeMSC_11);
 CLS(3,_AIdeMSC_10,__AIdeMSC_10);
 CLS(1,_AIdeMSC_9,__AIdeMSC_9);
 CLS(3,_AIdeMSC_8,__AIdeMSC_8);
 CLS(3,_AIdeMSC_7,__AIdeMSC_7);
 CLS(1,_AIdeMSC_6,__AIdeMSC_6);
 CLS(1,_AIdeMSC_5,__AIdeMSC_5);
 CLS(1,_AIdeMSC_4,__AIdeMSC_4);
 CLS(2,_AIdeMSC_3,__AIdeMSC_3);
 CLS(1,_AIdeMSC_1,__AIdeMSC_1);
 COPY(__AIdeSet_2,1);
 PRD1(2,__AIdeMSC_12);FLD1(__AIdeMSC_12,1)=__AIdeSet_2;FLD1(__AIdeMSC_12,2)=__ASeq_6;}

