Anim.extends=""
Anim.Class<<
  .attr=""
  .goal=""
  .rate=-1
  .smooth=0
  .threshold=0.001
  .enabled=true
  .autoDisable=false
  .modulus=0
  .highPriority=false
>>
Ticker.RasterTick.exec={Raster.tick()}
Ticker.RasterTick.order=1
Data.extends=""
Data.Class<<
  .url=""
  .state=_NEW
  .parse=true
  .unparsed=""
  .loadPrograms=true
  .contentLength=-1
  .bytesRead=0
  .errorMessage=""
  .stall=false
  .reset=false
  .fileList=[]
  .fileAdded={$$.fileList=$$.fileList++#arg}
  .imagePercentLoaded=100
  .streamWavelets=true
  .memoryMapFiles=false
  .stream=""
>>
Meson.setCurrentDataSource={Meson.currentDataSource=#arg;Image.Class.dataSource=#arg}
Meson.setCurrentDataObject={Meson.currentDataObject=#arg}
_axMul_C=_axMul_N=_axMul_S=0.5
_axMul_SW=_axMul_NW=_axMul_W=0
_axMul_SE=_axMul_NE=_axMul_E=1
_ayMul_C=_ayMul_E=_ayMul_W=0.5
_ayMul_NW=_ayMul_N=_ayMul_NE=0
_ayMul_SW=_ayMul_S=_ayMul_SE=1
Image.extends=""
Image.Class<<
  .file=""
  .dataSource=Meson.currentDataSource
  .text=""
  .buffer=clear
  .wait=false
  .doubleBuffer=false
  .deferLoad=false
  .rebuild=false
  .mipmap=false
  .fileSetWidth=0
  .fileSetHeight=0
  .draw=""
  .depth=32
  .tile=false
  .fontSmooth=2
  .wrapWidth=0
  .minWidth=0
  .minHeight=0
  .language={Meson.language}
  .country=""
  .softEdge=0
  .states=["default"]
  .parent="Display.Primary"
  .display={$$.parent->display}
  .tabStops=[]
  .tabDefault=50
  .children=[]
  .areas=[]
  .x=0
  .y=0
  .offsets=[]
  .angle=0
  .scaleX=1
  .scaleY=1
  .oversample=false
  .bilinear=false
  .displayBasis={$$.parent->displayBasis&$$.angle==0&$$.scaleX==1&$$.scaleY==1}
  .anchorX={$$.width*@(_axMul~$$.anchor)}
  .anchorY={$$.height*@(_ayMul~$$.anchor)}
  .cosAngle={Meson.cos($$.angle*Meson.degToRad)}
  .sinAngle={Meson.sin($$.angle*Meson.degToRad)}
  .m00={$$.scaleX*$$.cosAngle}
  .m01={0-($$.scaleY*$$.sinAngle)}
  .m02={$$.x-$$.anchorX*$$.m00-$$.anchorY*$$.m01}
  .m10={$$.scaleX*$$.sinAngle}
  .m11={$$.scaleY*$$.cosAngle}
  .m12={$$.y-$$.anchorX*$$.m10-$$.anchorY*$$.m11}
  .w00={$$.parent->w00*$$.m00+$$.parent->w01*$$.m10}
  .w01={$$.parent->w00*$$.m01+$$.parent->w01*$$.m11}
  .absX={$$.displayBasis?($$.parent->absX+$$.x-$$.anchorX):($$.parent->w00*$$.m02+$$.parent->w01*$$.m12+$$.parent->absX)}
  .w10={$$.parent->w10*$$.m00+$$.parent->w11*$$.m10}
  .w11={$$.parent->w10*$$.m01+$$.parent->w11*$$.m11}
  .absY={$$.displayBasis?($$.parent->absY+$$.y-$$.anchorY):($$.parent->w10*$$.m02+$$.parent->w11*$$.m12+$$.parent->absY)}
  .w_d={1/($$.w00*$$.w11-$$.w01*$$.w10)}
  .i00={$$.w11*$$.w_d}
  .i01={0-($$.w01*$$.w_d)}
  .i02={($$.w01*$$.absY-$$.absX*$$.w11)*$$.w_d}
  .i10={0-($$.w10*$$.w_d)}
  .i11={$$.w00*$$.w_d}
  .i12={($$.absX*$$.w10-$$.w00*$$.absY)*$$.w_d}
  .mouseX={$$.displayBasis?($$.display->mouseX-$$.absX):($$.display->mouseX*$$.i00+$$.display->mouseY*$$.i01+$$.i02)}
  .mouseY={$$.displayBasis?($$.display->mouseY-$$.absY):($$.display->mouseX*$$.i10+$$.display->mouseY*$$.i11+$$.i12)}
  .xformSum={$$.displayBasis?-1:($$.m00+100*$$.m01+10000*$$.m10+1000000*$$.m11)}
  .offsetsSum={Raster.checksum($$.offsets)}
  .layer=0
  .alpha=1.0
  .absAlpha={$$.alpha*$$.parent->absAlpha}
  .absVisible={$$.layer>=0&$$.alpha>0&$$.parent->absVisible}
  .anchor=_NW
  .width=0
  .height=0
  .enabled=true
  .absEnabled={$$.enabled&$$.parent->absEnabled}
  .javaRaster=""
  .displayRaster={$$.display->javaRaster}
  .makeJavaImage=false
  .dither=true
  .javaImage=""
  .cursor=""
  .useCursor=""
  .dirtyState=_CLEAN
  .dirtyRects=[]
  .dirtyBits=_CLEAN
  .repaint={$$.dirtyBits=_SELF;$$.dirtyState==_CLEAN?($$.dirtyState=_SELF;$$.absVisible?$$.display->repaintDisplay())}
  .clearDirty={$$.dirtyState=_CLEAN;$$.absVisible?foreach(^elem="i",^in=$$.children,^do={#i->clearDirty()})}
  .lastParent=Image.Class.parent;
  .new={
    ChangeTrigger.$_p.last=Image.Class.parent;
    ChangeTrigger.$_p.test={$$.parent};
    ChangeTrigger.$_p.exec={
      $$.lastParent->children=$$.lastParent->children--["$$"];
      $$.lastParent=$$.parent;
      $$.parent->children=$$.parent->children++["$$"]
    };
    ChangeTrigger.$_p.exec;
    HairTrigger.$_r.lastX=-1;
    HairTrigger.$_r.lastY=-1;
    HairTrigger.$_r.lastL=-1;
    HairTrigger.$_r.lastA=-1;
    HairTrigger.$_r.lastF=-1;
    HairTrigger.$_r.lastO="";
    HairTrigger.$_r.lastV=true;
    HairTrigger.$_r.test={$$.absVisible?($$.alpha;$$.layer;$$.x;$$.y;$$.anchorX;$$.anchorY;$$.xformSum;$$.offsetsSum)};
    HairTrigger.$_r.exec={#d=false;#v=$$.absVisible;($$.alpha!=HairTrigger.$_r.lastA)?(HairTrigger.$_r.lastA=$$.alpha;#d=true);($$.layer!=HairTrigger.$_r.lastL)?(HairTrigger.$_r.lastL=$$.layer;#d=true);#v?(#x=$$.x+$$.anchorX;#y=$$.y+$$.anchorY;(#x!=HairTrigger.$_r.lastX|#y!=HairTrigger.$_r.lastY)?(HairTrigger.$_r.lastX=#x;HairTrigger.$_r.lastY=#y;#d=true));($$.xformSum!=HairTrigger.$_r.lastF)?(HairTrigger.$_r.lastF=$$.xformSum;#d=true);($$.offsetsSum!=HairTrigger.$_r.lastO)?(HairTrigger.$_r.lastO=$$.offsetsSum;#d=true);#d&(#v|HairTrigger.$_r.lastV)?($$.dirtyState=_CHILDREN;$$.display->repaintDisplay());HairTrigger.$_r.lastV=#v};
    Raster.newImage("Image.$")
  }
>>
Display.extends=["Applet","Image"]
Display.Class<<
  .buffer={Applet.$.fill}
  .file={Applet.$.image}
  .parent=""
  .display="$$"
  .mouseX=-1
  .mouseY=-1
  .displayBasis=true
  .w00=1
  .w01=0
  .absX=0
  .w10=0
  .w11=1
  .absY=0
  .absAlpha=1
  .absEnabled=true
  .absVisible=true
  .repaint={$$.dirtyState=_SELF;$$.pleaseRepaint=true}
  .repaintDisplay={$$.pleaseRepaint=true}
  .makeJavaImage=true
  .displayRaster={$$.javaRaster}
  .invokeQueue=[]
  .invokeNextPaint={$$.invokeQueue=$$.invokeQueue++#arg;$$.repaint()}
  .drainInvokeQueue={#q=$$.invokeQueue;#q!=[]?($$.invokeQueue=[];foreach(^elem="i";^in=#q;^do={@(#i)}))}
  .paintInternal={$$.drainInvokeQueue();Raster.paintImage($$.javaRaster);Timer.$_mt.enabled=!Display.$.press}
  .new={
    Timer.$_mt.delay=.25;
    Timer.$_mt.repeat=true;
    Timer.$_mt.exec={Timer.$_mt.enabled?(Raster.updateMouse(Display.$.javaRaster);Timer.$_mt.enabled=false)};
    HairTrigger.$_mh.test={Display.$.mouseX;Display.$.mouseY};
    HairTrigger.$_mh.exec={Timer.$_mt.enabled=!Display.$.press};
    Trigger.$_md.test={Display.$.press};
    Trigger.$_md.exec={Raster.updateMouse(Display.$.javaRaster)};
    ChangeTrigger.$_fs.test={Meson.isFullScreen};
    ChangeTrigger.$_fs.exec={$$.repaint()};
    Timer.$_mt.start();
  }
>>
Area.extends=""
Area.Class<<
  .image="Display.Primary"
  .display={$$.image->display}
  .x=0
  .y=0
  .width={$$.image->width}
  .height={$$.image->height}
  .enabled=true
  .state="default"
  .cursor=""
  .boxPick=false
  .defaultPick=false
  .mouseHover=false
  .hover={$$.mouseHover}
  .content=""
  .init=""
  .press={$$.hover&$$.display->press}
  .new={
    ChangeTrigger.$_a.last=Area.Class.image;
    ChangeTrigger.$_a.test={Area.$.image};
    ChangeTrigger.$_a.exec={ChangeTrigger.$_a.last->areas=ChangeTrigger.$_a.last->areas--["Area.$"];Area.$.image->areas=Area.$.image->areas++["Area.$"]};
    ChangeTrigger.$_a.exec;
    ChangeTrigger.$_q.test={Area.$.state};
    ChangeTrigger.$_q.exec={Area.$.image->repaint()};
  }
>>
Style.extends=""
Style.Class<<
  .fontFamily=[]
  .fontSize=-1
  .fontWeight=.
  .fontStyle=.
  .textDecoration=.
  .color=""
  .dropShadow=""
  .shadowOffset=-1
  .textAlign=.
  .lineSpacing=-999
  .margin=-1
  .marginLeft=-1
  .marginRight=-1
  .marginBottom=-1
  .marginTop=-1
  .borderThickness=-1
  .borderColor=""
  .borderColorLeft=""
  .borderColorRight=""
  .borderColorBottom=""
  .borderColorTop=""
  .offsetX=-1
  .offsetY=-1
  .area=""
  .contentPre=""
  .contentPost=""
  .fontSmooth=-1
>>
Style.Default<<
  .fontFamily=["SansSerif"]
  .fontSize=12
  .fontWeight=_PLAIN
  .fontStyle=_PLAIN
  .textAlign=_LEFT
  .textDecoration=_NONE
  .lineSpacing=0
  .margin=2
  .color=black
  .dropShadow=""
  .shadowOffset=1
  .borderThickness=0
  .borderColor=black
  .offsetX=0
  .offsetY=0
>>
Style.Italic.fontStyle=_ITALIC
Style.Bold.fontWeight=_BOLD
Style.Left.textAlign=_LEFT
Style.Right.textAlign=_RIGHT
Style.Center.textAlign=_CENTER
Meson<<
  .formatFloat={Raster.formatFloat(^value=#value;^format=#format)}
  .sinMethod=Meson.getMethod(^class="java.lang.Math";^method="sin";^args=["double"])
  .sin={Meson.callMethod(^method=Meson.sinMethod;^args=[#arg])}
  .asinMethod=Meson.getMethod(^class="java.lang.Math";^method="asin";^args=["double"])
  .asin={Meson.callMethod(^method=Meson.asinMethod;^args=[#arg])}
  .cosMethod=Meson.getMethod(^class="java.lang.Math";^method="cos";^args=["double"])
  .cos={Meson.callMethod(^method=Meson.cosMethod;^args=[#arg])}
  .acosMethod=Meson.getMethod(^class="java.lang.Math";^method="acos";^args=["double"])
  .acos={Meson.callMethod(^method=Meson.acosMethod;^args=[#arg])}
  .tanMethod=Meson.getMethod(^class="java.lang.Math";^method="tan";^args=["double"])
  .tan={Meson.callMethod(^method=Meson.tanMethod;^args=#arg)}
  .atanMethod=Meson.getMethod(^class="java.lang.Math";^method="atan";^args=["double"])
  .atan={Meson.callMethod(^method=Meson.atanMethod;^args=#arg)}
  .atan2Method=Meson.getMethod(^class="java.lang.Math";^method="atan2";^args=["double","double"])
  .atan2={Meson.callMethod(^method=Meson.atan2Method;^args=#arg)}
  .sqrtMethod=Meson.getMethod(^class="java.lang.Math";^method="sqrt";^args=["double"])
  .sqrt={Meson.callMethod(^method=Meson.sqrtMethod;^args=[#arg])}
  .roundMethod=Meson.getMethod(^class="java.lang.Math";^method="round";^args=["double"])
  .round={Meson.callMethod(^method=Meson.roundMethod;^args=[#arg])}
  .ceilMethod=Meson.getMethod(^class="java.lang.Math";^method="ceil";^args=["double"])
  .ceil={Meson.callMethod(^method=Meson.ceilMethod;^args=[#arg])}
  .floorMethod=Meson.getMethod(^class="java.lang.Math";^method="floor";^args=["double"])
  .floor={Meson.callMethod(^method=Meson.floorMethod;^args=[#arg])}
  .lnMethod=Meson.getMethod(^class="java.lang.Math";^method="log";^args=["double"])
  .ln={Meson.callMethod(^method=Meson.lnMethod;^args=[#arg])}
  .expMethod=Meson.getMethod(^class="java.lang.Math";^method="exp";^args=["double"])
  .exp={Meson.callMethod(^method=Meson.expMethod;^args=[#arg])}
  .degToRad=0.017453292519943295
  .radToDeg=57.29577951308232
>>
