<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphic-notation appVersion="0.7.9" version="0.7.9">
<properties>
<property name="multimer" short-description="multimer" type="int" value="0"/>
<property name="text" short-description="text" type="String" value=""/>
<property name="value" short-description="value" type="String" value=""/>
</properties>
<nodes>
<node icon="icon0" type="source-sink"/>
<node icon="icon1" type="tag"/>
<node icon="icon2" type="unspecified entity"/>
<node icon="icon3" type="simple chemical">
<propertyRef name="multimer" value="0"/>
</node>
<node icon="icon4" isCompartment="true" type="macromolecule">
<propertyRef name="multimer" value="0"/>
</node>
<node icon="icon5" isCompartment="true" type="complex"/>
<node icon="icon6" isCompartment="true" type="compartment"/>
<node icon="icon7" type="unit of information">
<propertyRef name="text" value=""/>
</node>
<node icon="icon8" type="variable">
<propertyRef name="value" value=""/>
</node>
<node icon="icon9" type="and"/>
<node icon="icon10" type="or"/>
<node icon="icon11" type="xor"/>
<node icon="icon12" type="not"/>
<node icon="icon13" type="transition"/>
<node icon="icon14" type="omitted process"/>
<node icon="icon15" type="uncertain process"/>
<node icon="icon16" type="interaction"/>
</nodes>
<edges>
<edge icon="icon17" type="consumption"/>
<edge icon="icon18" type="production"/>
<edge icon="icon19" type="modulation"/>
<edge icon="icon20" type="stimulation"/>
<edge icon="icon21" type="catalysis"/>
<edge icon="icon22" type="inhibition"/>
<edge icon="icon23" type="harpoon"/>
</edges>
<reactions/>
<viewOptions/>
<viewBuilder prototype="biouml.model.DefaultDiagramViewBuilder">
<nodeView type="unspecified entity"><![CDATA[function f(container, node, options, g)
{ 
    var d, pen, brush;
    d = new Dimension(70,40);
    brush = new Brush(new Color(1.0, 1.0, 0.9));
    pen = options.getDefaultPen();
    var ellipse = new EllipseView(pen, brush, 0, 0, d.width, d.height);
    container.add(ellipse);
    var title = new TextView(node.getValue('title', ''), options.getNodeTitleFont(), g); 
    container.add(title, CompositeView.X_CC | CompositeView.Y_CC); 
    return false; 
}]]></nodeView>
<nodeView type="xor"><![CDATA[function f(container, node, options, g)
{
    var d, pen, brush;
    d = new Dimension(30,30);
    brush = new Brush(new Color(1.0, 1.0, 1.0));
    pen = options.getDefaultPen();
    var ellipse = new EllipseView(pen, brush, 0, 0, d.width, d.height);
    container.add(ellipse);
    var title = new TextView("XOR", options.getNodeTitleFont(), g); 
    container.add(title, CompositeView.X_CC | CompositeView.Y_CC); 
    return false; 
}]]></nodeView>
<nodeView type="complex"><![CDATA[function f(container, node, options, g)
{
    var d, pen, brush;
    d = node.getValue("shapeSize", null);
    if(d.width == 0 && d.height == 0) 
    {
        d.width = 150; 
        d.height = 150;
    }
    brush = new Brush(new Color(0.9, 1.0, 1.0));
    pen = options.getDefaultPen();
    var x = new Array (20,d.width-20,d.width,d.width,d.width-20,20,0,0); 
    var y = new Array (0,0,20,d.height-20,d.height,d.height,d.height-20,20); 
    var polygon = new PolygonView(pen, brush, x, y);  
    container.add(polygon); 

    return false; 
}]]></nodeView>
<nodeView type="modulation"><![CDATA[function f(container, edge, inPoint, outPoint, options, g)
{
    var pen, brush;
    brush = new Brush(new Color(1.0, 1.0, 1.0));
    pen = options.getDefaultPen();
    var arrow = new ArrowView(pen, brush, inPoint.x, inPoint.y, outPoint.x, outPoint.y, null, ArrowView.createDiamondTip(pen, brush, 5, 10, 5));
    container.add(arrow);
    return false;
}]]></nodeView>
<nodeView type="unit of information"><![CDATA[function f(container, node, options, g)
{
    var d, pen, brush;
    d = new Dimension(40,20);
    brush = new Brush(new Color(1.0, 1.0, 1.0));
    pen = options.getDefaultPen();
    var ellipse = new BoxView(pen, brush, 0, 0, d.width, d.height);
    container.add(ellipse);
    var title = new TextView(node.getValue('text', ''), options.getNodeTitleFont(), g); 
    container.add(title, CompositeView.X_CC | CompositeView.Y_CC); 
    return false; 
}]]></nodeView>
<nodeView type="or"><![CDATA[function f(container, node, options, g)
{
    var d, pen, brush;
    d = new Dimension(30,30);
    brush = new Brush(new Color(1.0, 1.0, 1.0));
    pen = options.getDefaultPen();
    var ellipse = new EllipseView(pen, brush, 0, 0, d.width, d.height);
    container.add(ellipse);
    var title = new TextView("OR", options.getNodeTitleFont(), g); 
    container.add(title, CompositeView.X_CC | CompositeView.Y_CC); 
    return false; 
}]]></nodeView>
<nodeView type="consumption"><![CDATA[function f(container, edge, inPoint, outPoint, options, g)
{
    var pen, brush;
    brush = new Brush(new Color(0.0, 0.0, 0.0));
    pen = options.getDefaultPen();
    var arrow = new ArrowView(pen, brush, inPoint.x, inPoint.y, outPoint.x, outPoint.y, 0, 0);
    container.add(arrow);
    return false;
}]]></nodeView>
<nodeView type="tag"><![CDATA[function f(container, node, options, g)
{
    var d, pen, brush;
    d = new Dimension(70,40);
    brush = new Brush(new Color(0.9, 0.9, 1.0));
    pen = options.getDefaultPen();
    var x = new Array (0,d.width-25,d.width,d.width-25,0); 
    var y = new Array (0,0,d.height/2,d.height,d.height); 
    var polygon = new PolygonView(pen, brush, x, y);  
    container.add(polygon); 
    var title = new TextView(node.getValue('title', ''), options.getNodeTitleFont(), g); 
    container.add(title, CompositeView.X_CC | CompositeView.Y_CC); 
    return false; 
}]]></nodeView>
<nodeView type="harpoon"><![CDATA[function f(container, edge, inPoint, outPoint, options, g)
{
    var pen, brush;
    brush = new Brush(new Color(0.0, 0.0, 0.0));
    pen = options.getDefaultPen();
    var arrow = new ArrowView(pen, brush, inPoint.x, inPoint.y, outPoint.x, outPoint.y, null, ArrowView.createDiamondTip(pen, brush, 10, 6, 5));
    container.add(arrow);
    return false;
}]]></nodeView>
<nodeView type="inhibition"><![CDATA[function f(container, edge, inPoint, outPoint, options, g)
{
    var pen, brush;
    brush = new Brush(new Color(0.0, 0.0, 0.0));
    pen = options.getDefaultPen();
    var arrow = new ArrowView(pen, brush, inPoint.x, inPoint.y, outPoint.x, outPoint.y, null, ArrowView.createDiamondTip(pen, brush, 0,0, 8));
    container.add(arrow);
    return false;
}]]></nodeView>
<nodeView type="macromolecule"><![CDATA[function f(container, node, options, g) 
{
    var d, pen, brush;
    d = node.getValue("shapeSize", null);
    if(d.width == 0 && d.height == 0) 
    {
        d.width = 70; 
        d.height = 40;
    }
    brush = new Brush(new Color(0.9, 1.0, 0.9));
    pen = options.getDefaultPen();
    var multimer = node.getValue("multimer", 0);
    if(multimer>1)
    {
         var rect = new RoundRectangle2D.Float(5, 5, d.width, d.height, 20, 20);
         var box = new BoxView(pen, brush, rect); 
         container.add(box); 
    }
    var rect = new RoundRectangle2D.Float(0, 0, d.width, d.height, 20, 20);
    var box = new BoxView(pen, brush, rect); 
    container.add(box); 
    var title = new TextView(node.getValue('title', ''), options.getNodeTitleFont(), g); 
    container.add(title, CompositeView.X_CC | CompositeView.Y_CC); 
    if(multimer>1)
    {
         var mbox = new BoxView(pen, brush, 10, -10, 20, 20); 
         container.add(mbox); 
         var mcount = new TextView(node.getValue('multimer', '...'), options.getNodeTitleFont(), g); 
         var mPosition = new Point(15, 2); 
         container.add(mcount, CompositeView.X_LL | CompositeView.Y_TT, mPosition); 
    }
    return false; 
}]]></nodeView>
<nodeView type="transition"><![CDATA[function f(container, node, options, g)
{
    var d, pen, brush;
    d = new Dimension(15,15);
    brush = new Brush(new Color(1.0, 1.0, 1.0));
    pen = options.getDefaultPen();
    var box = new BoxView(pen, brush, 0, 0, d.width, d.height);
    container.add(box);
    return false; 
}]]></nodeView>
<nodeView type="uncertain process"><![CDATA[function f(container, node, options, g)
{
    var d, pen, brush;
    d = new Dimension(15,15);
    brush = new Brush(new Color(1.0, 1.0, 1.0));
    pen = options.getDefaultPen();
    var box = new BoxView(pen, brush, 0, 0, d.width, d.height);
    container.add(box);
    var title = new TextView("?", options.getNodeTitleFont(), g); 
    container.add(title, CompositeView.X_CC | CompositeView.Y_TT); 
    return false; 
}]]></nodeView>
<nodeView type="interaction"><![CDATA[function f(container, node, options, g)
{
    var d, pen, brush;
    d = new Dimension(10,10);
    brush = new Brush(new Color(0.0, 0.0, 0.0));
    pen = options.getDefaultPen();
    var ellipse = new EllipseView(pen, brush, 0, 0, d.width, d.height);
    container.add(ellipse);
    return false; 
}]]></nodeView>
<nodeView type="simple chemical"><![CDATA[function f(container, node, options, g)
{ 
    var d, pen, brush;
    d = new Dimension(50,50);
    brush = new Brush(new Color(1.0, 0.9, 1.0));
    pen = options.getDefaultPen();
    var multimer = node.getValue("multimer", 0);
    if(multimer>1)
    {
         var ellipse = new EllipseView(pen, brush, 5, 5, d.width, d.height);
         container.add(ellipse); 
    }
    var ellipse = new EllipseView(pen, brush, 0, 0, d.width, d.height);
    container.add(ellipse);
    var title = new TextView(node.getValue('title', ''), options.getNodeTitleFont(), g); 
    container.add(title, CompositeView.X_CC | CompositeView.Y_CC);
    if(multimer>1)
    {
         var mbox = new BoxView(pen, brush, d.width/2-10, -10, 20, 20); 
         container.add(mbox); 
         var mcount = new TextView(node.getValue('multimer', '...'), options.getNodeTitleFont(), g); 
         var mPosition = new Point(d.width/2-5, 2); 
         container.add(mcount, CompositeView.X_LL | CompositeView.Y_TT, mPosition); 
    } 
    return false; 
}]]></nodeView>
<nodeView type="omitted process"><![CDATA[function f(container, node, options, g)
{
    var d, pen, brush;
    d = new Dimension(15,15);
    brush = new Brush(new Color(1.0, 1.0, 1.0));
    pen = options.getDefaultPen();
    var box = new BoxView(pen, brush, 0, 0, d.width, d.height);
    container.add(box);
    var x = new Array (3,8); 
    var y = new Array (3,12); 
    var line1 = new PolygonView(pen, brush, x, y);  
    container.add(line1); 
    var x = new Array (8,13); 
    var y = new Array (3,12); 
    var line1 = new PolygonView(pen, brush, x, y);  
    container.add(line1); 
    return false; 
}]]></nodeView>
<nodeView type="production"><![CDATA[function f(container, edge, inPoint, outPoint, options, g)
{
    var pen, brush;
    brush = new Brush(new Color(0.0, 0.0, 0.0));
    pen = options.getDefaultPen();
    var arrow = new ArrowView(pen, brush, inPoint.x, inPoint.y, outPoint.x, outPoint.y, null, ArrowView.createTriangleTip(pen, brush, 15, 5));
    container.add(arrow);
    return false;
}]]></nodeView>
<nodeView type="and"><![CDATA[function f(container, node, options, g)
{
    var d, pen, brush;
    d = new Dimension(30,30);
    brush = new Brush(new Color(1.0, 1.0, 1.0));
    pen = options.getDefaultPen();
    var ellipse = new EllipseView(pen, brush, 0, 0, d.width, d.height);
    container.add(ellipse);
    var title = new TextView("AND", options.getNodeTitleFont(), g); 
    container.add(title, CompositeView.X_CC | CompositeView.Y_CC); 
    return false; 
}]]></nodeView>
<nodeView type="stimulation"><![CDATA[function f(container, edge, inPoint, outPoint, options, g)
{
    var pen, brush;
    brush = new Brush(new Color(1.0, 1.0, 1.0));
    pen = options.getDefaultPen();
    var arrow = new ArrowView(pen, brush,inPoint.x, inPoint.y, outPoint.x, outPoint.y, null, ArrowView.createTriangleTip(pen, brush, 15, 5));
    container.add(arrow);
    return false;
}]]></nodeView>
<nodeView type="not"><![CDATA[function f(container, node, options, g)
{
    var d, pen, brush;
    d = new Dimension(30,30);
    brush = new Brush(new Color(1.0, 1.0, 1.0));
    pen = options.getDefaultPen();
    var ellipse = new EllipseView(pen, brush, 0, 0, d.width, d.height);
    container.add(ellipse);
    var title = new TextView("NOT", options.getNodeTitleFont(), g); 
    container.add(title, CompositeView.X_CC | CompositeView.Y_CC); 
    return false; 
}]]></nodeView>
<nodeView type="source-sink"><![CDATA[function f(container, node, options, g)
{ 
            var d, pen, brush;
            d = new Dimension(40,40);
            brush = new Brush(new Color(1.0, 0.9, 0.9));
            pen = options.getDefaultPen();
            var ellipse = new EllipseView(pen, brush, 0, 0, d.width, d.height);
            var x = new Array (3,d.width-3);
            var y = new Array (d.height+3,-3);
            var polygon = new PolygonView(pen, null, x, y); 
            container.add(ellipse);
            container.add(polygon);
            return false; 
}]]></nodeView>
<nodeView type="catalysis"><![CDATA[function f(container, edge, inPoint, outPoint, options, g)
{
    var pen, brush;
    brush = new Brush(new Color(1.0, 1.0, 1.0));
    pen = options.getDefaultPen();
    var arrow = new ArrowView(pen, brush, inPoint.x, inPoint.y, outPoint.x, outPoint.y, null, ArrowView.createEllipseTip(pen, brush, 6));
    container.add(arrow);
    return false;
}]]></nodeView>
<nodeView type="variable"><![CDATA[function f(container, node, options, g)
{
    var d, pen, brush;
    d = new Dimension(40,20);
    brush = new Brush(new Color(1.0, 1.0, 1.0));
    pen = options.getDefaultPen();
    var ellipse = new EllipseView(pen, brush, 0, 0, d.width, d.height);
    container.add(ellipse);
    var title = new TextView(node.getValue('name', '')+' '+node.getValue('value', ''), options.getNodeTitleFont(), g); 
    container.add(title, CompositeView.X_CC | CompositeView.Y_CC); 
    return false; 
}]]></nodeView>
<nodeView type="compartment"><![CDATA[function f(container, node, options, g) 
{
     var d, pen, brush;
    d = node.getValue("shapeSize", null);
    if(d.width == 0 && d.height == 0) 
    {
        d.width = 150; 
        d.height = 150;
    }
    brush = new Brush(new Color(1.0, 1.0, 1.0));
    pen = options.getDefaultPen();
    var rect = new RoundRectangle2D.Float(0, 0, d.width, d.height, 40, 15);
    var box = new BoxView(pen, brush, rect); 
    container.add(box); 
    var title = new TextView(node.getValue('title', ''), options.getNodeTitleFont(), g); 
    var textPosition = new Point((d.width-title.getBounds().width)-5, 2); 
    container.add(title, CompositeView.X_LL | CompositeView.Y_TT, textPosition); 

    return false; 
}]]></nodeView>
</viewBuilder>
<icons>
<icon name="icon17">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAM0lEQVR42mP4TyFgGDVgMBiwcePG/6tXr4ZjQnx0OYYvX778//z5MxiD2KTyR2NhWBgAANWe6o4yWum7AAAAAElFTkSuQmCC</icon>
<icon name="icon18">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAQklEQVR42mP4TyFgGIEGrF69mnIDkA0h2wCYIQwbN25EESTER5dj+PLly//Pnz+DMYhNiI9sAIg/MGEw0lMi1Q0AAAMr3yd1L+O0AAAAAElFTkSuQmCC</icon>
<icon name="icon19">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAQklEQVR42mP4TyFgGDWAPANWr15NvgEwzTCaYePGjWAODBPiIwOQHMOXL1/+f/78GYxBbEJ8ZBeA+PQPg9GERAMDAHRN6APDhsp4AAAAAElFTkSuQmCC</icon>
<icon name="icon20">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAARUlEQVR42mP4TyFgGIEGrF69mnIDkA0h2wUwmmHjxo1wU0GYEB/ZdpAcw5cvX/5//vwZjEFsQnxkF4D4AxcGIzklUt0AACqD4xd71Mu3AAAAAElFTkSuQmCC</icon>
<icon name="icon21">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAQ0lEQVR42mP4TyFgGDWAPANWr14NxmQZANMIYzNs3LgRbiIIE+IjA5Acw5cvX/5//vwZjEFsQnwMF9A9DEYTEg0MAACpc+Ysuk0cHAAAAABJRU5ErkJggg==</icon>
<icon name="icon22">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAOklEQVR42mP4TyFgGOEGrF69ejAYsHHjRjADhgnx0eUYvnz58v/z589gDGIT4sPYIDxIwmA0KVNuAAD5euTEIi9ANgAAAABJRU5ErkJggg==</icon>
<icon name="icon23">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAARklEQVR42mP4TyFgGGEGrF69mnIXgAxBNogsLyAbwrBx40a4AAgT4qPLMXz58uX/58+fwRjEJoYPMwDEpm8YUCUWRg3ABADcKuD+ZNDMWgAAAABJRU5ErkJggg==</icon>
<icon name="icon0">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABVUlEQVR42rWTbYuCQBSF+/+f+xOVZKUSEkQGlYKiQR8Ke5PoTVPrF5zlXJhll5KIZQeGwXHuc8+5c6eGP47aJ4fzPEdZlu8BQRBgPB7DNE1Mp1Nst1vZdxwHj8ejGrBer9Hr9TCZTBBFkQT6vo/RaIR6vS57lRZ2ux3a7TbO5zNutxuu1ytOp5NIpqJms4l+v18NMAwDx+MRl8tFAjkJWS6X0DQN9/sd8/lcbDwBNpsNBoOBFEkFUwnXRqOB/X4v4DRN5fsJQImz2UwOKABtsB5hGCLLsu89y7IE9gvAohGiADzoeZ54/qmK+7ZtI0mSagv0Hcex+GYmZYWTSnRdf11EymUwg1qtlkDVTaiCrlYrUfASsFgs5OdwOBQ7yjcnrVEJk/A2Khup2+1KwzD74XCQQPplA3U6HYFV9gH9u64rmaiEMPrlyrZ++5joryiK/32Nr8YXxUi7n1KPFGwAAAAASUVORK5CYII=</icon>
<icon name="icon1">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAkElEQVR42t2TMQrEIBBFc//D2OkNgtjYmEasVAhqUqRUm79oG7OwuMWyA48pnHmKowsmY/kNgbUWzjl474e0teu6xoJaKwghMMZAa/0I57xvdBOUUsAYw3EcCCEMiTH2LISAlPIuoJT2on3f35JSglKqi3LOnwsa53li2zas6zp3gtb3nTuYnsL0O/iTvzATL13u0nBgrzJ1AAAAAElFTkSuQmCC</icon>
<icon name="icon2">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA/UlEQVR42tWSSWuEQBCF5///IZG5uFxGcRncFVfQcUNBBPH2hioYQxhiDoGQCAWlbX/1+r2+4IfP5e8Btm1DURSwLAuKouB6vULXdfi+j3Vdvwbs+84/yrIMx3EYEEURsizj3rZtaJoGSZIwjuM7gDbHcYy+77mGYUDXdWjblnsq+l6WJSuj/gCQPM/zmPx4PE6LoHVd88ADIIoi0jTlxe8AVDTddd0PAJlmGAamaWLJZ5vpKHmesy+fPAiCgE2qqurw4eXFqydAGIa43W6c1luMTdNAVVVWQ56Q86Zpcir3+x2CIPAgSuz0IlHey7IgSRKWOs8zv/+Tq/zrgCfkVdNskoL2ugAAAABJRU5ErkJggg==</icon>
<icon name="icon3">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABHElEQVR42q2T24qDUAxF+/+fI4qoVbxiCz5YBS+oiC9eW4oo9TFDAiKd0drSObAhHMxKzNk5wJfnsHYZxzEIggAsy5Iw9n1/H/B4PEBRFDBNE4qigLZtSRifTicQRRG6rtsGyLIMSZLA9XqFqqqgLEsSxniHIJ7n4X6//wVYlgWXy4UqzIm/1TQNpGkKkiQ9A5DIcRxV2Uqehd9omgZhGC4Az/PgfD6/rD6rrmtK1nV9AbiuSxBscQ+AwlmoqroAoiiiGbzbQRAEYBjGAhiGARiGeQtwu93otbIse34Fx3FIrwaJBbBbHOKqD47HI7W35QN8Qux0HMd1wDRNRMcJ53lOQ52daNs2ubTv+/1dwP9D/6M3PtqFf9vGT84PQa6/hqfsq/MAAAAASUVORK5CYII=</icon>
<icon name="icon4">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAoUlEQVR42s2TvQ6FIAyFff8ncyEEgvI3I6ITsLD1pjXG3MVrrgtNThg4/SgtDPAyhn4AIQRYloXWO52e1toFYIyBMQastY/knINxHA9ArRWklLBtG6zr+kj7vlNOzvkATNNEG1jeE6WUCFBK6QUwz/M7gBCCmhhj/NlA9GATMYcAOAqlFFXhvacR3Qk9WmvgnH8/pHOMeMKd0INX6PAv/Bsf77LMGemNaaUAAAAASUVORK5CYII=</icon>
<icon name="icon5">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAYklEQVR42u2TMQrAMAhFvf8ZDdFgksFD/CKhQ7emZqzwwEGegkpIBt2Ju2/xENRawcwopbwiakVkCVprMDPMObdQVfTeQdF9jLFNNA4JxShfBcEvOCFIrzF9SOlTPvJMmbgATO+7PPT9np0AAAAASUVORK5CYII=</icon>
<icon name="icon6">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAY0lEQVR42u2TywoAIQhF+/9vjLIMW9cP3OEGzbrHbhjhiIKelTpchmPqvQ9aa0vM2SFQVXjvkVKCiCzB2RgjQghwbCiptW4zBDlnEDPb5hd8R3B9SKWUo1PmMuvjZyLvN97EA/Bgu5NeE6n3AAAAAElFTkSuQmCC</icon>
<icon name="icon7">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAJUlEQVR42mP4TyFgGDWAygYwMDAQhfEaQNDGwW8ARWEwmpDIAwA5fK58zQ3M4QAAAABJRU5ErkJggg==</icon>
<icon name="icon8">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMUlEQVR42mP4TyFgGDUAuwEMDAxYMUED8CnEJc+ALEm0s5HUUs8Air1AlUAcTYnkAQCDTrR20iDyOQAAAABJRU5ErkJggg==</icon>
<icon name="icon9">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAU0lEQVR42q1TWwoAIAjb/S9dv6FbzVQIxfYAM6xmgDYBeiwBBVR3cMkKgwqZYVElR5EkwOozp54CvrIUiC7U9SZgO6sZfA2x/YwjizSyyiOfqRobC5ZF5bXtHKsAAAAASUVORK5CYII=</icon>
<icon name="icon10">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAUklEQVR42mP4TyFgwCrIwIAVE2UALoW45BiI1YxLDQMpmrGpZSBVM7ohOA1AsQVLIOI1AC6JgybLAJJcgNM2Yl1AciBSHI1USUhUScpUyUykAgDtN2bE17x/8gAAAABJRU5ErkJggg==</icon>
<icon name="icon11">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAUElEQVR42q1TWw4AIAji/peu7wx8uzmbATM1nKGBJgHqKQEFVHfIkhUGFTLDokq2Io+Ajez8YSOCim0Bt4LME8IKWk0cj3FlkVZWeeUzVe0CymBU1iwEm0sAAAAASUVORK5CYII=</icon>
<icon name="icon12">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAUklEQVR42q2T2woAIAhD9/8/Xc/K5l2QwrYDmeEtA7QI0CwBlFCdoWpWGnTMTIuu2UMMwK9s75saAiKgBBj6BBBdIQWMm7h+xpNBOhnlk8/UjQ//rFHZ/TucYAAAAABJRU5ErkJggg==</icon>
<icon name="icon13">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAs0lEQVR42s2TsQnDMBREtaF28AQq3Bi8gybQAgJbuLE1hRprDtXGzYULGOJEP4akseCqe3p8fZDCn0fdS7BtG3LOSClVw46MKJjnGU3TwFpbDTsyomAYBsQYxXHZkTkJ9n3HEe89xnEUBezIvN5Rfd+jbdtntNZYlkUUsCNz8Lx7esI0TZcTkBF3QOBK8N5/CEIIooDdVwEX5JxDKaUadmREwbquMMag67pq2JG58V/45TwAnHK0fDfikh4AAAAASUVORK5CYII=</icon>
<icon name="icon14">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABC0lEQVR42t1TO4uDQBjMz7X0T6QQRRE7EbVQCxuxFPwDosFGEBEfJEV8FCIWlhO+BQ/ucnjFdVkYdtmdmf1mHxf8s10+0KCua6Rpitvt9g1ZlmFZlnODdV3B8zyCIEAYhvB9n/UESZJgGMa5wTzP0HUdeZ6jqioMw4A4jtlaWZawbfvdwHVdmKbJFkVRhCAI2LYNiqIwgqqqGMcRj8cDHMfBcRzGJ5D20nUdmqZB3/dIkgSyLDMhESl3URSMeL/fWYzn88n4BNK+RdA0jY2nafqqgmJFUcSM/jyDw4AaVUQ7khlV5HneuQFlp1uwLItlJBGNSXi9Xn8/xJ8TtBu9hSPngbZtse/7J/6FF7NsuXQ2zMTwAAAAAElFTkSuQmCC</icon>
<icon name="icon15">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAxUlEQVR42u1SuwqEQBDz/7G0VLERCwvxAdv4ASJiqY2ooFaWaimRCdzhsYXFtQYGhiST3R3WwJ8w3gA9YF1XmKYJz/MQBAF834fruuREewwYhgFxHGPfdw4XRYHzPBFFETUtIMsyip+yLAtKKSzLgrquYds2jUmSULt7ZdYYxxF9338rz3OaBWVZoqoq9mmaUrt7ZVZ7Qtd1vIGgaRocx8FeONEed9C2LRzHwTzPPGGaJvbCifYYsG0btx+G4U8JJ9r7lXVcy8LM+qD13nEAAAAASUVORK5CYII=</icon>
<icon name="icon16">iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAiUlEQVR42mP4TyFgGDUAtwHnzp37n5ub+7+tre3/u3fvSDNg9+7d/5mZmf8zMDCAsba29v8nT55gN2Djxo3/V69eDccgvpGREVwzDPv7+//fsmULhlqGL1++/P/8+TMYg9gg4OzsjGGAg4MDWA5dPVFeALFBYiQF4o4dO/7r6emBMYg9mhJpaAAA0mmsSzJHRkoAAAAASUVORK5CYII=</icon>
</icons>
<semanticController prototype="biouml.model.DefaultSemanticController">
<canAccept><![CDATA[function f(container, de)
{
    var deType = de.getValue('kernel', '').getType();
    if(deType == "unspecified entity" || deType == "xor" || deType == "or" || deType == "dissociation"  || deType == "association"
          || deType == "transition" || deType == "uncertain process"  || deType == "omitted process" || deType == "and" || deType == "not")
    {
        var type = container.getValue('kernel', '').getType();
        if(type == 'info-diagram' || type == 'compartment')
        {
            return true;
        }
        return false;
    }
    else if(deType == "complex" || deType == "macromolecule" || deType == "simple chemical" || deType == "compartment")
    {
        var type = container.getValue('kernel', '').getType();
        if(type == 'info-diagram' || type == 'compartment' || type == 'complex')
        {
            return true;
        }
        return false;
    }
    else if(deType == "modulation")
    {
        var input = de.getValue('input', '').getKernel().getType();
        var output = de.getValue('output', '').getKernel().getType();
        if((input == 'unspecified entity' || input == 'simple chemical' || input == 'macromolecule' || input == 'complex'
         || input == 'and' || input == 'or' || input == 'xor' || input == 'not') 
         &&(output == 'transition' || output == 'omitted process' || output == 'uncertain process' || output == 'interaction'))
        {
            return true;
        }
        return false; 
    }
    else if(deType == "consumption")
    {
    var input = de.getValue('input', '').getKernel().getType();
    var output = de.getValue('output', '').getKernel().getType();
    if((input == 'source-sink' || input == 'unspecified entity' || input == 'simple chemical' || input == 'macromolecule' || input == 'complex' || input == 'compartment' || input == 'variable') 
     &&(output == 'tag' || output == 'transition' || output == 'omitted process' || output == 'uncertain process' || output == 'interaction'
     || output == 'and' || output == 'or' || output == 'xor' || output == 'not'))
    {
        return true;
    }
    return false; 
    }
    else if(deType == "harpoon")
    {
    var input = de.getValue('input', '').getKernel().getType();
    var output = de.getValue('output', '').getKernel().getType();
    if(input == 'interaction')
    {
        return true;
    }
    return false; 
    }
    else if(deType == "inhibition")
    {
    var input = de.getValue('input', '').getKernel().getType();
    var output = de.getValue('output', '').getKernel().getType();
    if((input == 'unspecified entity' || input == 'simple chemical' || input == 'macromolecule' || input == 'complex'
     || input == 'and' || input == 'or' || input == 'xor' || input == 'not') 
     &&(output == 'transition' || output == 'omitted process' || output == 'uncertain process' || output == 'interaction'))
    {
        return true;
    }
    return false; 
    }
    else if(deType == "production")
    {
    var input = de.getValue('input', '').getKernel().getType();
    var output = de.getValue('output', '').getKernel().getType();
    if((input == 'transition' || input == 'omitted process' || input == 'uncertain process')
     &&(output == 'source-sink' || output == 'unspecified entity' || output == 'simple chemical' || output == 'macromolecule' || output == 'complex' || output == 'interaction'))
    {
        return true;
    }
    return false; 
    }
    else if(deType == "stimulation")
    {
    var input = de.getValue('input', '').getKernel().getType();
    var output = de.getValue('output', '').getKernel().getType();
    if((input == 'unspecified entity' || input == 'simple chemical' || input == 'macromolecule' || input == 'complex'
     || input == 'and' || input == 'or' || input == 'xor' || input == 'not') 
     &&(output == 'transition' || output == 'omitted process' || output == 'uncertain process' || output == 'interaction'))
    {
        return true;
    }
    return false; 
    }
    else if(deType == "source-sink")
    {
    var type = container.getValue('kernel', '').getType();
    if(type == 'info-diagram')
    {
        return true;
    }
    return false;
    }
    else if(deType == "catalysis")
    {
    var input = de.getValue('input', '').getKernel().getType();
    var output = de.getValue('output', '').getKernel().getType();
    if((input == 'unspecified entity' || input == 'simple chemical' || input == 'macromolecule' || input == 'complex'
     || input == 'and' || input == 'or' || input == 'xor' || input == 'not') 
     &&(output == 'transition' || output == 'omitted process' || output == 'uncertain process' || output == 'interaction'))
    {
        return true;
    }
    return false; 
    }
    return true;
}]]></canAccept>
<isResizable><![CDATA[function f(de)
{
    var type = de.getValue('kernel', '').getType();
    if(type == "variable")
    {
        return false;
    }
    return true;
}]]></isResizable>
<move><![CDATA[function f(location, node, parent)
{
    var deType = node.getValue('kernel', '').getType();
    if(deType == "unit of information" || deType == "variable")
    {
        var type = parent.getValue('kernel', '').getType();
        if(type == 'compartment' || type == 'complex' || type == 'macromolecule')
        {
           JSUtility.moveToEdge(location, node, parent);
        }
    }
}]]></move>
</semanticController>
<examples>
<example name="test1">
<diagram diagramType="biouml.model.xml.XmlDiagramType" notation="">
<diagramInfo/>
<layouterInfo>
<o n="layouterInfo" t="ru.biosoft.graph.ForceDirectedLayouter">
<v>
<wi n="initialPlacement" v="1"/>
<wi n="edgeLength" v="150"/>
<wf n="repulsion" v="1.0"/>
<wi n="repulsionDistance" v="10"/>
<wf n="gravity" v="0.06"/>
<wi n="orientation" v="0"/>
<wi n="distanceMethod" v="0"/>
<wf n="attraction" v="1.0"/>
<wf n="magneticIntencity" v="0.0"/>
<wi n="iterationNumber" v="100"/>
<wf n="minTemperature" v="0.0"/>
<wf n="maxTemperature" v="0.0"/>
<o n="dpl" t="ru.biosoft.graph.DiagonalPathLayouter">
<v>
<wi n="lineDistance" v="10"/>
<o n="selfLoopLayouter" t="ru.biosoft.graph.SelfLoopLayouter">
<v>
<wi n="loopLength" v="30"/>
</v>
</o>
</v>
</o>
<wb n="horisontalMovementAllowed" v="true"/>
<wb n="verticalMovementAllowed" v="true"/>
<o n="pathWeighter" t="ru.biosoft.graph.PathWeighter">
<v>
<wi n="bendPenalty" v="500"/>
<wi n="confluencePenalty" v="50000"/>
<wi n="lengthPenalty" v="1"/>
</v>
</o>
<o n="sl" t="ru.biosoft.graph.SubgraphLayouter">
<v>
<wi n="layerDeltaX" v="150"/>
<wi n="layerDeltaY" v="150"/>
</v>
</o>
</v>
</o>
</layouterInfo>
<compartmentInfo color="255,255,255" height="150" kernel="stub/test1" kernel_type="info-diagram" shape="0" width="150" x="0" y="0"/>
<nodes>
<node height="50" kernel="stub/hghhg" kernel_type="unspecified entity" width="50" x="71" y="114"/>
<node height="50" kernel="stub/jkhkj" kernel_type="interaction" width="50" x="240" y="131"/>
<node height="50" kernel="stub/jkhkjg" kernel_type="unspecified entity" width="50" x="361" y="116"/>
</nodes>
<edges>
<edge in="jkhkj" kernel="stub/harpoon_0: $jkhkj to $hghhg" kernel_type="harpoon" out="hghhg">
<path>
<segment segmentType="moveTo" x0="240" y0="136"/>
<segment segmentType="lineTo" x0="141" y0="134"/>
</path>
</edge>
<edge in="jkhkj" kernel="stub/harpoon_0: $jkhkj to $jkhkjg" kernel_type="harpoon" out="jkhkjg">
<path>
<segment segmentType="moveTo" x0="250" y0="136"/>
<segment segmentType="lineTo" x0="361" y0="136"/>
</path>
</edge>
</edges>
<filters>
<a n="filters" t="[Lbiouml.model.DiagramFilter;">
<v/>
</a>
</filters>
</diagram>
</example>
<example name="test2">
<diagram diagramType="biouml.model.xml.XmlDiagramType" notation="">
<diagramInfo/>
<layouterInfo>
<o n="layouterInfo" t="ru.biosoft.graph.ForceDirectedLayouter">
<v>
<wi n="initialPlacement" v="1"/>
<wi n="edgeLength" v="150"/>
<wf n="repulsion" v="1.0"/>
<wi n="repulsionDistance" v="10"/>
<wf n="gravity" v="0.06"/>
<wi n="orientation" v="0"/>
<wi n="distanceMethod" v="0"/>
<wf n="attraction" v="1.0"/>
<wf n="magneticIntencity" v="0.0"/>
<wi n="iterationNumber" v="100"/>
<wf n="minTemperature" v="0.0"/>
<wf n="maxTemperature" v="0.0"/>
<o n="dpl" t="ru.biosoft.graph.DiagonalPathLayouter">
<v>
<wi n="lineDistance" v="10"/>
<o n="selfLoopLayouter" t="ru.biosoft.graph.SelfLoopLayouter">
<v>
<wi n="loopLength" v="30"/>
</v>
</o>
</v>
</o>
<wb n="horisontalMovementAllowed" v="true"/>
<wb n="verticalMovementAllowed" v="true"/>
<o n="pathWeighter" t="ru.biosoft.graph.PathWeighter">
<v>
<wi n="bendPenalty" v="500"/>
<wi n="confluencePenalty" v="50000"/>
<wi n="lengthPenalty" v="1"/>
</v>
</o>
<o n="sl" t="ru.biosoft.graph.SubgraphLayouter">
<v>
<wi n="layerDeltaX" v="150"/>
<wi n="layerDeltaY" v="150"/>
</v>
</o>
</v>
</o>
</layouterInfo>
<compartmentInfo color="255,255,255" height="150" kernel="stub/test2" kernel_type="info-diagram" shape="0" width="150" x="0" y="0"/>
<nodes>
<node height="50" kernel="stub/curare" kernel_type="simple chemical" width="50" x="489" y="192">
<property name="multimer" short-description="multimer" type="int" value="0"/>
</node>
<node height="50" kernel="stub/cxwxwe" kernel_type="interaction" width="50" x="248" y="214"/>
<node height="50" kernel="stub/desens" kernel_type="variable" width="50" x="347" y="125">
<property name="value" short-description="value" type="String" value=""/>
</node>
<node height="50" kernel="stub/hjbh" kernel_type="interaction" width="50" x="364" y="212"/>
<compartment>
<compartmentInfo color="255,255,255" height="55" kernel="stub/nAChR" kernel_type="macromolecule" shape="0" width="91" x="266" y="271"/>
<nodes>
<node height="50" kernel="stub/pore" kernel_type="variable" width="50" x="291" y="261">
<property name="value" short-description="value" type="String" value=""/>
</node>
</nodes>
<edges/>
<property name="multimer" short-description="multimer" type="int" value="0"/>
</compartment>
<node height="50" kernel="stub/nicotine" kernel_type="simple chemical" width="50" x="119" y="194">
<property name="multimer" short-description="multimer" type="int" value="0"/>
</node>
<node height="50" kernel="stub/open" kernel_type="variable" width="50" x="233" y="126">
<property name="value" short-description="value" type="String" value=""/>
</node>
</nodes>
<edges>
<edge in="desens" kernel="stub/consumption_0: $desens to $hjbh" kernel_type="consumption" out="hjbh">
<path>
<segment segmentType="moveTo" x0="369" y0="145"/>
<segment segmentType="lineTo" x0="369" y0="212"/>
</path>
</edge>
<edge in="open" kernel="stub/consumption_0: $open to $cxwxwe" kernel_type="consumption" out="cxwxwe">
<path>
<segment segmentType="moveTo" x0="253" y0="146"/>
<segment segmentType="lineTo" x0="253" y0="214"/>
</path>
</edge>
<edge in="cxwxwe" kernel="stub/harpoon_0: $cxwxwe to $&quot;nAChR.pore&quot;" kernel_type="harpoon" out="nAChR/pore"/>
<edge in="hjbh" kernel="stub/harpoon_0: $hjbh to $&quot;nAChR.pore&quot;" kernel_type="harpoon" out="nAChR/pore"/>
<edge in="curare" kernel="stub/stimulation_0: $curare to $hjbh" kernel_type="stimulation" out="hjbh">
<path>
<segment segmentType="moveTo" x0="489" y0="217"/>
<segment segmentType="lineTo" x0="374" y0="217"/>
</path>
</edge>
<edge in="nicotine" kernel="stub/stimulation_0: $nicotine to $cxwxwe" kernel_type="stimulation" out="cxwxwe">
<path>
<segment segmentType="moveTo" x0="169" y0="219"/>
<segment segmentType="lineTo" x0="248" y0="219"/>
</path>
</edge>
</edges>
<filters>
<a n="filters" t="[Lbiouml.model.DiagramFilter;">
<v/>
</a>
</filters>
</diagram>
</example>
</examples>
</graphic-notation>
